我有以下代码:

for(i=0; i<size; i++)
{
    d[i] = d[i-1] + v[i];
}

当我对此循环进行并行处理时,我具有数据依赖性,并且启动间隔变为2意味着我具有:

启动间隔:2

|load v[i-1]|load d[i-2]|    add    |store d[i-1]|
|           |           |  load v[i]|load d[i-1] |     add    | store d[i] |

我不想介于两者之间。

启动间隔:1

|load v[i-1]|load d[i-2]|    add    |store d[i-1]|
|           |load v[i]  |load d[i-1]|     add    | store d[i] |

这是不可能的,因为尚未存储d [i-1]。

如何通过更改代码将启动间隔设置为1?

===============>>#1 票数:1

您无法缩小差距。

同样,这种(循环展开)并不是这种循环的最有效并行处理方式。 您的循环看起来像一个前缀和运算。 前缀和有快速并行算法和实现。 例如, 这个问题

  ask by user1382007 translate from so

未解决问题?本站智能推荐: