CPU-Leistung: Taktrate oder KerneWäre es beim Ausführen von JMP besser, mehr Kerne bei niedrigerer Frequenz zu haben oder umgekehrt? Ich dachte, dass nur sehr wenige Plattformen über Threads verfügten, was mich zu der Annahme verleiten würde, dass die Taktrate wichtiger ist.Aber ich bin mir nicht sicher, ob das noch stimmt.Ich weiß, dass ich von einem allgemeinen Fall spreche, und es ist nahezu unmöglich, ihn genau auszudrücken.Danke trotzdem.
Betreff: CPU-Leistung: Taktrate oder KerneWie gut JMP die verfügbaren Prozessoren nutzt, hängt davon ab, welche Analyseplattform läuft und welche Daten verarbeitet werden. Hier ist JMP, das den Text Explorer während der Textanalysephase für lange Dokumente mit der Anzahl der Zeilen > der Anzahl der Prozessoren ausführt. (Andere Plattformen verhalten sich anders und einige können die Vorteile des Threadings nicht nutzen. Mit der Analyse des Text-Explorers habe ich kürzlich gearbeitet.)
100% busy100% busy100 % beschäftigt
Die Algorithmen des Text Explorers sind nicht immer in der Lage, die Maschine zu 100 % auszulasten. Einige Arbeiten hängen davon ab, dass andere Arbeiten zuerst abgeschlossen werden, und einige Thread-Arbeiten konkurrieren um Ressourcen (z. B. Speicherzugriff), sodass Threads warten müssen.
dt = New Table( "bigtext",
Add Rows( 1000 ),
New Column( "text", Character, "Nominal", formula( Repeat( "aaa bbb ccc ", 1e5 ) ) )
);
dt << Text Explorer(
Text Columns( :text )
);
Das Hinzufügen weiterer CPUs ist begrenzt. Hier scheinen alle 32/64-CPUs ausgelastet zu sein, aber die Arbeit schreitet ungefähr im gleichen Tempo voran:
100% busy but not making progress much faster100% busy but not making progress much faster100 % beschäftigt, aber nicht viel schneller vorangekommen
Ich vermute, dass diese CPUs sich gegenseitig im Weg stehen. Ein GB an Dokumenten, die sich durch den Speicher bewegen, birgt viele Möglichkeiten, den Cache-Speicher in den CPUs zu belasten. Meistens wird JMP auf Maschinen mit 4 bis 12 CPUs entwickelt und die Algorithmen sind wahrscheinlich darauf abgestimmt. Nachdem Text Explorer beispielsweise den Parsing-Schritt abgeschlossen hat, werden die Parsing-Ergebnisse mit der Hälfte der Prozessoren kombiniert, da wir festgestellt haben, dass dies schneller ist als die Verwendung aller ... auf einem 8-CPU-Computer.
Also ja, 4–12 CPUs, schnellere CPUs und genügend Speicher, um Paging zu vermeiden. Wenn Sie nicht über genügend Speicher verfügen, um die Daten ohne Auslagerung auf die Festplatte zu speichern, hilft nichts anderes.
Betreff: CPU-Leistung: Taktrate oder Kerne@vince_faller : Um Ihre ursprüngliche Frage zu beantworten, meine persönliche Empfehlung zur Optimierung einer Kopie von JMP (unter Windows) ist, die schnellsten 4 oder 6 Prozessoren zu bekommen, die Sie können.
@txnelson : Ich hätte klarer sagen sollen, dass JMP oft nur einen Bruchteil aller Kerne nutzt, aber nicht alle.Das lässt mich vermuten, dass JMP mit weniger als 8 oder 12 tatsächlichen „Worker“-Threads läuft und die Verarbeitung vom Betriebssystem von Kern zu Kern verlagert wird.
Diese Eigenschaft von JMP stört mich, daher habe ich einige Zeit damit verbracht, meine Theorie zu testen, dass JMP nur einen Bruchteil der gesamten Kerne nutzt. Hier sind die Ergebnisse, wenn 1, 2, 3 oder 4 Kopien des folgenden Skripts gleichzeitig in jeweils einer eigenen JMP-Instanz ausgeführt werden.
Eine Instanz
19-21 Sekunden

Zwei Instanzen
26-28 Sekunden

Drei Instanzen
34-39 Sekunden

Vier Instanzen
43-47 Sekunden

Die Zeit, zwei Kopien gleichzeitig auszuführen, ist sicherlich kürzer als die Zeit, eine zweimal auszuführen:

Names default to here( 1);
dt = Open( "$Sample_data/probe.jmp", Private );
Random reset(1);
valcol = dt << New Column( "Validation",
Numeric, "Nominal", Set formula( Random Category( 0.75, 0, 0.25, 1, 2 ) ),
Value Labels( {0 = "Training", 1 = "Validation", 2 = "Test"} ), Use Value Labels( 1 )
);
dt << Run Formulas; valcol << Delete Formula;
timeboot = Function( {},
start = Today();
xvars = Substitute(Char((dt << Get Column Names)[8::394]), "{", "", "}", "");
Eval( Parse(
"rf = dt << Bootstrap Forest(
Y( :Process ),
X( " || xvars || " ),
Validation Portion( :Validation ),
Method( \!"Bootstrap Forest\!" ),
Portion Bootstrap( 1 ),
Number Terms( 30 ),
Number Trees( 2000 ),
Early Stopping( 0 ),
Go
);"
));
rf << Close Window;
end = Today();
return(end - start);
);
win = New window("Time Bootstrap",
V List Box(
r = text box( "", << Set Width( 100 ) ),
H List Box(
Button Box( "Start", r << Set Text( Char( timeboot() ) || " seconds" ) ),
Button Box( "Close", dt << Close Window; win << Close Window; )
)
)
);Betreff: CPU-Leistung: Taktrate oder KerneMeine Ergebnisse sind unterschiedlich, und das kann an den Plattformen liegen, mit denen ich getestet habe.Wenn ich Random Forrest ausführe, läuft es problemlos auf allen CPUs, sowohl unter Windows 7 als auch unter Windows 10. Im Durchschnitt beansprucht es mehr als 35 % der gesamten CPU-Leistung.Ich habe nur 8 Prozesse ... nicht Ihre wunderbare Gesamtzahl von 12, aber alle 8 arbeiten an dem Problem.
Betreff: CPU-Leistung: Taktrate oder KerneIch habe keine einzige Instanz von JMP gesehen, die mehr als 6 von 12 Kernen auf einem Windows 7-Desktop verwendet. Normalerweise tuckert es bei einer Prozessorauslastung von 25 %.Betreff: CPU-Leistung: Taktrate oder KerneVince,
Die meisten Analyseplattformen sind Multi-Threaded, während JSL meist Single-Threaded ist.Es handelt sich also um einen Mischfall.Ich schlage vor, den Task-Manager und dann darin die Registerkarte „Leistung“ zu öffnen.Wenn Sie dann Ihren typischen Jobablauf ausführen, werden Sie deutlich erkennen, wann Ihre Anwendungen auf mehrere Kerne zugreifen und wann es sich um einen einzelnen Kern handelt.Von dort aus können Sie Ihre Entscheidung treffen.