WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

[ParallelComputingToolbox] Gui auf einem anderen worker/lab

 

jijo
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2010, 11:12     Titel: [ParallelComputingToolbox] Gui auf einem anderen worker/lab
  Antworten mit Zitat      
Hallo, ich bin noch Matlab-Neuling und habe folgendes Problem Sad:

Ich habe eine M-File, in der verschiedene Simulationen laufen. Ein GUI soll diverse Daten und Ergebnisse darstellen. Die M-File (und später weitere) und das GUI sollen aber parallel (erstmal auf 2 bzw. 4 labs) laufen.

Die Funktion/das Gui habe ich einmal als
1.) batch job
und als zweiten Test
2.) mit spmd -> switch case, labindex 1 2
verteilt.

Die Daten haben bei spmd mit labSend und labReceive ausgetauscht.

Ich habe nun (erstmal) zwei Probleme:
1) Das GUI wird nicht angezeigt
"...The labs that run the tasks of a parallel job are MATLAB sessions without displays. ..." aus User's Guide "Parallel Computing Toolbox"

2) während das GUI (lab2) läuft, kommt lab 1 in den IDLE Mode und eine entsprechende Fehlermeldung erscheint.

" A communication mismatch error was encountered:
The other lab became idle during receiving from lab 2 (tag: 'any') "

Ich hoffe Ihr verzeiht meine Unwissenheid Very Happy und Danke schonmal für eventuelle Antworten oder Hilfestellungen.

Grüße Johannes
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.07.2010, 12:05     Titel:
  Antworten mit Zitat      
Hallo,

zu 1.: Das ist nicht der Sinn der Parallel Computing Toolbox und kann ich mir überhaupt nur schwer vorstellen, wie das zu realisieren wäre. Eine denkbare Anwendung im Zusammenhang mit GUIs wäre, dass du auf deinem Client-Rechner die GUI laufen lässt und über die Callbacks Rechnungen anstößt, die dann parallel laufen.

zu 2.: bitte das komplette Code-Beispiel angeben. Dann kann man leichter nachvollziehen, ob das ein allgemeines Problem des Codes oder ein speziell auf deinem Rechner auftretendes Problem ist.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jijo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2010, 16:00     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort! Das habe ich leider schon vermutet, und auch an eine Lösung mit dem GUI auf dem Client Rechner gedacht. Ich wollte es allerdings möglichst modular halten, damit die Anzeige und Bedinung/GUI später mit einer anderen Möglichkeit (zB. Flash) realisiert werden kann.

Primär geht es darum, verschiedene Simulationsmodule mit Modellfamilien zu simulieren. Die Module sind in sich teilweise mit parfor schon parallelisiert. Um das System zu entlasten, sollten die Plots (im GUI) und die jeweiligen Module auf unterschiedlichen Rechnern laufen.

Ich habe damit keine Erfahrung, und dachte es in obiger Weise realisieren zu können (die Idee kam durch Deinen/Haralds Beitrag http://www.gomatlab.de/gleichzeitig.....246,highlight,spmd.html).

Zu Problem 2, der Code... :
Aufruf:
Code:

matlabpool open
spmd
switch labindex
case 1
    gui
case 2
    testlab
end
end
matlabpool close
 


Die Testfunktion lab2) erzeugt periodisch einen Sinus und sendet ihn an lab 1 (GUI)

Code:

function testlab

t = timer('TimerFcn', @testlabcalc, 'ExecutionMode', 'fixedRate', 'Period', .1);
start(t)                                      

function testlabcalc(~,~)
time = cputime;
y = sin(time);
data = [time,y];
labSend(data, 1)
 


Das GUI soll periodisch über einen Timer die Daten auslesen und plotten:

Code:

function gui_OpeningFcn(...)
.
.
.
t = timer('timerfcn', {@timerfcn, handles}, 'ExecutionMode', 'fixedRate', 'Period', 0.1);
start(t)
set(handles.figure1,'deletefcn','stop(timerfind), delete(timerfind)')
.
.
.



function timerfcn(~,~,handles)
data = labReceive(2);
plot(handles.axes1,data(1),data(2),'xk');

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.07.2010, 18:08     Titel:
  Antworten mit Zitat      
Hallo,

grundsätzlich ist die Idee gut, dir muss nur klar sein, dass die GUI nur auf dem Client-Rechner laufen kann und auch nur dort eine Interaktion von außen möglich ist.

Dein Problem kann ich zunächst nicht reproduzieren. Allerdings würde ich den MATLAB Pool nicht unmittelbar nach den Anweisungen schließen, da damit die Sessions geschlossen werden und auch die Timer nicht mehr ausgeführt werden können.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.