Fehlende L1-Cache-Eigenschaft
436
user2551229
Ich schrieb ein einfaches Programm (mit Hilfe von Igor Ostrovskys Artikel "Galerie der Prozessor-Cache-Effekte"), das die Cache-Ebenen in meinem Prozessor untersuchen soll. Laut Coreinfo, das von Microsoft bereitgestellt wird, verfügt mein Prozessor über folgende Cache-Ebenen:
+------------------------+---------------+----------+-------------+ | *- Data Cache 0 | Level 1 32 KB | Assoc 8 | LineSize 64 | | *- Instruction Cache 0 | Level 1 32 KB | Assoc 8 | LineSize 64 | | -* Data Cache 1 | Level 1 32 KB | Assoc 8 | LineSize 64 | | -* Instruction Cache 1 | Level 1 32 KB | Assoc 8 | LineSize 64 | | ** Unified Cache 0 | Level 2 3 MB | Assoc 12 | LineSize 64 | +------------------------+---------------+----------+-------------+
aber wenn ich renne:
#include <vector> #include <iostream> #include <omp.h> int main(int argc, char* argv[]) { int sz = 256; for (size_t s = 0; s < 18; s++) { std::vector<int> arr(sz, sz); int steps = 64 * 1024 * 1024; double start = omp_get_wtime(); for (int i = 0; i < steps; i++) { arr[(i * 16) % arr.size()]++; } double end = omp_get_wtime(); std::cout << "size: " << (4 * sz) / 1024 << "KB\t\t"; std::cout << "avg time: " << (end - start)*1000000000 / steps << "ns" << std::endl; sz *= 2; } }
Ich erhalte folgende Ausgabe:
size: 1KB avg time: 4.36752ns size: 2KB avg time: 4.27807ns size: 4KB avg time: 4.19745ns size: 8KB avg time: 3.93159ns size: 16KB avg time: 3.95425ns size: 32KB avg time: 3.88134ns size: 64KB avg time: 3.8112ns size: 128KB avg time: 3.60893ns size: 256KB avg time: 3.61895ns size: 512KB avg time: 3.62264ns size: 1024KB avg time: 3.63614ns size: 2048KB avg time: 4.34382ns size: 4096KB avg time: 24.5113ns size: 8192KB avg time: 28.271ns size: 16384KB avg time: 28.1093ns size: 32768KB avg time: 28.3462ns size: 65536KB avg time: 28.2305ns size: 131072KB avg time: 28.4871ns
Ein plötzlicher Anstieg der Zugriffszeit zwischen 2048 KB und 4096 KB ist aufgrund des L2-3-MB-Caches offensichtlich. Aber warum sehe ich keine ähnliche Steigerung zwischen 32 KB und 64 KB aufgrund von L1 32 KB Cache? Meine Prozessor-Spezifikation: Link
Da Sie scheinbar nur einen konstanten 64-Bit-Schritt verwenden, sollte der Hardware-Prefetcher schnell trainiert werden und Cacheblöcke genau vorauslesen.
Paul A. Clayton vor 9 Jahren
0
0 Antworten auf die Frage
Verwandte Probleme
-
8
Sollte ich 32 oder 64 Bit für Linux wählen?
-
12
CPU-Kerne: Je mehr, desto besser?
-
5
Warum sollte mein Computer starten und plötzlich ausschalten?
-
2
Maximale CPU-Temperatur für Core 2 Duo E6400
-
4
Wie schnell ist jeder Kern in einem Dual-Core-Prozessor?
-
7
Kann ich die CPU-Geschwindigkeit meines MacBook im Akkubetrieb reduzieren?
-
2
Bietet der Intel i7 eine echte Verbesserung gegenüber seinen Vorgängern?
-
4
Kann ein 32-Bit-Betriebssystem in einem 64-Bit-Prozessor ausgeführt werden?
-
3
Ist es möglich, eine Intel Q8400-CPU in meinem ASUS P5N-EM HDMI-Mobo zu verwenden?
-
3
Sinkt durch das Überlappen einer CPU / eines Kühlkörpers tatsächlich die Temperatur?