2016-03-22 9 views
1

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?

+0

wahrscheinlich große Mengen an Code optimiert geführt wird, sehen Sie die generierte Assembly Code – pm100

+0

ich diese kompiliert haben mit -O-Flag und Zeiten unterscheiden sich nicht. – xarines

+0

hast du dir den generierten Code angeschaut – pm100

Antwort

0

für mich auf CentOS mit gcc

[[email protected] work]$ time ./a.out 3 100000000 

real 0m1.622s 
user 0m1.603s 
sys 0m0.000s 
[[email protected] work]$ time ./a.out 300000 100000000 

real 0m2.044s 
user 0m2.023s 
sys 0m0.000s 
[[email protected] work]$ 

keine Antwort, aber zu groß für einen Kommentar

+0

also wie kommuniziere ich das? – pm100

Verwandte Themen