Gibt es eine Möglichkeit, das ganze ohne Verwendung globaler Variablen zu erreichen? Hierfür müsste mein function handle einen Rückgabewert habe, aber ich weiß leider nicht wie ich diesen Rückgabewert in meinen Workspace transferiere.
und was passiert, wenn du es so versuchst?
Bekommst du eine Fehlermeldung? Welche?
Der Code innerhalb von spmd läuft auf anderen MATLAB-Prozessen, die evtl. sogar auf einem anderen Rechner laufen. Da ist es zu erwarten, dass sie nicht gegenseitig die internen Daten kennen.
Was versuchst du denn mit diesem Konstrukt zu erreichen?
Es kommt weder zu einer Fehlermeldung noch zu dem, was ich dachte programmiert zu haben. Bspw. müsste das Programm doch zum Ende kommen, wenn ich Escape drücke?!
In der Doku habe ich dazu bislang nichts finden können.
Ich habe eine Anwendung, deren Ergebnis kontinuierliche Plots sind. Dabei soll der Bediener bestimmte Eingaben vornehmen können, um die Art der Plots zu beeinflussen.
Das Ganze funktioniert als serieller Code einwandfrei. Um die Laufzeit eventuell zu reduzieren, strebe ich nun parallelen Code an.
du kannst den Code 1:1 ausprobieren, es erscheint keine Fehlermeldung.
Ich hatte anfangs auch mit globalen Variablen experimentiert und erstaunt festgestellt, dass sich deren Wert zwar in Abhängigkeit der Tastatur Bedienung wie gewünscht geändert hatte, jedoch nicht das Lesen des aktuellen Werter innerhalb von spmd.
Ich bin eben auf folgendes gestoßen:
https://de.mathworks.com/help/distc.....n-multiple-data-sets.html
Dort heißt es "The body of an spmd statement cannot contain break or return statements.". Was genau ist denn der body? Alles zwischen spmd und zugehörigem end?
Deine vorgeschlagene Alternative scheidet für meine Anwendung leider aus, da ich aus Zeitgründen spmd nur ein einziges Mal ausführen möchte (und dann bis zum Ende dort drin bleiben will), da das Initiieren sehr viel Zeit kostet.
du kannst den Code 1:1 ausprobieren, es erscheint keine Fehlermeldung.
Das glaube ich dir gerne, es hat mich lediglich verwundert, dass dem so ist.
Zitat:
Ich hatte anfangs auch mit globalen Variablen experimentiert und erstaunt festgestellt, dass sich deren Wert zwar in Abhängigkeit der Tastatur Bedienung wie gewünscht geändert hatte, jedoch nicht das Lesen des aktuellen Werter innerhalb von spmd.
Erklärung dafür siehe 11.2., 23:53.
Zitat:
Was genau ist denn der body? Alles zwischen spmd und zugehörigem end?
Ja.
Zitat:
Deine vorgeschlagene Alternative scheidet für meine Anwendung leider aus, da ich aus Zeitgründen spmd nur ein einziges Mal ausführen möchte (und dann bis zum Ende dort drin bleiben will),
Nur ist das aus den genannten Gründen eben nicht möglich. Die Eingabe erfolgt in einem Prozess, die Verwendung in einem anderen, und damit ist auch eine Kommunikation nötig.
Zitat:
da das Initiieren sehr viel Zeit kostet.
"sehr viel" ist relativ ;) Beim momentanen Code natürlich, weil da ja nichts zeitaufwändiges gemacht wird.
Je nach Code können Vektorisierung, Generieren von MEX-Files, oder bei wiederholt überschriebenen Graphen das Ersetzen der Daten statt die Neuerstellung der Graphik Alternativen sein.
Was genau ist denn der body? Alles zwischen spmd und zugehörigem end?
Ja.
Das wundert mich, denn ich habe sogar 2x break. Von der Geschichte mit der Tastatur abgesehen funktioniert es auch genau so, wie ich es mir wünsche.
Zitat:
Zitat:
Deine vorgeschlagene Alternative scheidet für meine Anwendung leider aus, da ich aus Zeitgründen spmd nur ein einziges Mal ausführen möchte (und dann bis zum Ende dort drin bleiben will),
Nur ist das aus den genannten Gründen eben nicht möglich. Die Eingabe erfolgt in einem Prozess, die Verwendung in einem anderen, und damit ist auch eine Kommunikation nötig.
Das leuchtet ein. Dann muss es doch aber irgendwie möglich sein, die Daten entsprechend zu transportieren. Vielleicht würde es einen Unterschied machen, die Figur innerhalb des Workers zu definieren?
Zitat:
Zitat:
da das Initiieren sehr viel Zeit kostet.
"sehr viel" ist relativ Beim momentanen Code natürlich, weil da ja nichts zeitaufwändiges gemacht wird.
Je nach Code können Vektorisierung, Generieren von MEX-Files, oder bei wiederholt überschriebenen Graphen das Ersetzen der Daten statt die Neuerstellung der Graphik Alternativen sein.
Grüße,
Harald
Ich bin mir ziemlich sicher, dass ich dahingehend keine nennenswerten Reserven mehr habe. Das mit der Parallelisierung reizt mich.
Ich habe eben in der Doku gelesen, dass innerhalb von spmd kein grafischer Output möglich ist. Befehle wie figure etc. erzeugen also keine Wirkung.
(Es wundert mich gleichzeitig, dass der Compiler da nichts anmerkt.)
Damit erübrigen sich weitere Anstrengungen. Schade.
Aber wieso hat man diesen Vorgang nicht auch für drawnow etc. installiert?
(Wobei ich mich da auch wieder frage, wie lange dieses hin und her schicken, auch von einem Worker zum anderen, dauert.)
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.