OpenCL使用int和size获取全局id和局部id?
我是OpenCL的新手,只是想了解全球和本地的工作规模。我正在尝试在宿主代码中声明二维工作空间:OpenCL使用int和size获取全局id和局部id?,opencl,Opencl,我是OpenCL的新手,只是想了解全球和本地的工作规模。我正在尝试在宿主代码中声明二维工作空间: 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, NU
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);
在我的内核代码中,我只是尝试打印线程ID:
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);
但是,我只得到要打印的第一个维度(这里是一个输出示例):
为什么会这样?我已经尝试过尺寸大小,但我认为这不是问题所在
编辑:当我用int替换size\u t时,我得到了正确的打印输出。但这是为什么呢?size_t只是一个无符号类型;我不明白为什么它会成功地打印出第一个维度而不是第二个维度?您不应该使用
%d
打印任何非整数的内容。大小取决于您当前使用的设备,可以是无符号64位
,也可以是无符号32位
改用%zu
详细解释: 您看到的0是因为print假定它将接收4个整数,但您正在发送4个长整数 所以,实际上每个偶数只得到前一个偶数的高位,在本例中为0
Sent: AAAA0000 BBBB0000 CCCC0000 DDDD0000
Recv: AAAABBBB CCCCDDDD
您不应该使用
%d
打印任何非整数的内容。大小取决于您当前使用的设备,可以是无符号64位
,也可以是无符号32位
改用%zu
详细解释: 您看到的0是因为print假定它将接收4个整数,但您正在发送4个长整数 所以,实际上每个偶数只得到前一个偶数的高位,在本例中为0
Sent: AAAA0000 BBBB0000 CCCC0000 DDDD0000
Recv: AAAABBBB CCCCDDDD
可能是司机的问题。CL_设备地址位等于什么?可能是驱动程序问题。CL_设备地址位等于什么?