我有两个功能:OpenCL内核参数歧义
void sum1(short * a, short * b, short * res, int size);
void sum2(float * a, float * b, float * res, int size);
,我有一个通用内核
__kernel void sum(__global const T * a, __global const T * b, __global T * res, int size)
{
int x = get_global_id(0);
if (x < size) res[x] = a[x] + b[x];
}
是它安全地从编译选项上面介绍的功能调用这个通用内核-DT = short和-DT = float分别?我是否需要使用对齐方式,还是OpenCL自动将内核参数与本例中的内核参数对齐到2和4字节?
通常,当我将cl_mem对象传递给内核时OpenCL不知道存储在此cl_mem对象中的数据类型,我可以理解OpenCL如何将cl_mem对象转换为内核arg中的适当指针。需要帮助
谢谢,但对齐是什么?程序员是否需要调整内核参数?或者当我们需要使用对齐时存在这种情况吗? – sandye51
只要不侵犯对像*(((char *)指针)+1)'这样的元素的访问权限,就不需要对齐任何数组或结构。但是,如果对齐,某些结构可能会更好。顺便说一句,如果你只是使用单个元素的数组,就没有任何对齐。 – DarkZeros