OpenCL使用int和size获取全局id和局部id?

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

我是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, 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_设备地址位等于什么?