首页 > 解决方案 > OpenCL 内核无法在发布模式下工作/打印?

问题描述

我有openCL内核,

__kernel
void add(__global float* A, const int inputSize)
{
   int threadId = get_local_id(0);
   int blockSize = get_local_size(0);
   int groupId = get_group_id(0);
   int i = 2 * groupId * blockSize + threadId;

   if( i < inputSize && i + blockSize < inputSize)
       printf("%d %d\n", A[i], A[i + blockSize]);


   .....Doing some more things.....
}


Host Side Code: 

int main()
{
 ........

    //Main kernel call 
    int global_item_size = 4
    int local_item_size = 2;
    clEnqueueNDRangeKernel(command_queue,kernel, 1, NULL, &global_item_size, &local_item_size, 0, NULL, NULL);

.......
}

因此启动的工作组数为 2。

每个工作组有 2 个线程。

每个线程处理数组 A 中的两个元素。

所以内核有 i 和 i + blockSize 作为处理元素的索引。

输入大小为 8。

现在我面临的问题是我的这个内核运行良好,没有任何错误,当我在调试模式下运行这个内核时,我得到了正确的结果。如果我在 CPU 上获取值,内核中的 printf 语句也会打印正确的值,我可以打印它们适当地。

一旦我切换到释放模式。我得到的只是数组中的 0。如果我在内核中打印 A,它会打印所有的 0。

我不确定发布模式有什么问题?绝对没有同步或索引问题,因为我一进入内核就打印输入数组。有人遇到过类似的问题吗?

提前致谢。

标签: c++openclgpgpuhpc

解决方案


推荐阅读