0

我知道这听起来很奇怪,但我注意到通过在我的内核声明之前添加一个空行,私有内存使用量从 72 字节下降到 36 字节。

我的内核是:



__kernel void multby2(__global float* data, __global float* results) {                                                 
    size_t id = get_global_id(0);                                                                                      
    results[id] = data[id] * 2;                                                                                        
}

请注意,第一行是空白的。根据第一行是否为空白,使用clGetKernelWorkGroupInfofor查询会返回不同的结果。CL_KERNEL_PRIVATE_MEM_SIZE这是正常的吗?还是 OpenCL 的 bug?

额外信息:内核是使用以下标志构建的: -cl-finite-math-only -cl-opt-disable

关于我的系统:


platform name: Apple
platform vendor: Apple
platform version: OpenCL 1.2 (Apr 25 2013 18:32:06)
device name: GeForce 9400M
device vendor: NVIDIA

我很感激任何关于这个问题的评论!

更新: 感谢 DarkZeros 指出,如果内核是在没有优化的情况下构建的,可能会有未条带化的私有内存。删除标志-cl-opt-disable似乎是解决方案。

4

1 回答 1

0

这种行为对于编译器来说显然是不合逻辑的。但是,由于已禁用优化,编译器不必生成最佳代码。它只需要生成可以正常工作的代码。

通过简单地将标志删除到编译器来解决问题:-cl-opt-disable

如果没有该标志,编译器应该生成最佳代码。这样,它将把所有未使用的私有内存减少到 36 字节(甚至更少)。

于 2013-11-07T13:54:36.197 回答