Warum macht make-j besser, wenn es übergeben wird, eine Zahl größer als die Anzahl der verfügbaren Kerne?
Ich habe einen quad-core-Prozessor mit hyper-threading. Wenn ich make -j8
es ist schneller als make -j4
(ich lese die Anzahl der Kerne in Java und rief dann make -j<number of cores>
).
Ich verstehe nicht, warum make -j32
ist schneller als make -j8
ich habe beim Lesen (in Java) nur 8 Kerne (hyper-threading verdoppelt sich die Anzahl der physischen Kerne). Wie ist das möglich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mehr zusammenstellen, als CPU-Geschwindigkeit und Anzahl von cores zur Verfügung: disk-Bandbreite und Erinnerung Bandbreite wichtig.
In Ihrem Fall, kann ich mir vorstellen, dass jede CPU HT Geschwister ist immer etwa 4 Prozesse zu führen. Als es beginnt, ist es der Blöcke auf der disk-IO und bewegt sich auf den nächsten Prozess. Der zweite versucht, öffnen Sie eine zweite Datei, die Blöcke auf dem Datenträger-E /a und der Geschwister bewegt sich auf den nächsten Prozess. Ab vier Compiler vor dem ersten Datenträger-E /a bereit ist, würde mich nicht überraschen.
So, wenn die ersten schließlich Las man in der Programm-Quellcode, die der compiler muss beginnen die Jagd durch die Verzeichnisse zu finden, die die #include-Dateien. Jeder von Ihnen benötigt einige open () - Aufrufe, gefolgt von Lesen() Aufrufe, die blockieren, und alle von denen verzichten die Geschwister, die für andere Prozesse laufen.
Nun multiplizieren Sie diese mit acht Geschwistern-jedes HT Kern wird ausgeführt, bis es Blöcke auf den Speicher zugreifen, an welcher Stelle es vertauschen über die anderen Geschwister, und für eine Weile laufen. Sobald die Speicherkapazität des ersten Geschwister abgerufen wurde, in den cache, es ist wohl Zeit für das zweite Geschwister auf stall während der Wartezeit für den Speicher.
Gibt es eine Obergrenze, wie viel schneller Sie können Ihre kompiliert ausführen, indem
make -j
, sondern zweimal-Anzahl-cpus wurde ein guter Ausgangspunkt für mich in der Vergangenheit.Starten mehrere Prozesse können möglicherweise trotzdem geben, die Ihnen Vorteile bringen. Zum Beispiel, dass ein Prozess die CPU nutzen, während ein anderer Prozess auf die gleiche CPU wartet Datei