# SCS Indirect Solver Parallelized?

**URL:** <https://discourse.julialang.org/t/scs-indirect-solver-parallelized/81687>\
**Category:** Optimization (Mathematical)\
**Created:** [May 25, 2022, 10:35pm UTC](https://discourse.julialang.org/t/scs-indirect-solver-parallelized/81687 "2022-05-25T22:35:38Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Stuart\_Rogers](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stuart_rogers/32/10694_2.png) [@Stuart\_Rogers](https://discourse.julialang.org/u/Stuart_Rogers)\
**Post date:** [May 25, 2022, 10:35pm UTC](https://discourse.julialang.org/t/scs-indirect-solver-parallelized/81687/1 "2022-05-25T22:35:38Z")

</div>

Is it possible to permit the SCS.jl indirect solver to parallelize its computations with multiple threads running on a multi-core CPU? I am trying to solve a very large LP.

problem: variables n: 47251695, constraints m: 94518279  
cones: z: primal zero / dual free vars: 14889  
l: linear vars: 94503390  
settings: eps\_abs: 1.0e-004, eps\_rel: 1.0e-004, eps\_infeas: 1.0e-012  
alpha: 1.50, scale: 1.00e-001, adaptive\_scale: 1  
max\_iters: 100000, normalize: 1, rho\_x: 1.00e-006  
acceleration\_lookback: 10, acceleration\_interval: 10  
lin-sys: sparse-indirect  
nnz(A): 189001496, nnz(P): 0

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [May 26, 2022, 3:26am UTC](https://discourse.julialang.org/t/scs-indirect-solver-parallelized/81687/2 "2022-05-26T03:26:18Z")

</div>

I don’t think so. You can find the options for SCS here: [Settings — SCS 3.2.1 documentation](https://www.cvxgrp.org/scs/api/settings.html)

There is some support for the GPU solver, [GitHub - jump-dev/SCS.jl: Julia Wrapper for SCS (https://github.com/cvxgrp/scs)](https://github.com/jump-dev/SCS.jl#scs-on-gpu), but it’s currently segfaulting on our tests, so it’s still experimental. cc @abulak

Have you considered using Gurobi?

---

<div class="post-metadata">

**Author:** ![Stuart\_Rogers](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stuart_rogers/32/10694_2.png) [@Stuart\_Rogers](https://discourse.julialang.org/u/Stuart_Rogers)\
**Post date:** [May 26, 2022, 4:21am UTC](https://discourse.julialang.org/t/scs-indirect-solver-parallelized/81687/3 "2022-05-26T04:21:22Z")

</div>

Gurobi and CPLEX ran out of memory.

---

<div class="post-metadata">

**Author:** ![abulak](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/abulak/32/28314_2.png) [@abulak](https://discourse.julialang.org/u/abulak)\
**Post date:** [May 26, 2022, 2:16pm UTC](https://discourse.julialang.org/t/scs-indirect-solver-parallelized/81687/4 "2022-05-26T14:16:28Z")

</div>

@Stuart_Rogers With that size I’d guess your best chance would be to try finding some additional structure among variables or constraints. Maybe the problem enjoys some kind of symmetry?

If not then you may

- set `OMP_NUM_THREADS` env variable which will enable some parallelization in scs libraries
- use `scsmkldirect` solver from [add support for sparse-direct-mkl-pardiso solver by kalmarek · Pull Request #255 · jump-dev/SCS.jl · GitHub](https://github.com/jump-dev/SCS.jl/pull/255)

If you’re running out of memory the GPU solver will not help you 😉 (and it’s not really recommended by us or by the upstream).

---

<div class="post-metadata">

**Author:** ![Stuart\_Rogers](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stuart_rogers/32/10694_2.png) [@Stuart\_Rogers](https://discourse.julialang.org/u/Stuart_Rogers)\
**Post date:** [May 26, 2022, 8:27pm UTC](https://discourse.julialang.org/t/scs-indirect-solver-parallelized/81687/5 "2022-05-26T20:27:10Z")

</div>

@abulak

- set `OMP_NUM_THREADS` env variable which will enable some parallelization in scs libraries  
Is OMP\_NUM\_THREADS different from JULIA\_NUM\_THREADS? [Environment Variables · The Julia Language](https://docs.julialang.org/en/v1/manual/environment-variables/#Parallelization)

---

<div class="post-metadata">

**Author:** ![abulak](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/abulak/32/28314_2.png) [@abulak](https://discourse.julialang.org/u/abulak)\
**Post date:** [May 30, 2022, 9:36am UTC](https://discourse.julialang.org/t/scs-indirect-solver-parallelized/81687/6 "2022-05-30T09:36:09Z")

</div>

I couldn’t track why exactly, but setting `OMP_NUM_THREADS` before calling first solve with `SCS` does change the number of used threads. I found it quite strange since we compile with `USE_OPENMP=0`, but that’s how it looks here 😉
