这里是示例代码:
__kernel void my_kernel(__global float* src,
__global float* dst){
float4 a = vload4(0,src);
//do something to a
...
vstore4(a,0,dst)
}
根据OpenCL 1.2 Reference,使用src
和dst
时,全局缓冲区vloadn
和vstoren
的地址必须对齐4个字节,否则结果不确定。我的问题是,在完成对clCreateBuffer
的调用后,OpenCL是否将自动对齐全局设备地址?如果没有,如何确保正确对齐?(此外,local
存储对象如何?)
参考Data Type of OpenCL。 OpenCL编译器负责按照数据类型的要求将数据项对齐到适当的对齐方式。所以我认为答案基本上是肯定的。