0

私はいくつかのアルゴリズムで PpenMP を活用する必要があります。この目的のために、MATLAB で利用できるeigorのような数学関数が必要svdで、MATLAB では非常に高速です。私はすでにOpenMPで次のライブラリを試しました

  1. GSL - GNU科学図書館

  2. Eigen C++ テンプレート ライブラリ

しかし、OpenMP の並列化されたコードがシリアル コードよりもはるかに遅い理由がわかりません。ライブラリに問題があるか、関数がrandomブロックされている可能性がありますか? 私はそれを理解する方法がわかりません.誰かがOpenMPと最も互換性のある数学ライブラリを私に提案できますか.eigsvd

4

3 に答える 3

2

Intel のMKLをお勧めします。あなたの決定に影響を与える可能性があるお金がかかることに注意してください。選択した言語から呼び出し可能な API を提供する限り、それがどの言語で書かれているかは知りませんし、気にもしません。私のは Fortran ですが、C 用のバインディングもあります

SO を見回すと、最初 (または 2 番目または 3 番目) の OpenMP プログラムがシリアル バージョンよりも実際に遅かったという人々からの多くの質問を見つけることができます。いくつかの答えを見てください。コードを高速化する魔法の弾丸がライブラリの形であると結論付けないでください。代わりに、並列化が不十分なプログラムを作成して修正する可能性が最も高いことを認識してください。

最後に、Matlab をインストールしている場合は、Matlab のルーチンよりも優れた独自のルーチンを作成できるとは思わないでください。できないとは言いませんが、とても難しいと思います。

于 2012-07-12T10:05:10.380 に答える
1

すでにスレッド化されているlapack(または関連するルーチン)の高速実装を見つけたいだけだと思いますが、質問から判断するのは少し難しいです。ハイパフォーマンスマークは、優れた例であるMKLを示唆しています。その他には、オープンソースであるが構築にいくらかかかるATLASまたはFLAMEが含まれます。

于 2012-07-12T14:30:12.127 に答える
1

GSLはOpenMPと互換性があります。無料で試用版として提供されているIntelMathKernelLibraryを試すことができます。スピードアップがそれほど大きくない場合は、おそらくコードはあまり並列化できません。Intel Thread Checkerで実行中のスレッドの詳細をデバッグして確認することをお勧めします。これは、ボトルネックがどこにあるかを確認するのに役立ちます。

于 2012-07-12T10:07:59.843 に答える