私はOpenCLの初心者で、グローバルとローカルのワークサイズのハングアップを試みています。OpenCLのget_global_idとget_local_idはintとsize_tを使用していますか?
size_t g_x = get_global_id(0);
size_t g_y = get_global_id(1);
size_t l_x = get_local_id(0);
size_t l_y = get_local_id(1);
printf("Thread (%d, %d, %d, %d)\n", g_x, g_y, l_x, l_y);
しかし、唯一私:私は単にスレッドIDをプリントアウトしようとしている、私のカーネルコードで
size_t local[2] = {1,16};
size_t global[2] = {1024, 16};
// Execute the kernel for execution
status = clEnqueueNDRangeKernel(cmdQueue, kernel, 2, NULL,
global, local, 0, NULL, NULL);
:私は私のホスト・コードでは、2Dのワークスペースを宣言しようとしています印刷する最初のディメンションを取得します(出力例)。
...
Thread (1016, 0, 50, 0)
Thread (1016, 0, 51, 0)
Thread (1016, 0, 52, 0)
Thread (1016, 0, 53, 0)
Thread (1016, 0, 54, 0)
...
なぜこのようなことが起こりますか?私は次元の大きさで遊んだことがあるが、それは問題だとは思わない。
EDIT:size_tをに置き換えると、正しい出力が得られます。しかし、なぜこれは? size_tは単に符号なしの型です。私はなぜそれが第一の次元を印刷するのに成功し、第二の次元は印刷しないのか分からない。
は、ドライバの問題である可能性があります。 CL_DEVICE_ADDRESS_BITSとは何ですか? –