8 logischen threads auf 4 Kernen bei maximal 4-mal schneller parallel?

Ich bin benchmarking-software, die ausgeführt wird 4x schneller auf Intel 2670QM dann meine Seriennummer-version mit allen 8 meiner "logisch" - threads. Ich möchte eine community feedback über meine Wahrnehmung des benchmarking-Ergebniss.

Wenn ich mit 4 Threads auf 4 Kerne, bekomme ich eine Geschwindigkeit von 4x, der gesamte Algorithmus ausgeführt wird, in parallell. Dies scheint logisch für mich, da 'Amdhals Gesetz", prognostiziert er. Windows task-manager sagt mir, ich bin mit 50% der CPU.

Aber wenn ich führen Sie die gleiche software auf allen 8 threads, bekomme ich wieder eine Geschwindigkeit von 4x und nicht einer Geschwindigkeit von 8x.

Wenn ich das richtig verstanden habe: meine CPU hat 4 Kerne mit einer Frequenz von 2,2 GHZ individuell, aber die Frequenz ist unterteilt in 1.1 GHZ, wenn man es auf 8 'logische' - threads, und das gleiche folgt für den rest der Komponenten, wie zum Beispiel der cache-Speicher? Wenn das wahr ist, warum dann nicht der task-manager nur Anspruch auf 50% meiner CPU genutzt wird?

#define NumberOfFiles 8
...
char startLetter ='a';
#pragma omp parallel for shared(startLetter)
for(int f=0; f<NumberOfFiles; f++){
    ...
}

Ich bin nicht einschließlich der Zeit, die Sie mithilfe des Festplatten-I/O. ich bin nur daran interessiert, die Zeit, die ein STL-Aufruf(STL-sort) nicht die disk-I/O.

  • In meiner Erfahrung, 4 Kerne bedeutet, dass Sie tun können 4 Dinge zur gleichen Zeit mit der Straflosigkeit. 8 threads, die nur bedeutet, dass zwei threads teilen, einem Kern (vorausgesetzt, Sie sind gleichmäßig verteilt), so, es sei denn, dein code hat einige Parallelität in gebaut, können Sie nicht sehen, keine Verbesserung der Geschwindigkeit über threads == cores. Ihre Ergebnisse werden davon abhängen, ob Ihre algorithmen sind Prozessor-bound oder I/O gebunden. Kurz gesagt, es ist nicht so einfach, wie Sie denken.
  • Auf einige hardware, die Sie mehrere Instanzen von einigen Prozessor-Einheiten pro thread, aber nicht alle (z.B. nur eine FPU). Je nach der hardware-obwohl das zusätzliche "threads" dienen wenig mehr, als dass context-switches zwischen einer größeren Anzahl ausführbarer Prozesse, die viel billiger (Sie müssen nicht alles kopieren, den Staat aus jeder switch).
InformationsquelleAutor Cisum inas | 2012-05-01
Schreibe einen Kommentar