4

您好我试图在 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”,第 9.15 行:1506-766 (S) 通用字符名称“?” 不在标识符的允许范围内。

我还导出了LD_LIBRARY_PATH 变量。任何人都可以有这个问题吗?

4

3 回答 3

8

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

#pragma OPENCL EXTENSION cl_amd_printf : enable

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

(更新)从此页面中,可能使用的扩展名可能是 cl_intel_printf,因此请尝试:

#pragma OPENCL EXTENSION cl_intel_printf : enable
于 2011-04-27T01:27:52.033 回答
6

您的 OpenCL 实现似乎不支持 printf,或者您使用的是硬件设备而不是模拟设备。

在我看来,您根本不应该使用 printf,它还不足以解决更复杂的硬件相关问题。尝试使用附加参数 aka '__global float* output'。在内核中填充类似if (something_happened) { output[get_global_id(0)] = the_value_you_need_to_debug; }这样的内容将帮助您诊断任何可能的问题,并且这种方法与平台无关

于 2011-04-26T06:16:38.643 回答
0

在系统中构建时不支持 printf 功能。您只能在软件和硬件仿真中使用它。

于 2019-10-30T08:18:14.863 回答