OpenCLを使い始めたばかりです。しかし、私はOpenClの奇妙な振る舞いを見つけました。それは私には理解できません。私が構築してテストしたソースは、http://www.codeproject.com/Articles/110685/Part-1-OpenCL-Portable-Parallelismでした。私はATIRadeonHD4770とAMDFx6200 3.8ghz6コアCPUを持っています。
スピード
まず、速度は最大ワークグループアイテムの数に直線的ではありません。App Profilerを実行して、カーネルの実行中に費やされた時間を分析しました。結果は少し衝撃的でした。グループごとに256の作業項目しか処理できない私のGPUは、5079040の数値の2乗を計算するために2.23008ミリ秒を使用しました。これはカーネルのロード時間を考慮していなかったことに注意してください...
ただし、グループごとに1024の作業項目を処理できる私のCPUは、13.41895ミリ秒を使用して数値を計算しました。ワークグループ内の作業項目は同時に実行される、つまりCPUが高速であるはずだと思いました。私が知りたいこと、ワークグループは同時に実行されますか?同様に、私のセットアップでは、GPUはCPUよりも多くのワークグループを同時に実行します。
もう1つの要因は、GPUの方がフロート演算の計算が速いことかもしれませんが、私のCPUのクロック速度は4倍速いので、それでも奇妙です。通常、GPUはopenclに譲るときに高速になるはずですが、その理由については適切な説明が必要です。
編集:1024、2048 ... 5120の作業項目を計算しようとしましたが、CPUはGPUよりも高速でした。だから私は、CPUが少ない作業時間でより良く機能するのに対し、GPUは多くの作業項目があるときに最適であることを学びました。
私も見たのは、私のCPUは、ワークグループのサイズ(4096、6144、8192)の3倍ごとに計算がはるかに遅くなることでした。つまり、私のCPUは3つのワークグループを同時に使用しているように見えます。
浮動小数点の精度
質問はここに移動しました: OpenCL浮動小数点の精度
すべての回答を事前に感謝します。