【问题标题】:Can't use printf or debugger in Intel SDK for OpenCL无法在 Intel SDK for OpenCL 中使用 printf 或调试器
【发布时间】:2013-08-17 02:19:02
【问题描述】:

我正在使用 Intel SDK for OpenCL 和 Intel HD Graphics 4000 GPU 来成功运行 OpenCL 程序。因为我还安装了 Nvidia 库,所以我确保链接到 Intel OpenCL 库。

但是,在内核中调用 printf() 会导致 OpenCL 编译器错误

错误:OpenCL 中不允许隐式声明函数“printf”

另外,我在 Visual Studio 2012 插件中启用了 OpenCL 内核调试,并将以下选项传递给 clBuildProgram:

"-g -s C:\\Path\\to\\my\\program.cl"

但是,内核断点被跳过。将鼠标悬停在断点上会给出消息:

当前不会命中断点。没有为此文档加载任何符号。

我的内核位于一个单独的 .cl 文件中,并且我正在按照 C/C++ 代码的方式设置断点。这是使用英特尔 SDK for OpenCL 调试器设置断点的正确方法吗?

为什么 printf() 调用和断点无法与英特尔 SDK for OpenCL 一起使用?

【问题讨论】:

  • 您是否通过在语句前的某处添加#pragma OPENCL EXTENSION cl_intel_printf : enable 来启用 printf?
  • @MatthiasHolzapfel 是的,我试过了。
  • 您好,我遇到了与您之前遇到的相同的问题。我无法调试我的内核并且断点没有被命中。我正在使用 Intel OpenCL SDK 2014 和 Visual Studio 2010。如果您找到了解决方案,如果您能分享解决方案,将不胜感激

标签: visual-studio opencl gpu gpgpu intel


【解决方案1】:

函数 printf() 是在 OCL 版本 1.2 中引入的。英特尔不久前发布了这个版本。我敢打赌你还有 1.1 版本。

关于调试器,我几乎从未使用过它,但基于此document,路径应该是这样给出的:

"-g -s \"C:\\Path\\to\\my\\program.cl\""

您还应该选择要调试的线程。

【讨论】:

  • 感谢链接和修复,但问题仍然存在。我昨天刚下载了英特尔版本。
  • 我也有同样的问题,运行VS2017,路径正确,没有命中断点,使用Intel编译器。您在此期间解决了问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 2012-10-02
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
相关资源
最近更新 更多