【发布时间】:2011-12-05 09:37:55
【问题描述】:
我有一些 OpenCL 内核没有按照应有的方式运行,我很想在 Xcode 中调试它们。这可能吗?
如果没有,有什么方法可以在基于 CPU 的内核中使用 printf() 吗?当我在内核中使用printf() 时,OpenCL 编译器总是给我一大堆错误。
【问题讨论】:
标签: xcode macos debugging opencl
我有一些 OpenCL 内核没有按照应有的方式运行,我很想在 Xcode 中调试它们。这可能吗?
如果没有,有什么方法可以在基于 CPU 的内核中使用 printf() 吗?当我在内核中使用printf() 时,OpenCL 编译器总是给我一大堆错误。
【问题讨论】:
标签: xcode macos debugging opencl
将格式字符串转换为 const char * 似乎可以解决此问题。
这在 Lion 上适用于我:
printf((char const *)"%d %d\n", dl, dll);
这有上面描述的错误:
printf("%d %d\n", dl, dll);
【讨论】:
您是否尝试过添加这个 pragma 来启用 printf?
#pragma OPENCL EXTENSION cl_amd_printf : enable
【讨论】:
您可能还想尝试使用 Quartz Composer 来测试您的内核。如果您可以访问WWDC 2010 videos,我相信他们会在第 416 节:“在您的应用程序中利用 OpenCL”或 418:“最大化 OpenCL 性能”中展示如何使用 Quartz Composer 对 OpenCL 内核进行快速原型设计。在 WWDC 2009 和 2008 期间也有一些很好的会议,也可以通过 iTunes 上的 ADC 获得。
使用 Quartz Composer,您可以快速设置内核的输入和输出,然后实时监控结果。您可以避免更改-编译-测试循环,因为所有内容都是在您键入时编译的。更改代码时会弹出语法错误等,这使得识别这些错误相当容易。
我使用这个工具来开发和测试 OpenGL 着色器,它与 OpenCL 内核有很多共同点。
【讨论】:
您尝试过gDEBugger 吗?我认为这是你目前唯一的选择,在 Mac 上进行 OpenCL 调试。
英特尔在其新的 OpenCL 1.1 SDK 中提供了 printf,但这仅适用于 Linux 和 Windows。 Lion 有 OpenCL 1.1,但至少我的 Core 2 Duo 不支持 printf 扩展。
据我所知,AMD 仍在开发他们的 OpenCL 工具,而 Nvidia 调试工具仅适用于 CUDA。
【讨论】: