Ich wollte Cache-Fehler mit diesem einfachen Code überprüfen, z. Array enthält 3 Elemente und dann für ein Array, das 0,3 Millionen Elemente enthält, aber die Zeit, um etwas mit Array-Elementen zu tun, ist in beiden Fällen ziemlich gleichmäßig.Cache-Fehler scheinen Arbeit nicht richtig
#include <iostream>
#include <cstdlib>
#include <ctime>
int main(int argc, char* argv[]) {
const int TAB_SIZE = atoi(argv[1]);
const int TEST_LEN = atoi(argv[2]);
srand(time(NULL));
int *tab = new int [TAB_SIZE];
for(int i=0; i<TEST_LEN;++i) {
int index = rand()%TAB_SIZE;
// do something with random indexed array element
tab[index] = index;
}
return 0;
}
Und hier ist mein Ausgang für 3-Element-Array:
[email protected] ~/projects/simple/cache_test $ time ./a.out 3 100000000
real 0m1.236s
user 0m1.232s
sys 0m0.004s
Und für 0,3 Mio. Elementanordnung:
[email protected] ~/projects/simple/cache_test $ time ./a.out 300000 100000000
real 0m1.375s
user 0m1.372s
sys 0m0.000s
erste Array in meinem Cache passt und die zweite nicht:
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
Sollte nicht es ist viel schneller, wenn das ganze Array in den Cache passt oder der Unterschied nicht so groß ist? Gibt es effizientere Möglichkeiten, den Cache zu testen?
wahrscheinlich große Mengen an Code optimiert geführt wird, sehen Sie die generierte Assembly Code – pm100
ich diese kompiliert haben mit -O-Flag und Zeiten unterscheiden sich nicht. – xarines
hast du dir den generierten Code angeschaut – pm100