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

Parallele Abarbeitung von Funktionen

 

mathies
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 20.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2013, 11:27     Titel: Parallele Abarbeitung von Funktionen
  Antworten mit Zitat      
Hallo zusammen,

da ich nun schon eine Weile sämtliche Foren durchsuche und bisher nicht fündig geworden bin, schreibe ich doch mal meine Frage im Forum Smile

Ich möchte in einer Hauptfunktion parallel andere Funktionen ausführen. Als Pseudocode soll es so aussehen:

Code:

while(1)

    % Hauptfunktion ausführen
    [soundOut, endOfRound] = main(masterdaten);

    % Wenn Bedingung erfüllt Sound der Länge n ausgeben in einer
    % Funktion die parallel ausgeführt wird
    if(soundOut)    
        sound(n);
    end

    % Wenn Ende einer Runde erreicht, dann aufwendige Datenberechnung
    % parallel starten
    if(endOfRound)    
        [calcFinished, newMasterdaten] = reCalcData(masterdaten);
    end
   
    % Prüfung ob aufwendige Berechnung der Masterdaten beendet ist und
    % wenn dann die neuen Daten übernehmen
    if(calcFinished)    
        masterdaten = newMasterdaten;
    end

    % Trigger der Hauptfunktion 10ms
    pause(0.01);

end
 


Was ich suche ist zum einen die Möglichkeit eine Funktion parallel aufzurufen, die die Hauptschleife nicht blockiert (siehe Soundfunktion im Bsp.). Bisher habe ich da nur den batch Befehl gefunden, da dauert das erstellen ja aber schon länger als der Trigger der Hauptfunktion.
Des Weiteren suche ich die Möglichkeit eine Funktion parallel zu starten, die Daten berechnen zu lassen und wenn diese fertig ist, die Daten auch zu benutzen (im Beispiel durch die Funktion reCalcData dargestellt). Wiederum nicht blockierend. Somit muss sowohl die Funktion parallel laufen als auch eine Möglichkeit bestehen nicht blockierend den Status der Berechnung abzufragen.

Bin über jede Hilfe dankbar. Bisher haben mir die Parallel Processing Toolbox sowie andere Forenbeiträge nämlich nicht viel geholfen Sad

Matthias
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 20.08.2013, 18:55     Titel:
  Antworten mit Zitat      
glaube du musst einen job für die paralel prozessing toolbox erstellen. guck mal in der doc unter job oder createjob.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
aemon
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 26.10.17
Wohnort: Niedersachsen
Version: R2019a / R2021a
     Beitrag Verfasst am: 26.10.2017, 12:28     Titel:
  Antworten mit Zitat      
Hallo,

das Thema ist zwar schon etwas älter, aber ich stehe vor einem ähnlichen Problem:
In einer Schleife werden voneinander unabhängige Aufgaben abgearbeitet:
Code:
while(1)
Datenerzeugung

Verarbeitung Daten_methode_a
Verarbeitung Daten_methode_b
end


Das ganze bietet sich also an parallel abzuarbeiten.
Doch benötigt ein Schleifendurchlauf "nur" ungefähr eine Sekunde.
Das bedeutet mit batch auslagern funktioniert nicht, da es zu viel zeit benötgt.
Die verarbeitung der Daten ist auch derart unterschiedlich, dass sie nicht anderweitig zusammengefasst werden können.

Ist es irgendwie möglich solche Aufgaben auf die verschiedenen Kerne aufzuteilen und somit einen Zeitgewinn zu erzielen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

versuch's mal so:

Code:
while(1)
Datenerzeugung

spmd
Verarbeitung Daten_methode_a
Verarbeitung Daten_methode_b
end
end


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

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 26.10.17
Wohnort: Niedersachsen
Version: R2019a / R2021a
     Beitrag Verfasst am: 26.10.2017, 14:45     Titel:
  Antworten mit Zitat      
Danke für die Antwort Smile

So aufgeschrieben wurde zwar auf jedem Kern die Berechnung beider Funktionen durchgeführt, aber mit folgender Änderung klappt es nun tatsächlich parallel:

Code:

while(1)
Datenerzeugung
spmd (2) %Zwei Worker nutzen
   if labindex==1 %Worker 1
      Verarbeitung Daten_methode_a
   else %Worker 2
      Verarbeitung Daten_methode_b
   end
end
 


Dankesehr!

PS: Werde einen Teil wohl nun mit parfeval auf einen andern Worker auslagern.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.10.2017, 16:14     Titel:
  Antworten mit Zitat      
Hallo,

ja, das mit labindex hätte ich dazuschreiben sollen :)

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.