このための既存のライブラリがないように見える、使用している言語の並列密行列反転を実装する必要があります(特に、メッセージパッシングにIDLブリッジを使用するIDL)。C ++でMPIを使用した経験から、並列プログラミング方法に精通していますが、主に並列FFTおよびNボディメソッドが対象です。線形代数の計算方法について、シリアルまたはパラレルの経験や知識はほとんどありません。
私が探しているのは、(現在はシリアル)IDLタスクを実行するマシンには8つのコアがあるため、少数のコアに適した、堅牢で安定した並列行列反転アルゴリズムの明確な疑似コード記述です。実際には、おそらく4つだけを使用して、他のタスクのためにコアを解放します。
このタスクによく知られたアルゴリズムの範囲がある場合は、最先端のパフォーマンスよりも単純さを優先します。
はい、ありがとうございます。私は密行列アルゴリズムを求めています。私はそれを今問題で明確にした。スレッド化されたLAPACKの実装を調査します。できればそれが望ましいでしょう。ポインタをありがとう。
—
ボグダノヴィスト2013年
IDLには、少なくとも過去3〜4年間、マルチスレッド線形代数ライブラリがありました。LA_INVERTは、IDLの最近のバージョンでマルチスレッドで実行されると思います。使用可能なスレッドの数を制御する構成スイッチがあることに注意してください(そして、デフォルトでおそらくシングルスレッドに設定されています)
—
Brian Borchers
ブライアン、ありがとう。IDL7とIDL8の両方のドキュメントを確認しましたが、LA_INVERTがスレッドプールを使用することは提案していません。また、IDLを設定して大きな行列を反転させると、8つのコアのうち1つだけが使用されることもテストしました(システムモニターによると)。!CPUの設定を確認しました。TPOOL_NTHREADSがHW_NCPUと等しいことを確認しました。ドキュメントによると、スレッドルーチンは物理的に利用可能なコアをすべて使用できるはずです。また、TPOOL_MIN_ELTSを減らして、LA_INVERTでマルチスレッドを強制的に実行しました。これ以上のアイデア?
—
ボグダノヴィスト2013年
あなたの行列はどれくらい大きいですか?IDLは、行列が十分に大きくない限り、マルチスレッドを使用しません。小さすぎる(たとえばN = 1000未満の)行列がある場合、マルチスレッド化してもパフォーマンス上の利点はなく、IDLはマルチスレッドルーチンを使用しません。このカットオフの構成設定もあります。私は数年前にIDLを使用していませんが、これが機能しないことに本当に驚いています。IDL固有のフォーラムで質問することをお勧めします。comp.lang.idl = pvwave usenet grを確認するとよいでしょう。
—
Brian Borchers 2013年
LD_PRELOAD
、必要に応じてIDLでLAPACKのスレッド実装(たとえば、MKLまたはATLAS)を使用することができます。