OpenCl内核代码:
__kernel void calc(__global double* arr1, __global double* arr2, __global double* arr3)
{
int g = get_global_id(0);
if (g > 6400) {
return;
}
arr1[g] = arr3[g] * 10.0;
arr2[g] = arr3[g] * 20.0
}
工作组大小:6400
这个内核将使用arr3解析arr1和arr2。 但问题是arr2的大小只有3200。因此,这不起作用。如何处理OpenCl中超出范围的缓冲区的大小写?
我可以考虑使用条件声明。但我不想要任何if-else语句,如:
__kernel void calc(__global double* arr1, __global double* arr2, __global double* arr3)
{
int g = get_global_id(0);
if (g > 6400) {
return;
}
arr1[g] = arr3[g] * 10.0;
if (g < 3200) {
arr2[g] = arr3[g] * 20.0
}
}
我也不想在arr2中添加任何虚拟缓冲区或额外缓冲区,这会增加我的缓冲区大小。
如何在OpenCl中处理这种情况?任何帮助/建议/链接将不胜感激。