26.02.2014 Aufrufe

ADMIN Magazin Gestapelt - Schneller und sicherer mit RAID (Vorschau)

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!