É possível projetar um compilador que otimiza um loop no qual matrizes são acessadas de maneira alternativa? Por exemplo, assim:
// int[] a,b
int sum = 0;
for(int i = 0; i < n; i++)
{
sum += a[i] + b[i];
}
Com o armazenamento seqüencial usual do array a[i]
e b[i]
podem estar distantes um do outro na memória. Portanto, acho que uma boa otimização do compilador detectaria isso a[i]
e b[i]
sempre será acessada no "mesmo tempo" e armazenaria as matrizes intercaladas, ou seja, a[0] b[0] a[1] b[1] ...
para que um acesso à memória possa recuperar ambos a[i]
e b[i]
.
a[i]
e b[i]
seja recuperado com uma operação de memória, mas eles estavam localizados nas proximidades na memória para melhor desempenho do cache.