c++ - 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。
我不确定发布模式有什么问题?绝对没有同步或索引问题,因为我一进入内核就打印输入数组。有人遇到过类似的问题吗?
提前致谢。
解决方案
推荐阅读
- javascript - Touchstart 和 Touchend 在移动设备上不起作用
- kubernetes - 如何在 kubernetes Dashboard 上将用户限制为一个命名空间?
- python - VS Code Python 脚本第二天突然停止工作
- python - Django app on heroku, ModuleNotFoundError: No module named 'spread'
- android - 如何在 Android Worker 中完成 Kotlin Flow
- git - Mac中的Git碰撞路径
- windows - Unable to install Docker Desktop 3.0.0 onto Windows Server 2019 DataCenter
- java - 访问特定索引处的数组
- sql - 列的验证工作非常缓慢(SQL Server)
- jenkins - Jenkins,Gradle:如何将依赖关系报告发布到 Sonar Dashboard