疎な半正定値行列の Cholesky 分解の用のソルバーとして MUMPS : a parallel sparse direct solver を試している。SDPA 7.x には自前の Sparse Cholesky Solver が含まれているのだが、場合によってはこの部分がボトルネックになることもある。この MUMPS は MPI による並列化を行うこともできるので、SDP の conversion の高速化から、次期 SDPARA などに使うことも可能である。
N = 50000, NonZeros = 4985507 なので相当疎な行列になるが、このくらい疎だと並列化による効果は以下のようにあまり期待できない。以下の結果は Mehrotra型 の predictor-corrector 主双対内点法の Linear Equation の部分のシミュレーションになっている。
1: time mpiexec -machinefile ./hosts -n 1 numactl --physcpubind=0 ./simple_example
29.273s
2: time mpiexec -machinefile ./hosts -n 2 numactl --physcpubind=0,1 ./simple_example
26.056s
3: time mpiexec -machinefile ./hosts -n 4 numactl --physcpubind=0,1 ./simple_example
19.564s
4: time mpiexec -machinefile ./hosts -n 8 numactl --physcpubind=0,1 ./simple_example
17.031s
5: time mpiexec -machinefile ./hosts -n 16 numactl --physcpubind=0,1 ./simple_example
19.660s
6: time mpiexec -machinefile ./hosts2 -n 16 numactl --physcpubind=0 ./simple_example
18.107s
N = 50000, NonZeros = 4985507 なので相当疎な行列になるが、このくらい疎だと並列化による効果は以下のようにあまり期待できない。以下の結果は Mehrotra型 の predictor-corrector 主双対内点法の Linear Equation の部分のシミュレーションになっている。
1: time mpiexec -machinefile ./hosts -n 1 numactl --physcpubind=0 ./simple_example
29.273s
2: time mpiexec -machinefile ./hosts -n 2 numactl --physcpubind=0,1 ./simple_example
26.056s
3: time mpiexec -machinefile ./hosts -n 4 numactl --physcpubind=0,1 ./simple_example
19.564s
4: time mpiexec -machinefile ./hosts -n 8 numactl --physcpubind=0,1 ./simple_example
17.031s
5: time mpiexec -machinefile ./hosts -n 16 numactl --physcpubind=0,1 ./simple_example
19.660s
6: time mpiexec -machinefile ./hosts2 -n 16 numactl --physcpubind=0 ./simple_example
18.107s