我有一些OpenCL内核没有做他们应该做的,我很想在Xcode中调试它们。这可能吗?如何在Xcode 4.1中调试OpenCL内核?
如果不是,我有什么方法可以在我的基于CPU的内核中使用printf()
?当我在我的内核中使用printf()
时,OpenCL编译器总是给我一大堆错误。
我有一些OpenCL内核没有做他们应该做的,我很想在Xcode中调试它们。这可能吗?如何在Xcode 4.1中调试OpenCL内核?
如果不是,我有什么方法可以在我的基于CPU的内核中使用printf()
?当我在我的内核中使用printf()
时,OpenCL编译器总是给我一大堆错误。
将格式字符串转换为const char *似乎可以解决此问题。
这对我的作品在Lion上:
printf((char const *)"%d %d\n", dl, dll);
这有上述的错误:
printf("%d %d\n", dl, dll);
你给了gDEBugger一个试试吗?我认为这是您在Mac上进行OpenCL调试的唯一选择。
英特尔在其新的OpenCL 1.1 SDK中提供了printf,但这只适用于Linux和Windows。 Lion有OpenCL 1.1,但至少我的Core 2 Duo不支持printf扩展。据我所知,AMD仍在开发他们的OpenCL工具,而Nvidia调试工具仅用于CUDA。
您是否尝试添加此编译指示以启用printf?
#pragma OPENCL EXTENSION cl_amd_printf : enable
我试过#pragma OPENCL EXTENSION cl_intel_printf:启用和你发布的版本,它仍然给我同样的错误。 –
你有什么错误? – Nigel
OpenCL构建错误:编译器构建日志: <程序源>:20:12:错误:两个指针之间使用不同的地址空间进行非法隐式转换 printf(“Hello World”); ('address_space(2))'[12]'丢弃限定符,预期'char const * ' printf(“Hello World”); ^ ~~~~~~~~~~~~~ –
您可能还想尝试使用Quartz Composer来测试您的内核。如果您有权访问WWDC 2010 videos,我相信他们将展示如何使用Quartz Composer在Sessions 416中快速创建OpenCL内核原型:“在您的应用程序中使用OpenCL”或418:“最大化OpenCL性能”。在WWDC 2009和2008上也有一些关于此的会议,也可能通过iTunes在iTunes上提供。
使用Quartz Composer,您可以快速设置内核的输入和输出,然后实时监控结果。您可以避免更改编译测试循环,因为在键入时编译所有内容。语法错误等会在您更改代码时弹出,这可以很容易地识别这些错误。
我已经使用这个工具来开发和测试OpenGL着色器,它们与OpenCL内核有许多共同之处。
我下载gDEBugger但它说我的操作系统(OS X 10.7.1狮子)是不支持 –
哦。所以,除非我忽略了一些东西,看起来你需要安装另一个操作系统或者通过返回值进行调试。 –