Nun, es gibt ein paar Teile zu dieser Frage - im Allgemeinen ist es eine gute Faustregel, nicht mehr Threads auszuführen, als Sie über logische Prozessoren verfügen - obwohl dies normalerweise für das gesamte System gilt und von der Auslastung abhängen kann. Um herauszufinden, wie viele physische Prozessorkerne Sie haben, können Sie verwenden cat /proc/sysinfo
. Es wird eine Reihe von Zeilen für jeden logischen Kern gedruckt. Scrollen Sie also nach unten und schauen Sie sich den letzten an (ich habe 8 fast identische auf meinem Quad-Core, HT-System).
processor : 7 vendor_id : GenuineIntel cpu family : 6 model : 58 model name : Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz stepping : 9 microcode : 0x16 cpu MHz : 3401.000 cache size : 8192 KB physical id : 0 siblings : 8 core id : 3 cpu cores : 4 apicid : 7 initial apicid : 7 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms bogomips : 6819.66 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management:
Ich wähle die wichtigsten Zeilen hier aus: physische id: 0 (dies ist der erste Socket. Wenn Sie mehr als einen Socket verwenden, überprüfen Sie die Prozessor- und CPU-Kerne für jedes physische JD. Wenn dies eine Zahl ist, die größer als 0 ist, haben Sie mehrere Steckdosen)
Prozessor: 7 (diese Zahl beginnt mit 0 bis n-1, dies ist der 8. logische Kern in seinem Socket - betrachtet die größte Anzahl, die Sie für einen Satz von Werten haben, die eine physische ID gemeinsam nutzen)
CPU-Kerne: 4 (Ich habe 4 physische Kerne - dies ist für jeden Kern gleich, und da SMP im Allgemeinen identische Kerne verwendet, sollte dies auf einem Dual-Socket-System gleich sein.)
Mein Prozessor sollte mir erlauben, 8 Threads gleichzeitig auszuführen, wobei ein Kern pro Thread angenommen wird. Das heißt, abhängig von der Laufzeit und anderen Faktoren, die Sie möglicherweise mit mehr erreichen können
SO hat einige Fragen zu diesem Thema, und wenn Sie zwei davon auswählen, deuten die Antworten auf diese Frage darauf hin, dass ein Thread pro logischem Kern eine gute Idee ist, obwohl dies darauf hindeutet, dass Sie möglicherweise höher steigen können. Unglücklicherweise lautet die Antwort, mit einem Thread pro Prozess zu beginnen und höher zu stimmen - was eine wahnsinnig hohe Anzahl von Threads sein kann, wenn sie nicht lange laufen und speicherhungrige Threads sind.