Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
SW-Entwickler/in SiL Motorsteuerung
Erstellung und Erweiterung von kundenspezifischen Simulationsmodellen in MATLAB/Simulink
Robert Bosch GmbH - Schwieberdingen

Softwareentwickler (m/w) automatische Codegenerierung
Umsetzung, Neuprogrammierung und Weiterentwicklung in Simulink, TargetLink und C
EFS - Ingolstadt, Wolfsburg

Softwarearchitekt (m/w)
Entwicklung mit Matlab / Simulink und MISRA-C
SEG Automotive Germany GmbH - Stuttgart-Weilimdorf

Informatiker (m/w) für den Bereich Toolkette Embedded Software
Weiterentwicklung einer MATLAB- / Simulink-Toolkette
cbb-Software GmbH - Stuttgart

HiL/SiL Ingenieur Antriebsstrang-Modellierung (m/w)
Implementierung und Inbetriebnahme von Modellen und Steuergeräten am HiL Prüfstand
Hays AG - Stuttgart

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Gleichzeitige Ausführung zweier m-files mit Parallel Comp TB

 

joh_bimaq
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2009, 10:00     Titel: Gleichzeitige Ausführung zweier m-files mit Parallel Comp TB
  Antworten mit Zitat      
Moin zusammen,

ich habe eine Frage zur Parallel Computing Toolbox. Ich konnte das aus der Matlab-Anleitung leider nicht eindeutig herausfinden.

Hier mein Problem:
Ich habe zwei Funktionen. Die eine bekommt kontiunierlich Messdaten von meinem Messaufbau. Die andere soll diese Messdaten in bestimmten Zeitschritten anrufen und damit eine Regelung ausführen.
Das Problem ist, dass das Messfunktion die ganze Zeit über aktiv ist, so also die Konsole dauerhaft blockiert. Bisher liefen diese Programme unabhängig voneinander, ich möchte sie nun aber zu einem Prozess zusammenfügen.
Gibt es eine Möglichkeit mit der Parallel Computing Toolbox diese beiden Programme parallel auszuführen? Am besten natürlich auf unterschiedlichen Cores.
Oder ist die Toolbox nur dafür da, dass bestimmte Programmteile (for schleifen, usw.) auf mehreren Prozessoren gleichzeitig ausgeführt werden?

Ich habe schon dieses Tutorial ausprobiert :
http://iheartmatlab.blogspot.com/20.....unications-in-matlab.html
Hat mit einseitiger Kommunikation auch hingehauen, da ich aber noch gar keine Java-Erfahrung habe, würde ich lieber auf eine Matlab-interne Funktion zugreifen, bevor ich das ganze auf meine Problemstellung umstricke.

Mfg
Andre
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 18.379
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 17.11.2009, 10:17     Titel:
  Antworten mit Zitat      
Hallo,

ja, das geht.
Ein paar Tips:

Für interaktives Arbeiten:
Code:
matlabpool open 2
spmd
% eigentlicher Code
end
matlabpool close


Für Arbeiten "in batch":
Code:
doc createParallelJob


Explizite Kommunikation:
Code:
doc labSend
doc labReceive


The Mathworks bietet zu diesem Thema auch eine zweitägige Schulung an:
http://www.mathworks.de/services/tr.....ses/DC01_1.html?region=de

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2009, 13:43     Titel:
  Antworten mit Zitat      
Vielen Dank für die rasend schnelle Antwort.

Hab mal als erstes die Batchversion für eine kleine Testfunktion ausprobiert und konnte diese Funktion zwei mal gleichzeitig ausführen. Ich denk, damit kann ich gut arbeiten.
Hatte das mit dem batch auch schon mal gelesen, aber die Funktion die du verlinkt hattest war deutlich verständlicher als das was ich hatte.
Ich werde die anderen auch noch mal ausprobieren.

Weißt du, ob die Cores meiner CPU automatisch zugewiesen werden, oder ob ich beide Funktionen "per Hand" auf unterschiedliche Cores legen kann.

mfg
Andre
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 18.379
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 17.11.2009, 14:00     Titel:
  Antworten mit Zitat      
Hallo,

die Zuweisung wird automatisch vom Betriebssystem im Zusammenspiel mit der Hardwareübernommen.
Überprüfen kannst du das im (Windows) Task Manager. Bei einem Dual Core solltest du folgendes sehen:

Normales MATLAB-File laufen lassen -> Auslastung i.d.R. max. 50%
Parallelen Algorithmus laufen lassen -> Auslastung sollte 100% erreichen

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2009, 14:07     Titel:
  Antworten mit Zitat      
Moin,

hast recht, volle 100% Auslastung. Perfekt.

Vielen Dank nochmal
Andre
Private Nachricht senden Benutzer-Profile anzeigen
 
joh_bimaq
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2009, 17:21     Titel:
  Antworten mit Zitat      
Moin nochmal,

