% 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);
results=dpeval(hosts,'slave',tasks);
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.
% 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