C++, Wie Kraft-prefetch-Daten-cache? (array-Schleife)

Ich Schleife wie diese

start = __rdtsc();
unsigned long long count = 0;
for(int i = 0; i < N; i++)
    for(int j = 0; j < M; j++)
        count += tab[i][j];
stop = __rdtsc();
time = (stop - start) * 1/3;

Brauchen, um zu überprüfen, wie prefetch Daten, die Einflüsse auf die Effizienz. Wie zu zwingen, prefetch einige Werte aus dem Speicher in den cache, bevor Sie gezählt werden?

nur überprüfen Sie Ihre profiler. wahrscheinlich caching ist noch schlimmer, wenn Sie schalten Sie Ihr for-Schleifen.
Die meisten modernen CPUs umgehen kann pre-fetch automatisch. Sie sollten nur die Ausgabe Ihrer eigenen Anweisungen, wenn es nicht offensichtlich ist. Auch pre-fetch-Anweisungen sind nicht gerade tragbar; jeder compiler hat seine eigenen Interna.
Was Sie tun, ist die stream-Verarbeitung. Ich habe gute Gründe zu glauben, dass aus der Summe der Daten in einer einzelnen cache-Zeile erfordert weniger Zeit als das Befüllen mit Daten aus dem Hauptspeicher und Sie sind tatsächlich begrenzt durch die verfügbare Speicherbandbreite. Ich sehe nicht, wie prefetching (entweder manuell oder automatisch) könnte möglicherweise die Verbesserung der Effizienz.

InformationsquelleAutor lizaczek | 2013-01-09

Schreibe einen Kommentar