私のプログラムには、時間がかかる行列の乗算と反転がたくさんあります。
私のコンピューター:CPU:Intel i7; GPU:512MBNVIDIA®Quadro®NVS3100M
計算速度を向上させるにはどちらが良いですか?OpenMPまたはCUDA?
(ps。一般的に、GPUにはCPUよりも多くのコアがあると思います。したがって、CUDAはOpenMPよりも何倍も向上する可能性がありますか?)
それはあなたのアプリケーションが何であるか、そしてあなたがどのように改善を実装しようとしているのかによると思います。すべての最適化にはトレードオフがあることに注意してください。たとえば、GPUは通常、半精度浮動小数点を使用します。また、IEEE標準の一部の側面をバイパスできるコンパイラオプションがあり、精度などを犠牲にして速度を上げることができます。
私の経験から(学校のプロジェクトとして両方に取り組んでいますが、ほとんどの場合、中型アレイの計算時間は、2000 * 2000未満と言えますが、ほぼ同じです。実際の計算時間は、コンピューター(通常、openMPで作業しているときは、クラスターを他の人と共有するので、アプリケーションを単独で実行していることを確認してください。そうすれば、より良い結果が得られる可能性があります))
しかし、あなたがCUDAに長けているなら、GPUはこの種の計算において非常に強力です。私がCUDAプロジェクトに取り組んでいたとき、公式Webサイトにはたくさんの優れた資料があります。openMPの場合、これは単なるライブラリであり、cまたはc ++が得意であれば、問題なく使用できます(ただし、openMPのコンパイラはバグがあります~~、信頼しないでください。ログに記録してみてください。 )。
そして、私はあなたがCUDAの経験があると思いましたが、私が思ういくつかの良い例を見つけるのは難しいことではありません。しかし、CUDAは本当にダミーであり、デバッグできないので、最初にopenMPを試すことをお勧めします。