3

私は、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などを使用して管理できます。

4

1 に答える 1

3

Armadilloは、 OpenBlasがより多くのコアを使用することを妨げません。OpenBlasの現在の実装では、特定の操作に2つのコアを選択するだけである可能性があります。

Armadilloのソースコードは、ダウンロード可能なパッケージ(オープンソース)の「include」フォルダーに直接表示されます。具体的には、ファイル「include / armadillo_bits / fn_solve.hpp」(ユーザーがアクセス可能なsolve()関数を含む)とファイル「include / armadillo_bits / auxlib_meat.hpp」(ラッパーとハウスキーピングコードを含む)を見てください。厄介なBlas関数とLapack関数を呼び出します)。

すでにArmadilloがマシンにインストールされている場合は、「/ usr / include/armadillo_bits」または「/usr/ local / include/armadillo_bits」を確認してください。

于 2013-01-31T06:31:48.967 に答える