0

GPU でプログラムを実行し、簡単なサンプルから始めて、 http://www.jocl.org/samples/samples.htmlの最初のサンプルを変更し、次の小さなスクリプトを実行しようとしています: n を実行します。同時「スレッド」 (スレッドに相当する GPU の正しい名前は何ですか?)、それぞれが 20000000/n の独立した tanh() 計算を実行します。ここで私のコードを見ることができます: http://pastebin.com/DY2pdJzL

速度は私が期待したものとはかけ離れています:

  • n=1 の場合、12.2 秒かかります
  • n=2 の場合、6.3 秒かかります
  • n=3 の場合、4.4 秒かかります
  • n=4 の場合、3.4 秒かかります
  • n=5 の場合、3.1 秒かかります
  • n=6 以上の場合、2.7 秒かかります。

したがって、n=6 (n=8、n=20、n=100、n=1000、n=100000 のいずれであっても) の後では、パフォーマンスは向上しません。つまり、これらのうち 6 つだけが並列に計算されます。ただし、私のカードの仕様によれば、80 コアがあるはずです: http://www.amd.com/us/products/desktop/graphics/ati-radeon-hd-5000/hd-5450-overview/pages/hd -5450-overview.aspx#2

20000000 の増加または減少は、すべての実行時間の線形要因にすぎないため、オーバーヘッドの問題ではありません。

OpenCLをサポートする AMD APP SDK とドライバーをインストールしました。詳細 (または少なくとも、これらから OpenCL が正しく実行されていると結論付けます)。

そのため、どこで答えを探すべきか、今は少しわかりません。ATI Radeon HD 5450 で JOCL が 6 つの並列実行しかできないのはなぜですか?

4

1 に答える 1

1

ローカル作業サイズを 1 にハードコーディングしています。より大きなサイズを使用するか、ドライバーに選択させてください。

また、カーネルは OpenCL スタイルで設計されていません。for ループを取り出して、ドライバーに反復を処理させる必要があります。

于 2012-01-04T19:53:35.447 に答える