私はこのコードを持っています:
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 にするにはどうすればよいですか?