OpenCL:在内核中手动抛出异常

4

在OpenCL中,是否可以手动抛出异常,仅用于调试目的?我在我的代码中遇到了一个非常奇怪的错误:当我计算两个double值并将它们相加时,主机报告“CL_OUT_OF_RESOURCE”。但是,如果我不添加这两个值,则主机不会报告任何错误。


2
你不能在内核中写异常或try/catch块。CL_OUT_OF_RESOURCE可能有很多原因,你能发布一下你的主机和内核代码吗?还请告诉我你正在运行的硬件配置,是AMD、Intel还是NVIDIA? - kiranputtur
@ocluser 感谢您的帮助,但我正在处理的代码基于一篇尚未发表的论文中的算法。在该论文发表之前,我不能公开任何内容。在我从NVIDIA平台(GTX460M)切换到AMD平台(Radeon HD5850)后,问题似乎已经消失了。 - aaronqli
1个回答

1

OpenCL不支持异常 - 它基于C99语言。

在AMD GPU上,您可以在内核中使用printf - 参见cl_amd_printf扩展。要使用,请将以下内容放置在.cl文件的顶部:

#pragma OPENCL EXTENSION cl_amd_printf : enable

2
英特尔 OpenCL SDK 默认支持 printf,我刚发现。 - aaronqli
@Polymorpher 这仅适用于英特尔CPU的OpenCL设备。'printf'是由编译器(通过驱动程序)提供的,而不是SDK。无论使用哪个SDK都没有关系 - 设备(和驱动程序)才是重要的。 - Lubo Antonov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接