CPU-Leistung: Taktrate oder KerneWäre es beim Ausführen von JMP besser, mehr Kerne bei niedrigerer Frequenz zu haben oder umgekehrt? Ich dachte, es sei so, dass nur sehr wenige der Plattformen Threads hätten, was mich zu der Annahme veranlassen würde, dass die Taktrate wichtiger ist.Aber ich bin mir nicht sicher, ob das noch stimmt.Ich weiß, dass ich in einem allgemeinen Fall spreche, und es ist fast unmöglich, genau mit ihm zu sprechen.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, der den Text Explorer während der Textparsing-Phase bei langen Dokumenten mit der Anzahl der Zeilen > der Anzahl der Prozessoren ausführt. (Andere Plattformen verhalten sich anders und manche können Threading nicht nutzen. Die Analyse des Text-Explorers ist etwas, mit dem ich kürzlich gearbeitet habe.)
100% busy100% beschäftigt
Die Algorithmen des Text Explorers sind nicht immer in der Lage, die Maschine zu 100 % auszulasten. Manche Arbeit hängt davon ab, dass andere Arbeit zuerst abgeschlossen wird, und manche Threadarbeit konkurriert um Ressourcen (wie Speicherzugriff) auf eine Weise, die Threads warten lässt.
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 hat eine Grenze; Hier sehen alle 32/64-CPUs beschäftigt aus, aber die Arbeit geht ungefähr mit der gleichen Geschwindigkeit voran:
100% busy but not making progress much faster100 % beschäftigt, komme aber nicht viel schneller voran
Ich vermute, dass sich diese CPUs gegenseitig in die Quere kommen. Ein GB an Dokumenten, die sich durch den Speicher bewegen, hat viele Möglichkeiten, den Cache-Speicher in den CPUs zu verändern. Meistens wird JMP auf Maschinen mit 4 bis 12 CPUs entwickelt, und darauf sind wahrscheinlich die Algorithmen abgestimmt. Nachdem der Text-Explorer beispielsweise den Parsing-Schritt abgeschlossen hat, kombiniert er die Parsing-Ergebnisse unter Verwendung der Hälfte der Prozessoren, da wir festgestellt haben, dass dies schneller war als die Verwendung aller Prozessoren ... auf einem 8-CPU-Computer.
Also, ja, 4-12 CPUs, schnellere CPUs und genügend Speicher, um Paging zu vermeiden. Wenn Sie nicht genug Speicher haben, um die Daten ohne Paging 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) besteht darin, die schnellsten 4 oder 6 Prozessoren zu erhalten, die Sie können.
@txnelson : Ich hätte deutlicher sagen sollen, dass JMP oft einen Bruchteil aller Kerne verwendet, aber nicht alle ausgelastet sind.Das lässt mich glauben, 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 verwendet. Hier sind die Ergebnisse, wenn gleichzeitig 1, 2, 3 oder 4 Kopien des Skripts unten jeweils in ihrer eigenen Instanz von JMP 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 es kann an den Plattformen liegen, mit denen ich getestet habe.Wenn ich einen Random Forrest ausführe, laufe ich problemlos auf allen CPUs, sowohl unter Windows 7 als auch unter Windows 10. Im Durchschnitt nehme ich mehr als 35 % der gesamten CPU-Kapazität in Anspruch.Ich habe nur 8 Prozesse ... nicht Ihre wunderbaren insgesamt 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. Es tuckert normalerweise zusammen mit 25% Prozessorauslastung.Betreff: CPU-Leistung: Taktrate oder KerneVince,
Die meisten analytischen Plattformen sind multithreaded, während JSL meist singlethreaded ist.Es handelt sich also um einen gemischten Fall.Was ich vorschlage, ist, den Task-Manager und dann die Registerkarte Leistung darin zu öffnen.Wenn Sie dann Ihren typischen Auftragsablauf ausführen, werden Sie deutlich sehen, wann Ihre Anwendungen auf mehreren Kernen ausgeführt werden und wann es sich um einen einzelnen Kern handelt.Von dort aus können Sie Ihre Entscheidung treffen.