配列が別の方法でアクセスされるループを最適化するコンパイラを設計することは可能ですか?たとえば、次のようになります。
// int[] a,b
int sum = 0;
for(int i = 0; i < n; i++)
{
sum += a[i] + b[i];
}
通常のシーケンシャルアレイ装置と、a[i]
及びb[i]
互いに離れメモリであってもよいです。したがって、優れたコンパイラ最適化はそれを検出しa[i]
、b[i]
常に「同時に」アクセスされることを検出し、インターリーブされた配列を格納します。a[0] b[0] a[1] b[1] ...
つまり、1つのメモリアクセスでa[i]
との両方を取得できますb[i]
。
a[i]
し、b[i]
一つのメモリ操作で取得することが、彼らは近くの優れたキャッシュ・パフォーマンスのためにメモリに配置されたこと。