Codefragmente zum at-Beitrag "Parallelverarbeitung mit Matlab - DC- und DP-Toolbox im Vergleich"

Die nachfolgenden Codefragmente sollen die Strukturen der parallelen Lösungen illustrieren und beschränken sich ausschließlich auf Programmzeilen, die mit der Parallelverarbeitung in unmittelbarem Zusammenhang stehen.

Lösung 1: DP-Tbx., nachrichtenorientiert, stat. Lastvert.

% Master-Programm:
%-----------------
% Slave-Prozesse starten
slaves=dpspawn(hosts,'slave');
% Auftraege verteilen
dpscatter(slaves,tasks);
% Ergebnisse empfangen
results=dpgather(slaves);
% Slave-Programm:
%----------------
% Auftraege empfangen
subtasks=dprecv();
...
% Ergebnisse senden
dpsend(subresults);

Lösung 2: DP-Tbx., synchron VRPC, dyn. Lastvert.

results=dpeval(hosts,'slave',tasks);

Lösung 3: DC-Tbx., synchron VRPC, dyn. Lastvert.

results=dfeval('slave',tasks);
Die bisherigen Codefragmente zeigen deutlich, dass sich der im Beitrag diskutierte höhere Parallelisierungsaufwand keineswegs in der Anzahl der Programmzeilen, die in unmittelbarem Zusammenhang mit der Parallelverarbeitung stehen, widerspiegelt. In allen drei vorangegangenen Lösungen wurden funktionsorientierte Schnittstellen der DP- bzw. DC-Toolbox genutzt. Die DC-Toolbox stellt darüberhinaus auch eine objektorientierte Schnittstelle zur Verfügung, deren Verwendung das nachfolgende Codefragment präsentiert.

Lösung 4: DC-Tbx., asynchron VRPC, dyn. Lastvert.

% Jobmanager finden
jm=findResource('jobmanager');
% Job erzeugen
job=jm.createJob;
% Tasks erzeugen
for i=1:length(tasks)
  job.CreateTask('slave',1,tasks{i});
end
% Job absenden
job.submit;
% Ergebnisse auslesen
results=job.getAllOutputArguments;
Das Codefragment zeigt, dass der Codierungsaufwand auf Basis der objektorientierten Schnittstelle gegenüber der funktionsorientierten Schnittstelle wesentlich höher ist. Über die objektorientierte Schnittstelle der DC-Toolbox stehen dem Anwender umfangreiche Steuerungsmöglichkeiten zur Verfügung. Ein direkter Nutzen im Rahmen des Testproblems ergibt sich daraus jedoch nicht.

21. März 2006, R. Fink, S. Pawletta