我有这个代码:
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?