2011-08-27 57 views
7

我有一些OpenCL内核没有做他们应该做的,我很想在Xcode中调试它们。这可能吗?如何在Xcode 4.1中调试OpenCL内核?

如果不是,我有什么方法可以在我的基于CPU的内核中使用printf()?当我在我的内核中使用printf()时,OpenCL编译器总是给我一大堆错误。

回答

3

将格式字符串转换为const char *似乎可以解决此问题。

这对我的作品在Lion上:

printf((char const *)"%d %d\n", dl, dll); 

这有上述的错误:

printf("%d %d\n", dl, dll); 
0

你给了gDEBugger一个试试吗?我认为这是您在Mac上进行OpenCL调试的唯一选择。

英特尔在其新的OpenCL 1.1 SDK中提供了printf,但这只适用于Linux和Windows。 Lion有OpenCL 1.1,但至少我的Core 2 Duo不支持printf扩展。据我所知,AMD仍在开发他们的OpenCL工具,而Nvidia调试工具仅用于CUDA。

+0

我下载gDEBugger但它说我的操作系统(OS X 10.7.1狮子)是不支持 –

+0

哦。所以,除非我忽略了一些东西,看起来你需要安装另一个操作系统或者通过返回值进行调试。 –

0

您是否尝试添加此编译指示以启用printf?

#pragma OPENCL EXTENSION cl_amd_printf : enable 
+0

我试过#pragma OPENCL EXTENSION cl_intel_printf:启用和你发布的版本,它仍然给我同样的错误。 –

+0

你有什么错误? – Nigel

+0

OpenCL构建错误:编译器构建日志: <程序源>:20:12:错误:两个指针之间使用不同的地址空间进行非法隐式转换 printf(“Hello World”); ('address_space(2))'[12]'丢弃限定符,预期'char const * ' printf(“Hello World”); ^ ~~~~~~~~~~~~~ –

1

您可能还想尝试使用Quartz Composer来测试您的内核。如果您有权访问WWDC 2010 videos,我相信他们将展示如何使用Quartz Composer在Sessions 416中快速创建OpenCL内核原型:“在您的应用程序中使用OpenCL”或418:“最大化OpenCL性能”。在WWDC 2009和2008上也有一些关于此的会议,也可能通过iTunes在iTunes上提供。

使用Quartz Composer,您可以快速设置内核的输入和输出,然后实时监控结果。您可以避免更改编译测试循环,因为在键入时编译所有内容。语法错误等会在您更改代码时弹出,这可以很容易地识别这些错误。

我已经使用这个工具来开发和测试OpenGL着色器,它们与OpenCL内核有许多共同之处。