我知道这听起来很奇怪,但我注意到在内核声明之前添加一个空行,私有内存使用量从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
似乎是解决方案。
答案 0 :(得分:0)
对于编译器来说,这种行为显然是不合逻辑的。但是,由于已禁用优化,因此编译器不必生成最佳代码。它只需要生成能够正常工作的代码。
通过简单地删除编译器的标志来解决问题:-cl-opt-disable
如果没有该标志,编译器应该生成最佳代码。这样它就会将所有未使用的私有内存剥离到36bytes(甚至更少)。