- Error Breakpoints :: Editing and Debugging M-Files (Desktop Tools and Development Environment)
Matlab: how to enter debug mode in case of a warning.
(matlab warning debug mathworks ) - The Garfield Vault Strip
Heel tactvol, Jon.
(garfield comics ) - woord van het jaar2007
Doe mij maar de formatiemoeheid.
(woordvanhetjaar nederlands taal )
Tag Archive for 'Matlab'
Zoals ik al een paar posts geleden al zei, ben ik dus wat met distributed computing aan het prutsen hier op het werk. Dat houdt in dat je het werk dat je programma moet uitvoeren, gaat verdelen over meerdere processoren. Een klein voorbeeldje hiervan is dat je een for loop verdeeld over een aantal processoren in plaats van dat je die sequentiëel uitvoert op 1 processor. Ik gebruik het al een tijdje eigenlijk, maar op een vrij naïeve manier. Ik test voor mijn doctoraatsonderzoek statistische algoritmes op kunstmatig gegenereerde datasets. Die datasets bezitten verschillende karakteristieken die allen gevariëerd worden aan de hand van een for loop. Zo zit ik meestal met een zeven tot tien geneste for-loops en dat vraagt allemaal tijd, gigantisch veel tijd. Verdelen over meerder processoren is de boodschap dus. In eerste instantie verdeelde ik de langste for loop over aparte processoren wat al 10 keer sneller ging. Het kan echter ingenieuzer en Matlab heeft er een toolbox voor. Die code postte ik een aantal dagen geleden, maar die ging te graag. Het probleem is dat je Matlab moet opstarten op een login-processor van de processor-cluster om dan het werk naar andere processors te sturen. Op die login-processor krijg je echter maar een half uur CPU tijd en dat vind Matlab niet genoeg (Matlab is echt traag). Bummer. Alles zelf geschreven dan maar. In de binnenste for loop wordt nu telkens een bestand geschreven met daarin alle opdrachten (plus resultaten wegschrijven) die moeten uitgevoerd worden en dat bestand wordt dan in een wachtrij gestoken die het dan uitvoert als er een processor vrij is (yeah, er zit veel volk op onze cluster). Enfin zo heb ik dus 11 CPU dagen (ja, u leest het goed) op 21 uur en een half tijd afgewerkt. Iets meer dan tien keer sneller, maar dat hangt af van hoeveel processors er vrij zijn natuurlijk. Voila, bij deze weet u wat ik in de dag zo allemaal uitspook
Vanmiddag een zalig stukje code geschreven:
% Create a scheduler
sched = findResource('scheduler', 'type', 'generic');
set(sched,'Configuration','PBS')
% specify the walltime
set (sched, 'SubmitFcn', {@pbsSubmitFcn, '00:30:00'})
% Create a Job
j=createJob(sched);
% Create Tasks
for ii=1:5000
createTask(j, @function, 1, {ii,ii});
end
% Submit the jobs
submit(j)
% Wait for PBS-jobs to finish
j.waitForState
% Get the results
res = j.getAllOutputArguments
Niet de code zelf is geniaal, maar wat het doet. Parallel 5000 functies laten lopen op evenveel processors (of minder als er minder processors vrij zijn). We hebben hier al een tijd een computer cluster op de KULeuven en die is zoooo handig.
Technorati Tags: matlab , distributed computing , cluster
Ok, now that I know the solution, this sounds really silly. I needed to create an array (of length N) with all entries set to logical true. A quick look in the help files suggested me to use the command ones (produces an array of 1’s) and to specify the class: array = ones(1,N,’logical’). However, Matlab refused to execute that. Looking again in the help, I found the true command which does exactly what I need: creating an array full of true’s. Simple, ain’t it?
array = true(1,N)
![]()
Oh jawel! Gestuurd van hogerhand, nedergedaald in mijn nederig bureau’tje, stevig genesteld in de registries van mijn pentium, pronkend op mijn desktop: de nieuwste Matlab release, R2006a! De opvolger van release 14 service pack 3 is het rekenbeest der matrixrekenaars, bezit het toegankelijkste programmeer taaltje en bijhorend editor’tje en verlegd de grensen van imageprocessing. Fijne tijden liggen in het verschiet!