私は、C++で線形連立方程式を解くためのさまざまなオープンソースコードをテストしてきました。これまでのところ、私が見つけた最速のアルマジロは、OPENblasパッケージも使用しています。高密度の線形NxNシステムを解決するには、N = 5000が私のシステムで約8.3秒かかります。これは非常に高速です(openblasがインストールされていない場合は約30秒かかります)。
この増加の理由の1つは、armadillo+openblasが複数のスレッドの使用を可能にしているように見えることです。2つのコアで実行されますが、openblasのないarmadilloは1つしか使用しません。i7プロセッサを使用しているので、コアの数を増やしてさらにテストしたいと思います。私はubuntuを使用しているので、openblasのドキュメントからターミナルで実行できます。
OPENBLAS_NUM_THREADS=4をエクスポートします
ただし、コードを再度実行しても、使用されているコアの数や速度は向上しないようです。私は何か間違ったことをしていますか、それともアルマジロの「solve(A、b)」コマンドを使用するための最大量は2ですか?アルマジロのソースコードをどこにも見つけることができませんでした。
ちなみに、armadillo /openblasがAx=b(並列処理などを使用した標準のLU分解)を解くために使用する方法を知っている人はいますか?ありがとう!
編集:実際には、シナプスパッケージマネージャーを使用してopenblasをインストールする場合、2でスタックするコアの数はバグのようです。ここを参照してください。ソースから再インストールすると、実際に持っているコアの数を検出できます(8)。これで、export OPENBLAS_NUM_THREADS=4などを使用して管理できます。