Ein paar JSL-FragenHallo zusammen!
Ich habe mich gefragt, ob jemand die Antworten auf Folgendes weiß:
- Gibt es eine JSL-Funktion, um die Anzahl der Threads zu bestimmen, die ein Host-Computer gleichzeitig ausführen kann.
- Ist die Simulationsfunktion in JMP Pro Multithreaded?
Irgendwelche Gedanken sind willkommen.
Vielen Dank!
MRe: Ein paar JSL-Fragen1) Nein, aber Sie können eine Antwort mit JSL folgendermaßen ableiten:
x=j(1000,1,.);
i=0;
parallelassign({q=i++},x[r,c]=q);
show(i);
Aber das ist nur * eine * Antwort, nicht * die * Antwort. Sogar eine einzelne CPU-Maschine kann Hunderte von Threads haben. Und aktuelle CPUs verfügen normalerweise über einige Hyper-Threading-Funktionen, die eine schnellere Thread-Umschaltung ermöglichen. Aber der i-Wert oben ist wahrscheinlich das, was Sie wollen. Erläuterung: In {q = i ++} ist q eine lokale Variable in jeder Thread-Instanz und i ++ ein Initialisierungswert, der außerhalb der Threads berechnet wird. Sie sollten keinen Code schreiben, der von diesem Verhalten oder der scheinbaren Reihenfolge abhängt, in der die Matrixelemente initialisiert werden.
2) Schauen Sie sich den Task-Manager an (WIN 7 hat die einzelnen CPUs besser dargestellt als 10). Ich schätze ja.
(MFI ist E / A-gebunden und verwendet Threads zum Lesen von Dateien und profitiert von den Threads auf einer einzelnen CPU-Maschine; die E / A zum Lesen einer Datei in einem Thread hindert keinen anderen Thread daran, die CPU zum Analysieren von Daten zu verwenden bereits für eine andere Datei gelesen. Aber simulieren ist wahrscheinlich CPU-gebunden und hat wahrscheinlich keine E / A. Wenn es ein Thread ist, sollte es von mehreren CPUs profitieren. ParallelAssign oben ist speichergebunden. Die Bandbreite für den Speicher bestimmt die maximale Geschwindigkeit, mit der die Daten in die Matrix geschrieben werden können. Weitere CPUs helfen nur, wenn die Berechnung auf der rechten Seite von x [r, c] = ... langsam ist. )
Re: Ein paar JSL-FragenInteressante Fragen, @ MikeD_Anderson . Kannst du uns sagen, was dich dazu bringt?
Re: Ein paar JSL-FragenVielen Dank, @Craige_Hales ! Ich denke das wird funktionieren. Ich hatte gehofft, dass es eine JSL-Funktion gibt, um das Host-Betriebssystem nach der Anzahl der Kerne auf dem Prozessor zu fragen. Ich habe gerade Ihr Snippet ausprobiert und es gab mir dieselbe Antwort (mein i9-Prozessor hat 6 Kerne mit 2 Threads pro Kern = 12 Threads).
@ Jeff_Perkinson - Ich versuche, eine Gesamtlaufzeit für eine Simulation zu berechnen, dh Wenn mein Modell 2 Sekunden für die Ausführung benötigt und 2500 Simulationen (Standard) ausgeführt werden, die sich auf 6 Kerne mit 2 Threads pro Kern verteilen (vorausgesetzt, die Simulation ist Multithreading), dauert die Simulation 417 Sekunden (6 Minuten). Ich möchte eine Warnmeldung in ein Add-In einfügen, an dem ich arbeite, um dem Benutzer einen Überblick darüber zu geben, wie lange die Simulation dauern soll. Es ist keine perfekte Mathematik, aber ich werde wenigstens sagen: "Hey - diese Simulation wird 1 Stunde dauern - wollen Sie wirklich, dass Sie sie ausführen wollen?" Ich kann die Bearbeitungszeit für eine Iteration des Modells erhalten - kein Schweiß -, aber die Anzahl der Threads herauszufinden, war etwas, worüber ich stolperte.
Beste,
M
Re: Ein paar JSL-FragenDas Verdoppeln der Anzahl von CPUs verdoppelt niemals die Geschwindigkeit für eine reale Anwendung, die CPU- und Speicher-gebunden ist ... der übliche Fall. Die Speicherbandbreite wird immer zum Problem. Sie könnten 2 oder 4 CPUs annehmen und trotzdem eine ziemlich gute Vermutung haben, wenn Sie alles andere ansteuern, was nicht kontrolliert werden kann. Niemand wird sich beschweren, wenn es früh endet.