我遇到了一个奇怪的问题。 我有一个简单的内核。它工作正常。 我发现,如果我删除一些行或在opencl内核文件中引入一些错误,然后尝试运行该程序,则程序运行良好,就好像它具有更正的代码并且不会给出任何错误。 但是由于内核有错误,它应该会报错。 因此,它无法检测到错误,并且如果它发现错误,它将以先前正确版本的代码运行。 这是一个特色吗?这里有什么不对?即使内核有错误,Opencl运行正常
0
A
回答
1
这不是OpenCL的功能。我猜测原因是:
- 你没有给你
clCreateProgramWithSource
你认为你给它的内核。检查这种方法的一个好方法是在打电话之前立即打印出您提供给clCreateProgramWithSource
的字符串。 - 您的应用程序“缓存”内核,随后的执行使用
clCreateProgramWithBinary
而不是(修改后的)内核源代码。
2
我强烈地感觉到你忘了加OpenCL的错误检查每个OpenCL的API在你的代码,如果你没有捕获错误明确的OpenCL内核只会继续,如果没有问题。如果你还没有做错误检查,然后可以做如下(OpenCL中的程序应该不会错过这个)
(变化的基础上的API调用)
error=clGetPlatformIDs(1, &platform, &platforms);
if (error != CL_SUCCESS) {
printf("\n Error number %d", error);
}
,你在你的评论中提及即使内核出现错误,也能获得正确的值,这是因为设备内存或主机内存具有上次运行的结果(这可能会发生一段时间)。初始化您的输出缓冲区为0,然后推到GPU并回读,现在可能会看到乱码输出。
1
设备内存不会在内核运行或程序启动之间清除。由于您正在评论实际写入内存的代码,因此您只能获取上一次运行时写入的代码。使用NVIDIA GPU和较旧的驱动程序版本,我甚至在系统重启时看到了内存持久性。
为了证实这一点,您可以尝试分配多个缓冲区并使用先前未触及的缓冲区启动错误的内核。
相关问题
- 1. OpenCL内核错误-11
- 2. OpenCL内核构建错误
- 3. OpenCL内核编译错误
- 4. 运行时OpenCL内核代码中的错误
- 5. 在多个GPU上运行OpenCL内核?
- 6. OpenCL中FFT 2D内核运行时= 0
- 7. jQuery ajax:即使响应正常也会运行错误200
- 8. 有没有办法在mac上运行opencl内核代码
- 9. 即使进程正常运行,如何创建核心转储?
- 10. 在OpenCL内核
- 11. 即使所有指针都正常,分段错误(核心转储)
- 12. Pydev将无法正常运行(即导入引发错误)
- 13. 运算符在OpenCL内核中重载
- 14. OpenCL内核参数
- 15. OpenCL内核参数
- 16. 多个OpenCl内核
- 17. 杀死OpenCL内核
- 18. 剖析OpenCL内核
- 19. 优化opencl内核
- 20. opencl - 内核限制
- 21. OpenCL内核问题
- 22. 调试OpenCL内核
- 23. 并行拷贝和opencl内核执行
- 24. 正常的指针算术在opencl内核上工作吗?
- 25. OpenCL - 主内核填充缓冲区并在子内核上运行
- 26. 从另一个OpenCL内核调用OpenCL内核
- 27. OpenCL奇怪的内核行为
- 28. 并行访问OpenCL内核参数值
- 29. OpenCL CodeXL Profiler多次执行内核
- 30. OpenCL内核的时序执行
请发布一些关于如何构建内核的代码。 – DarkZeros