SCS Indirect Solver Parallelized?

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

I don’t think so. You can find the options for SCS here: Settings — SCS 3.2.1 documentation

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

Have you considered using Gurobi?

Gurobi and CPLEX ran out of memory.

@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

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

@abulak

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 :wink: