6

初めに:

  • 私はOpenCLが魔法のようにすべてを速くするわけではないことをよく知っています
  • OpenCLには制限があることをよく知っています

さて、私の質問ですが、私はプログラミングを使用してさまざまな科学計算を行うことに慣れています。私が扱っていることのいくつかは、計算の複雑さと数に関してかなり激しいものです。だから私は疑問に思っていました、多分私はOpenCLを使って物事をスピードアップすることができます。

ですから、皆さんからお聞きしたいのは、次の[リンクのボーナス]のいくつかに対する回答です。

*OpenCLにはどのような計算/アルゴリズム/一般的な問題が適していますか

*特定のコードがOpenCLへの移行によって利益を得るかどうかを判断するための一般的なガイドラインは何ですか?

よろしく

4

3 に答える 3

9

これは良い質問だと思いますし、自分の研究でも考えていることです。

現時点では、GPUが実行できることに関して強い制限があります。これは、GPUが異なるデータセットでまったく同じコードを実行するために個々のスレッドを必要とするためです。つまり、問題/アルゴリズムは「データ並列」である必要があります。明らかに、データ並列問題には、モンテカルロシミュレーション(多くのMCシミュレーションが並列で実行される)、画像処理、およびあまり明白ではない分子動力学シミュレーションが含まれます。数値積分(モンテカルロまたはその他)は、GPUでの実行に簡単に移植できるもう1つの科学アプリケーションです。

もう1つの主な制限は、スレッドあたりのメモリが非常に制限されていることです。そのため、GPUで効率的に実行するには、アルゴリズムの算術強度が高くなければなりません。アルゴリズムがGPUで実行する候補になるための必要条件は、CPU上で、アルゴリズムがメモリバウンドではなくCPUバウンドである必要があるということです。

私の見解では、時間が経つにつれて、パフォーマンスが大幅に向上するという理由だけで、このパラダイムを使用して解決できるように、ますます多くの問題が解決されるでしょう。私の見解では、大規模なマルチコアプログラミングは、今後10年間でますます重要になり、科学界で普及するでしょう。

私はこれを少し試してみましたが、バックトラッキングの問題を、GPUで実行するための適切な形式に(CUDAを使用して)シューホーンすることができました。参考までに、これについては講演で説明します:http: //lattice.complex.unimelb.edu.au/home/sites/default/files/mydocuments/clisby_cuda0509.pdf

于 2010-05-19T23:57:16.443 に答える
3

これは、単純なデータ構造の大きなチャンク上で並行して動作するやや小さなプログラムとして表現できるタスクに適しています。

2つの画像の差を計算したい場合は、OpenCLが最適です。シーンをレイトレーシングしたい場合、それはやや難しいですが、それでも実行可能です。大量のWebサービス要求に答える場合、OpenCLは解決策ではありません。

于 2010-05-19T22:48:43.220 に答える
2

アルゴリズムに関する限り、それらはデータ並列でなければなりません。つまり、1つのセットのデータは、前のセットに依存してはなりません。類推を描くために、ある要素を他の要素と比較して適切な場所を見つける挿入ソートを検討してください。各ステップはN-1要素にアクセスする必要があるため、これは「データ並列ではありません」。ここで、openCLを使用してソートする必要がある場合は、ソートネットワークの一種であるバイトニックソートを実装する必要があります。

それらがデータ並列であっても、FLOPSとメモリレイテンシの間のトレードオフの問題があります。各データをグローバルメモリからフェッチする必要がある場合、パフォーマンスの向上はそれほど重要ではない可能性があります。GPUのメモリレイテンシはCPUよりはるかに高いです。これに対抗するために、GPUには利用可能なローカルメモリがあります。

于 2010-06-07T06:58:12.933 に答える