【问题标题】:How can I debug an OpenCL kernel in Xcode 4.1?如何在 Xcode 4.1 中调试 OpenCL 内核?
【发布时间】:2011-12-05 09:37:55
【问题描述】:

我有一些 OpenCL 内核没有按照应有的方式运行,我很想在 Xcode 中调试它们。这可能吗?

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

【问题讨论】:

    标签: xcode macos debugging opencl


    【解决方案1】:

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

    这在 Lion 上适用于我:

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

    这有上面描述的错误:

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

    【讨论】:

      【解决方案2】:

      您是否尝试过添加这个 pragma 来启用 printf?

      #pragma OPENCL EXTENSION cl_amd_printf : enable
      

      【讨论】:

      • 我试过 #pragma OPENCL EXTENSION cl_intel_printf : enable 和你发布的版本,它仍然给我同样的错误。
      • OpenCL 构建错误:编译器构建日志::20:12:错误:具有不同地址空间的两个指针之间的非法隐式转换 printf("Hello World"); ^~~~~~~~~~~~~ :20:12:警告:传递'char __attribute__((address_space(2)))[12]'丢弃限定符,预期'char const *' printf (“你好世界”); ^~~~~~~~~~~~~~~~
      • 这为我修好了。
      【解决方案3】:

      您可能还想尝试使用 Quartz Composer 来测试您的内核。如果您可以访问WWDC 2010 videos,我相信他们会在第 416 节:“在您的应用程序中利用 OpenCL”或 418:“最大化 OpenCL 性能”中展示如何使用 Quartz Composer 对 OpenCL 内核进行快速原型设计。在 WWDC 2009 和 2008 期间也有一些很好的会议,也可以通过 iTunes 上的 ADC 获得。

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

      我使用这个工具来开发和测试 OpenGL 着色器,它与 OpenCL 内核有很多共同点。

      【讨论】:

        【解决方案4】:

        您尝试过gDEBugger 吗?我认为这是你目前唯一的选择,在 Mac 上进行 OpenCL 调试。

        英特尔在其新的 OpenCL 1.1 SDK 中提供了 printf,但这仅适用于 Linux 和 Windows。 Lion 有 OpenCL 1.1,但至少我的 Core 2 Duo 不支持 printf 扩展。

        据我所知,AMD 仍在开发他们的 OpenCL 工具,而 Nvidia 调试工具仅适用于 CUDA。

        【讨论】:

        • 我下载了 gDEBugger 但它说我的操作系统(OS X lion 10.7.1)不受支持
        • 哦。因此,除非我忽略了什么,否则您似乎必须安装另一个操作系统或通过返回值进行调试。
        猜你喜欢
        • 2018-02-08
        • 1970-01-01
        • 2011-12-06
        • 1970-01-01
        • 2019-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多