ich habe eine Frage bezüglich der "Distributed Arrays" unter MATLAB.
Meine Vorkenntnisse: MATLAB + GUI vorhanden, Parallel Computing: erste Berührung im Rahmen dieses Projekts.
Parallel Profil: Local 4 (bzw. 8 ) Prozessoren.
System: Ich habe ein (co)distrubted Array, in einer spmd Umgebung angelegt. Dieses Array hat eine var. Größe, soll später aber in der Größenordnung 1000x1000x1000 sein.
Problem: Es müssen diverse Berechnungen durchgeführt werden, wobei
es dazu kommt, dass benachbarte Zellen voneinander abgezogen werden.
z.B. k(i,l.m) - k(i+1,l,m)
MATLAB meckert und ich hoffe, dass ich dies richtig deute, nämlich wie folgt:
Irgendwann ist die nächste Zelle, auf einem anderen Worker und darauf kann nicht zugegriffen werden.
Frage: Wie geht man mit diesen Übergängen in MATLAB um? Ein Ansatz meinerseits wäre da, aber dieser ergibt leider kein geschlossenes Bild, weshalb ich auch hier Rat suche. Wofür ich mich schonmal bedanke.
solche Operationen sollten, sofern du statt dem "." ein "," setzt, kein Problem sein - immer vorausgesetzt, dass die Indizies im zulässigen Bereich bleiben.
Zitat:
MATLAB meckert und ich hoffe, dass ich dies richtig deute
Wenn du die Fehlermeldung postest, kann man dir eher sagen, ob du das richtig deutest.
Minibeispiel:
Code:
A = distributed(1:4) spmd, A(1:end-1) - A(2:end), end
Allerdings muss ich noch eine Frage stellen, da ich dies jetzt local ausprobiert habe. Bevor ich mein Programm aufs Cluster schiebe, will ich mir erst sicher sein, das alles funktioniert.
Gibt es bei der obigen Funktionsweise, zwischen lokalem Profil und Cluster unterschiede?
Danke fuer die Hilfe.
[EDITED, Jan, Bitte kein Top-Quoting der gesamten vorhergehenden Nachricht - Danke!]
grundsätzlich nicht, solange benötigte Daten und Code zur Verfügung stehen.
Der Datentransfer auf einen Cluster und zwischen Cluster-Rechnern kann auch länger dauern.
Ich weiß nicht, wie gut der Code hier deinen tatsächlichen Code repräsentiert.
Ein Problem ist hier, dass ja alle Worker denselben Code ausführen. Man könnte z.B. über labindex aufteilen. Im Code hier ließe sich auch durch Vektorisierung und Nutzung von diff einiges gewinnen.
Ich gehe davon aus, dass ich die Daten mit labSend und labReceive, zwischen den Workern hin und her schieben muss. Doch leider hab ich noch nicht verstanden, in welcher Form dies ablaufen muss.
Und wie an den Formeln erkennbar ist, gibt es auch Ueberscheidungen. D.h. ein Worker muss auf Daten zugreifen, welche ein anderer ebenfalls nutzt. Es entstehen also Randflaechen mit gemeinsamer Nutzung.
ich würde die Fehlermeldung an sich nur erwarten, wenn labSend und labReceive im Code verwendet werden.
Ist beta ein distributed array? Steht das ganze in einem spmd-Block?
Ein reproduzierbares Beispiel wäre hilfreich.
Davon abgesehen: wenn es ein distributed array ist, warum verteilst du händisch? Das ist ja eben der Reiz an distributed arrays, dass man das nicht tun muss.
Die Differenzenbildung sollte übrigens über diff möglich sein.
1) beta ist in diesem spmd Block keine dist. Array. Diese wurde in einem vorherigen spmd Block so berechnet.
2) Ich aufgrund deiner Frage, ueber das haendische Aufteilen, nochmal drueber nachgedacht. Ich hatte in einer frueheren Version, (mit for Schleifen) eine hohe Rechenzeit. Die for Schleifen sind weg gefallen, trotzdem dachte ich, dass
ich das haendisch Aufteilen muss, da sonst jeder Worker alles rechnet. Aber wie gesagt, wenn ich heute drueber nachdenke, macht das kein Sinn. Danke schonmal fuer den Hinweis.
3) diff steht auf meiner ToDo Liste. Danke
[EDITED, Jan, Bitte kein Top-Quoting der gesamten vorherigen Nachricht - Danke!]
da ich diese haendische Aufteilung nicht benoetige, entfaellt auch die Fehlermeldung.
Somit ist das Thema erledigt. Vielen Dank.
[EDITED, Jan, Bitte kein Top-Quoting der gesamten vorherigen Nachricht - Danke!]
Einstellungen und Berechtigungen
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.