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 つの並列実行しかできないのはなぜですか?