Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Julia<br />
Programmieren<br />
tem erreichbar ist. Außerdem muss die<br />
PATH-Variable auf den entfernten Knoten<br />
das Verzeichnis des Julia-Binaries enthalten.<br />
Die Anzahl der Prozessoren hat sich<br />
jetzt auf vier erhöht.<br />
Um zu überprüfen, ob die entfernten<br />
Cores tatsächlich einbezogen werden,<br />
kann man eine einfache parallel Schleife<br />
<strong>mit</strong>hilfe des »@parallel«-Makros ausführen.<br />
julia> @parallel for i=1:4<br />
run(`hostname`)<br />
end<br />
julia>limulus<br />
limulus<br />
n2<br />
n0<br />
Julia verwendet hier alle verfügbaren<br />
Cores <strong>und</strong> die Hostnamen zeigen, dass<br />
es sich um zwei lokale <strong>und</strong> zwei entfernte<br />
Cores handelt (die lokale Maschine<br />
heißt limulus). Die Knoten werden in<br />
Ro<strong>und</strong>-Robin-Manier benutzt. Wenn sich<br />
Die Schleife braucht <strong>mit</strong> einem Core 11,23<br />
Sek<strong>und</strong>en. Lässt man nun genau die gleiche<br />
Schleife laufen, benutzt aber zwei<br />
lokale <strong>und</strong> 2 entfernte Cores, braucht sie<br />
5,67 Sek<strong>und</strong>en. Verwendet man schließder<br />
Endwert der Schleife erhöht, benutzt<br />
Julia die verfügbaren Cores reihum:<br />
julia> @parallel for i=1:8<br />
run(`hostname`)<br />
end<br />
julia>limulus<br />
limulus<br />
limulus<br />
limulus<br />
n2<br />
n0<br />
n2<br />
n0<br />
Ein Beispiel aus der Julia Dokumentation<br />
[9] ver<strong>mit</strong>telt ein besseres Gefühl<br />
für die Parallelverarbeitung. Zuerst sollte<br />
man sich ansehen, wie es <strong>mit</strong> einem Core<br />
funktioniert. Das folgende Programm<br />
generiert Zufallsbits (»0« oder »1«) <strong>und</strong><br />
01 julia> addprocs_local(1)<br />
summiert sie auf. Die »tic()«-funktion<br />
startet dabei einen Timer <strong>und</strong> »toc()« gibt<br />
das Ergebnis aus.<br />
julia>tic();<br />
nheads = @parallel (+) for i=1:1000000000<br />
randbit()end;<br />
s=toc();<br />
println("Number of Heads: U<br />
$nheads in $s seconds")<br />
elapsed time: 11.234276056289673 seconds<br />
Numberof Heads: U<br />
50003873 in 11.234276056289673 seconds<br />
Listing 2: »addprocs«<br />
02 ProcessGroup(1,{LocalProcess(), Worker("10.0.0.1",9009,4,IOStream(),IOStream(),{},<br />
03 {},2,false)},{Location("",0), Location("10.0.0.1",9009)},2,{(1,0)=>WorkItem(bottom_func,(),false,<br />
04 (addprocs_local(1),1),(),(),intset(1))})<br />
Immer aktuell informiert!<br />
Windows<br />
Phone User<br />
www.windows-phone-user.de/newsletter<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2012<br />
125