debugging - printf 函数在 OpenCL 内核中不起作用

嗨,我试图在 PS3 上调试 OpenCL 内核代码。这是代码:

#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enable

int offset() {
    return 'A' - 'a';
}

__kernel void tKernel(__global unsigned char *in, __global unsigned char *out) {    
    size_t i;
    printf(“var”);
    for (i = 0; i < 10; i++)
        out[i] = in[i] + offset();
}

在 IBM OpenCL_guide.pdf 第 18 页的 4.3.3 节中,描述了使用 printf 方法调试内核。
所以我将 printf 函数添加到我的内核并尝试测试它。但是 OpenCL 编译给了我这个错误:

"IBM_OpenCL_kernel.cl", line 9.15: 1506-766 (S) 通用字符名称“?”不在标识符的允许范围内。

我还导出了 LD_LIBRARY_PATH 变量。 谁能遇到这个问题?

最佳答案

我不知道 IBM 的实现,但 printf() 是一个非标准的 OpenCL 函数。在 AMD 平台上,您必须通过以下方式启用扩展:

#pragma OPENCL EXTENSION cl_amd_printf : enable

在 printf() 起作用之前。也许还需要在 IBM 平台上启用扩展?

(更新)从 this page ,可能使用的扩展名可能是 cl_intel_printf,所以尝试:
#pragma OPENCL EXTENSION cl_intel_printf : enable