OpenCL空白区域会影响私有内存的使用吗?

时间:2013-11-06 23:20:58

标签: opencl

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

我的内核是:



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

请注意,第一行是空白的。对clGetKernelWorkGroupInfo CL_KERNEL_PRIVATE_MEM_SIZE进行查询会返回不同的结果,具体取决于第一行是否为空。这是正常的吗?或者它是OpenCL的错误?

额外信息: 内核使用以下标志构建: -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似乎是解决方案。

1 个答案:

答案 0 :(得分:0)

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

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

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