GTX550ti グラフィック カードで Nvidia の OpenCL 開発ソフトウェアを使用していますが、奇妙な問題が発生します。(私は OpenCL の新入生です)。
私のカーネルコードは次のようなものです:
__kernel void kernel_name(...)
{
size_t d = get_local_id(0);
char abc[8];
...
}
実際、char abc[8]
私の場合は役に立たない(デッドコード)。しかし、char abc[8]
カーネル コードに . をコメントアウトするchar abc[8]
と、結果が正しくなり、カーネルの実行時間が短くなります (697856 ns)。カーネルのコンパイラはデッド コードを一掃しませんか?
上記は、私が繰り返すことができる明示的な例です。また、まったく同じ環境で異なる時間に 1 つのプログラムを実行すると、異なる結果が得られるという、より奇妙なケースにも遭遇します。
それはメモリ割り当てに関連していますか..?誰でも問題を見つける方法についてアドバイスをもらえますか?
ちなみに、oclDeviceQuery の出力情報は以下の通りです。 Platform Version = OpenCL 1.1
CUDA 4.2.1、
SDK Revision = 7027912
私のOSはWindows XPです。
今日は 2012 年 7 月 17 日で、この問題は解決したと思います。
カーネル ソース ファイルで #include を使用しないでください。
カーネル ソース ファイルで超長行を使用しないでください (たとえば、カーネル ソース ファイルの行データを生成するプログラムを作成します)。