如何在OpenCL中用外部循环完成计算并行化多维for循环?

时间:2016-05-08 15:23:44

标签: parallel-processing opencl

我正在尝试使用在GPU上运行的OpenCL来并行化这样的代码:

int pos = 0;
for (int x=0 ; x<x_len ; x++){
    //do some expensive calculation like
    int value = pow(24, x);
    for (int y=0 ; y<y_len ; y++){
        for (int z=0 ; z<z_len ; z++){
            //do some expensive calculation that depends on value
            //but is very unlikely to have a positive result needed
            //to save in global memmoy - something like
            if ((value * y * z) % 456 = 0){ 
                // save position that had positive result
                output[pos] = x*y_len*z_len+y*z_len + z; 
                pos++;
            }
        }
    }
}

y_lenz_len足够小,以便(1,y_lenz_len)lokal工作组成为可能,以防万一重要)

我当前的解决方案有2个内核,一个计算外部计算并将结果保存到全局内存,第二个使用该计算数据并计算内部计算(使用atomic_add表示pos)。这工作正常但我的实际代码需要保存更多数据而不是每x次迭代只有一个整数(实际上是2个整数和2个长整数),因此全局内存用得非常快。这意味着我需要拆分内核调用并多次迭代主机代码中的调用。 所以我的问题是,如果有更好的方法来并行化该代码?

0 个答案:

没有答案