Verringert die Nutzung aller Kerne die Effizienz?

Verringert die Nutzung aller Kerne die Effizienz?

Ich habe ein Programm (also ein PHP-Skript), das ziemlich umfangreiche Textsuchen durchführt – es lädt eine 2 MB und eine 40 MB große Datei und durchsucht sie, um herauszufinden, wo jedes Wort, das in der ersten vorkommt, auch in der zweiten vorkommt.

Ich habe eine 4-Kern-CPU (Personal Computer). Wenn ich den Prozess starte, springt die CPU-Auslastung auf 25 %, Auslastung 1. Ich starte den Prozess erneut mit einer separaten Datei und die CPU-Auslastung steigt auf 50 %, Auslastung 2. Reduziert dies die Effizienz der einzelnen Prozesse? D. h. dauert die Ausführung jedes einzelnen Prozesses länger, als wenn sie einzeln ausgeführt würden? Was wäre, wenn ich 4 Prozesse ausführen würde, wodurch meine CPU-Auslastung auf 100 % steigen würde? Würden sie dann langsamer laufen?

Ich gehe davon aus, dass die parallele Ausführung der beiden Prozesse schneller abgeschlossen wird, als wenn ich sie nacheinander ausführe. Ist das richtig? Trifft das auch zu, wenn ich mehr als zwei ausführe, also etwa 3 oder 4? Oder mehr? Wo liegt hier der Engpass? Ich gehe davon aus, dass die CPU damit zurechtkommt, solange ich die Anzahl der Prozesse gleich oder kleiner als die Anzahl der Kerne halte. Aber was ist mit dem Speicherzugriff? Müssen die Prozesse warten, während sie den Speicher lesen?

Antwort1

Kurze Antwort: Benchmarken Sie es.

Lange Antwort: Jeder einzelne Prozess dauert länger (aufgrund der Frequenzskalierung), aber insgesamt ist es am effizientesten, jeden Kern zu 100 % auszulasten.

Antwort2

Ob die parallele Ausführung von Dingen die Leistung verbessert oder verschlechtert, hängt von vielen Faktoren ab. Zum Beispiel:

  1. Wenn Sie viele E/A-Vorgänge durchführen und dabei große Dateien im Vergleich verwenden, liegt der Engpass bei der Festplatte und nicht bei der CPU, und Ihre Leistung wird mit Sicherheit nachlassen.
  2. Wenn Ihre Dateien gleichzeitig gerade groß genug für den RAM Ihres Systems sind und Sie mehr als einen Prozess ausführen, wird der RAM zum Engpass und es kommt erneut zu E/A auf der Maschine.

Es ist also von Fall zu Fall unterschiedlich. Aber in Ihrem Fall bin ich ziemlich sicher, dass sich Ihre Leistung nur verbessert, wenn Sie die Dinge parallel ausführen, und ich kann mir kein Szenario vorstellen, in dem dies Ihre Effizienz beeinträchtigen könnte, es sei denn, ich übersehe einen Punkt, der mir nicht einfällt.

Antwort3

Es klingt, als hätten Sie weder auf der Festplatte noch im Netzwerk viel I/O-Wartezeit. Vorausgesetzt, Sie haben GBs RAM, sollten die 42 MB-Dateien problemlos in den RAM geladen werden können. An diesem Punkt sollten vier parallele Prozesse die besten Ergebnisse liefern. Sie werden geringfügige Kontextwechsel feststellen, wenn normale Betriebssystemprozesse ausgeführt werden müssen.

Auf NUMA-Systemen ist jedem Kern ein Speicherpool zugewiesen. Die Leistung kann nachlassen, wenn der Kernel einen Prozess auf einen anderen Kern migriert, da sich die Dateien noch im Speicherpool des ursprünglichen Kerns befinden. Ehrlich gesagt bin ich mir nicht sicher, ob das auf PCs zutrifft.

Antwort4

Im Allgemeinen ja. Ignorieren Sie den Codierungsteil für einen Moment.

Moderne Mehrkernprozessoren verfügen über einen Boost-Modus, der bei Verwendung nur einer kleinen Anzahl von Kernen die Frequenz etwas erhöht. Die Verwendung aller Kerne verkleinert also den einzelnen Kern. Details hängen vom Prozessor ab.

DAS HEISST: Die Gesamtsumme wird trotzdem höher sein, da der individuelle Boost im Vergleich zu einem weiteren Kern normalerweise SEHR gering ist (einige hundert MHz). Daher ist es wirklich besser, alle Kerne zu nutzen. Der Boost wurde hauptsächlich für Fälle gemacht, die nicht gut skalieren und eine hohe Frequenz pro Kern benötigen – dazu gehören Single-Thread-Spiele ;)

Um Ihre Frage zum Speicherzugriff zu stellen. Ich hoffe, Sie wissen, dass ein moderner Server eine Speicherzugriffsgeschwindigkeit von über 50 GB (also Gigabyte) pro Sekunde aus DRAM hat – mehr aus Caches. Es ist also unwahrscheinlich, dass Sie darauf stoßen. IO könnte ein Problem sein, aber das wird daran erkennbar, dass die CPU nicht voll ausgelastet ist und die IO-Wartestatistiken steigen. Caching hilft hier sehr.

verwandte Informationen