小编Sho*_*mla的帖子

可以在OpenCL中实现这种并行性

这是我的第一篇文章.我会尽量保持简短,因为我珍惜你的时间.这个社区对我来说太不可思议了.

我正在学习OpenCL,并希望从下面的算法中提取一些并行性.我只会告诉你我正在做的部分,我也尽可能简化了.

1)输入:两个长度为(n)的1D数组:A,B和n的值.还值C [0],D [0].

2)输出:两个长度为(n)的1D阵列:C,D.

C[i] = function1(C[i-1])
D[i] = function2(C[i-1],D[i-1])
Run Code Online (Sandbox Code Playgroud)

所以这些是递归定义,但是给定i值的C&D计算可以并行完成(它们显然更复杂,以便有意义).一个天真的想法是为以下内核创建两个工作项:

__kernel void test (__global float* A, __global float* B, __global float* C,
                    __global float* D, int n, float C0, float D0) {
    int i, j=get_global_id(0);

    if (j==0) {
       C[0] = C0;
       for (i=1;i<=n-1;i++) {
          C[i] = function1(C[i-1]);
          [WAIT FOR W.I. 1 TO FINISH CALCULATING D[i]];
       }
       return;
    }
    else {
       D[0] = D0;
       for (i=1;i<=n-1;i++) {
          D[i] = function2(C[i-1],D[i-1]);
          [WAIT FOR W.I. 0 TO FINISH CALCULATING C[i]]; …
Run Code Online (Sandbox Code Playgroud)

opencl barrier

7
推荐指数
1
解决办法
124
查看次数

标签 统计

barrier ×1

opencl ×1