0

私はこのコードを持っています:

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 にするにはどうすればよいですか?

4

1 に答える 1