如何处理OpenCl中超出范围的缓冲区的大小写?

时间:2014-09-02 13:05:20

标签: opencl

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中处理这种情况?任何帮助/建议/链接将不胜感激。

0 个答案:

没有答案