
Ich möchte auf meinem Desktop/Laptop einige relativ aufwändige Verarbeitungsvorgänge ausführen (nicht so schlimm, dass ein Cluster erforderlich wäre, aber ich brauche einen guten Heimcomputer). Meine Frage ist, wie viele Threads erstellt werden müssen, um die Aufgabe möglichst schnell zu erledigen (nehmen Sie an, dass die Anwendung die Arbeitslast mit sehr wenig Overhead verteilt).
Normalerweise würde ich einen Thread pro Prozessor erstellen, aber ich habe mich gefragt, ob die Hyperthreading-Fähigkeit des Core i5/i7 bedeutet, dass ich eigentlich zwei Threads pro Prozessor erstellen sollte (also einen Thread pro virtuellem Prozessor). Weiß das jemand?
*Natürlich wäre eine vernünftige Antwort, es auszuprobieren und zu sehen. Da es etwa 12 Stunden dauert, es auszuführen, würde ich es lieber gleich beim ersten Mal richtig machen, aber ich werde gerne Ergebnisse veröffentlichen, wenn ich die Gelegenheit habe, es auf beide Arten auszuführen.
Antwort1
Dies ist eine offene Frage, die aufwändige Benchmarks erfordert. Ich habe persönlich beide Möglichkeiten erlebt. Sofern Sie Ihr Multithreading nicht wirklich vermasselt haben, beträgt der Unterschied etwa +-10 %, es lohnt sich also, beide Möglichkeiten auszuprobieren. Auch wenn es lange dauert.
Bei vielen High Performance Computing-Clustern, die aus Intel-Komponenten bestehen, ist HT deaktiviert. Dies hat einen guten Grund, da diese Codes dazu neigen, die Hardware zu sättigen, und ihre Leistung daher stark von der Sättigung des Speicherzugriffs abhängt - was im HT-Fall noch schlimmer ist, da Threads verarbeitet und ein- und ausgeschaltet werden. Siehehttp://semiaccurate.com/2012/04/25/does-disabling-hyper-threading-increase-performance/.
Aber wenn Ihr Code nicht hoch optimiert ist, werden Sie möglicherweise nicht annähernd die gleiche Leistungssteigerung erzielen, siehehttp://semiaccurate.com/2012/04/25/does-disabling-hyper-threading-increase-performance/.
Es scheint, dass bei Einzel-CPU-Berechnungen die Deaktivierung von Hyperthreading die Leistung einiger Software um 1 % steigern kann, andere Software jedoch deutlich mehr beeinträchtigt. Vielleicht um ~10 %.
Dies bedeutet, dass Sie, sofern Ihre Benchmarks nichts anderes sagen, 1 Thread pro Hyperthread/Realcore auf Ihrem Desktop-Computer erstellen sollten.
Antwort2
Ich spreche hier ausschließlich aus Erfahrungen mit F@H-Folding, wenn ich sage, dass ein einzelner Thread pro Kern (sei er virtuell oder physisch) am besten ist.
Allerdings kann es eine gute Idee sein, einen einzelnen Kern für Hintergrundprozesse und allgemeine Computeraufgaben frei zu lassen, da schon eine geringe Nutzung eine Aufgabe zum Erliegen bringen kann.
Schauen Sie sich die CPU-Affinität an, wenn Sie verfolgen möchten, wo die Dinge laufen. Als allgemeine Regel gilt: Zuweisen anzuerst die physischen Kerne(dh:sogarNummerierungen), dann die Hyperthread-Kerne.