Ist es möglich, einen Compiler zu entwerfen, der eine Schleife optimiert, in der auf Arrays auf alternative Weise zugegriffen wird? Zum Beispiel so:
// int[] a,b
int sum = 0;
for(int i = 0; i < n; i++)
{
sum += a[i] + b[i];
}
Mit dem üblichen sequentiellen Array-Speicher a[i]
und b[i]
kann im Speicher weit voneinander entfernt sein. Daher denke ich, dass eine gute Compileroptimierung dies erkennen a[i]
und b[i]
immer zur "gleichen" Zeit a[0] b[0] a[1] b[1] ...
zugreifen und die verschachtelten Arrays speichern würde, dh, dass ein Speicherzugriff beide a[i]
und abrufen kann b[i]
.
a[i]
und b[i]
mit einer Speicheroperation abgerufen werden muss, sondern dass sie sich für eine bessere Cache-Leistung in der Nähe des Speichers befinden.