ich hab mich mal mit den anderen beiden optionen auseinandergesetzt.
Wenn ich nichts falsch verstanden habe, sind diese aber nicht für meine Problemstellung geeigent.

Die spmd (Single Program Multiple Data) Umgebung berechnet nur ein einziges Programm auf mehreren labs , in denen dann Parameter des Programms variiert werden können. Sie lässt mich aber nicht zwei verschiedene Programm ausführen, die dann kommunizieren können.
Die "labSend" und "labReceive" Befehle sind direkt für die Kommunikation zwischen den oben genannten Labs.

Hab ich das richtig verstanden, oder noch was übersehen?

mfg
Andre
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 18.379
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 17.11.2009, 18:40     Titel:
  Antworten mit Zitat      
Hallo,

innerhalb von spmd oder createParallelJob kannst du mit
Code:


dafür sorgen, dass in den beiden Labs tatsächlich unterschiedliche Sachen gemacht werden.

Z.B. können diese Zweige dann labSend oder labReceive zur Kommunikation enthalten.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.10.2010, 16:21     Titel:
  Antworten mit Zitat      
Moin,

ich bin mal wieder bei dem Thema Parallel Computing angelangt. Ich schaffe es einfach nicht, dass sich zwei parallel laufende Programme unterhalten können. Ich hab mir mal ein Testprogramm geschrieben:

Hauptdatei:
Code:

pjob = createParallelJob()

createTask(pjob, 'batch_func', 0,{})

set(pjob,'MinimumNumberOfWorkers',1)
set(pjob,'MaximumNumberOfWorkers',2)

submit(pjob)
disp('ready')
j = labReceive('any',33);
 


batch_func
Code:

try
labSend(data,2, 33)
catch ME
    save('ME','ME');
end
 


Die parallel ausgeführte datei soll eigentlich nur den labSend Befehl ausführen.
Das Problem ist, dass mir mit dem createTask Befehl gar keine 2 labs aufgemacht werden, so dass der LabSend Befehl nur die Fehlermeldung

??? Error using ==> labReceive
Attempt to receive would cause deadlock: numlabs == 1

auswirft. Hierbei ist es auch egal, ob ich in der batch_func "labSend(data,2, 33)" oder "labSend(data,1, 33)" schreibe.

Weiß einer, wie ich das Problem lösen kann?

Grüße
Andre
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 18.379
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 01.10.2010, 22:35     Titel:
  Antworten mit Zitat      
Hallo,

Es müssen (mindestens) zwei Worker sein. Wie soll sonst die Kommunikation stattfinden?
Code:
set(pjob,'MinimumNumberOfWorkers',2)


labSend und labReceive müssen auf derselben Ebene sein.

Beispiel:
Code:

function pjob = testpar
pjob = createParallelJob()

createTask(pjob, @batch_func, 1,{})

set(pjob,'MinimumNumberOfWorkers',2)
set(pjob,'MaximumNumberOfWorkers',2)

submit(pjob)


function data = batch_func()
switch labindex
case 1
data = 5;
labSend(data, 2)
case 2
data = labReceive(1);
end
 


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
VakiMoon
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 13.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2013, 17:20     Titel:
  Antworten mit Zitat      
Hey,

ich habe das gleiche Problem. geht das vielleicht aber auch ohne parallel computing toolbox?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 18.379
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 15.03.2013, 22:11     Titel:
  Antworten mit Zitat      
Hallo,

welches "Problem" hast du genau?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2016, 15:05     Titel: 2 funktionen parallel ohne toolbox möglich?
  Antworten mit Zitat      
Hallo,
ich glaube ich habe ein ähnliches Problem wie der TO.
ich steure einen Sphäre (kleiner Kugelroboter) mit Matlab und will seine position an ein anderes Tool senden Welchen Quellen in einer 3d Audio Umgebung an die position des Seheros setzt. Soweit so gut zu Erklärung. Das funktioniert auch alles. Jetzt zu meinem Problem: Wenn ich dem Roboter den Fahrbefehl gebe, geht Matlab für ca. 1 Sek in "busy" was jegliche andere Funktion blockiert, wenn ich das richtig verstanden habe. Somit verzögert sich der positionsbefehl immer um ca. eine Sekunde wo er fährt. Sprich fahren, Quelle an neue position, fahren, Quelle... usw.
Sprich es ist abgehackt und alles andere als Smooth.
Wie kann ich jetzt diese beiden Funktionen parallel laufen lassen, also ich lasse ihn permanent fahren(viele fahrbefehle die immer wieder busy hervorrufen) und das ich permanent die aktuelle position meines Robs Senden kann, ohne warten zu müssen bis der Fahrbefehl durch ist?!

Hoffe das ist irgendwie verständlich und mir kann jemand helfen.

LG
Daniel


hier ein kurzes Beispiel.

Code:
for a = 0:30:360
    s.RollWithOffset(0.2,a,'fast');
    Position;
   
end
 
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2018 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.