Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 106

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>Beowulf HOWTO : Uno sguardo all'architettura</TITLE>
 <LINK HREF="Beowulf-HOWTO-4.html" REL=next>
 <LINK HREF="Beowulf-HOWTO-2.html" REL=previous>
 <LINK HREF="Beowulf-HOWTO.html#toc3" REL=contents>
</HEAD>
<BODY>
<A HREF="Beowulf-HOWTO-4.html">Avanti</A>
<A HREF="Beowulf-HOWTO-2.html">Indietro</A>
<A HREF="Beowulf-HOWTO.html#toc3">Indice</A>
<HR>
<H2><A NAME="s3">3. Uno sguardo all'architettura</A></H2>

<P>
<P>
<H2><A NAME="ss3.1">3.1 A cosa assomiglia?</A>
</H2>

<P>
<P>Io credo che il miglior modo per descrivere l'architettura del
supercomputer Beowulf &egrave; quello di usare un esempio molto simile al Beowulf reale
ma molto familiare a molti amministratori di sistema. L'esempio pi&ugrave;
vicino ad una macchina Beowulf &egrave; un laboratorio Unix con un server e un certo
numero di client. Per essere ancora pi&ugrave; precisi user&ograve; come esempio il
laboratorio di computer DEC Alpha per laureandi della facolt&agrave; di Scienze
dell'USQ. Il computer server si chiama <I>beldin</I> e le macchine
client sono chiamate <I>scilab01</I>, <I>scilab02</I>,
<I>scilab03</I>, fino a <I>scilab20</I>. Tutti i client hanno
installata una copia locale del sistema operativo Digital Unix 4.0 ma
condividono la directory degli utenti <CODE>/home</CODE> e la directory
<CODE>/usr/local</CODE> dal server via NFS (Network File System). Ogni
client ha una voce per il server e una per ognuno degli altri client nel suo
file <CODE>/etc/hosts.equiv</CODE>, cos&igrave; che ogni client pu&ograve; eseguire una
shell remota (rsh) in tutti gli altri. La macchina server &egrave; anche server
NIS per tutto il laboratorio, cos&igrave; che tutti gli account sono comuni in 
tutte le macchine. Una persona pu&ograve; sedersi davanti alla console di 
<I>scilab02</I> ed avere la stessa configurazione come se si fosse 
fatto il login nel server o nel client <I>scilab15</I>. La ragione per la 
quale tutti i client hanno lo stesso look and feel &egrave; che il sistema 
operativo &egrave; installato e configurato allo stesso modo su tutte le 
macchine e che sia <CODE>/home</CODE> che <CODE>/usr/local</CODE> sono 
fisicamente sul server e condivise da tutti i client via NFS. Per 
maggiori informazioni a proposito di NIS e NFS guardate i relativi HOWTO 
a 
<A HREF="http://sunsite.unc.edu/LDP/HOWTO/NIS-HOWTO.html">NIS</A> e 
<A HREF="http://sunsite.unc.edu/LDP/HOWTO/NFS-HOWTO.html">NFS</A>.
<P>
<P>
<H2><A NAME="ss3.2">3.2 Come usare gli altri nodi?</A>
</H2>

<P>
<P>Ora che abbiamo un'idea circa l'architettura del sistema, diamo 
un'occhiata a come possiamo utilizzare i cicli di CPU disponibili nei 
computer del laboratorio. Ogni persona pu&ograve; fare il login in ogni macchina, e 
far girare un programma nella sua directory home, ma pu&ograve; anche 
distribuire il lavoro su macchine differenti semplicemente eseguendo 
shell remote. Per esempio, mettiamo che vogliamo calcolare la somma 
delle radici quadrate di tutti gli interi compresi fra 1 e 10. 
Scriviamo un programma chiamandolo <CODE>sigmassqrt</CODE> (vedi 
<A HREF="Beowulf-HOWTO-6.html#sigmasqrt">Codice sorgente</A>) che fa proprio questo. Per calcolare 
la somma delle radici quadrate dei numeri da 1 a 10 noi eseguiamo:
<P>
<PRE>
[jacek@beldin sigmasqrt]$ time ./sigmasqrt 1 10 22.468278

real    0m0.029s
user    0m0.001s
sys     0m0.024s
</PRE>
<P>Il comando <CODE>time</CODE> ci permette di controllare il tempo trascorso 
per completare l'altro comando. Come possiamo vedere, questo esempio ha 
necessitato solo una frazione di secondo (0,029 sec), ma cosa 
succederebbe se io volessi conoscere la somma delle radici quadrate 
degli interi compresi fra 1 e 1 000 000 000 (un miliardo)? Riproviamo e 
ricontrolliamo il tempo necessario.
<P>
<PRE>
[jacek@beldin sigmasqrt]$ time ./sigmasqrt 1 1000000000
21081851083600.559000

real    16m45.937s
user    16m43.527s
sys     0m0.108s
</PRE>
<P>Questa volta il tempo di esecuzione &egrave; decisamente maggiore. L'ovvia 
domanda che sorge &egrave; cosa possiamo fare per abbreviare il tempo di 
esecuzione di questo programma? Come possiamo cambiare il modo in cui 
si esegue questo programma per ridurne il tempo di esecuzione? L'ovvia 
risposta &egrave; quella di dividere il lavoro in una serie di sotto-compiti e
di farli girare in parallelo su tutti i computer. Noi possiamo dividere 
il calcolo di una grossa addizione in 20 parti, calcolare una serie di 
radici quadrate e farli girare su ogni nodo. Quando tutti i nodi 
finiscono il calcolo e restituiscono i loro risultati, i 20 numeri 
possono essere sommati per ottenere il risultato finale. Prima di far 
girare questo programma noi faremo una named pipe che verr&agrave; usata da
tutti i processi per scrivere il loro risultato.
<P>
<PRE>
[jacek@beldin sigmasqrt]$ mkfifo output
[jacek@beldin sigmasqrt]$ ./prun.sh &amp; time cat output | ./sum
[1] 5085
21081851083600.941000
[1]+  Done                    ./prun.sh

real    0m58.539s
user    0m0.061s
sys     0m0.206s
</PRE>
<P>
<P>Il tempo che otteniamo &egrave; di circa 58,5 secondi. Questo &egrave; il tempo 
trascorso dall'inizio del programma fino alla restituzione all'interno 
della pipe dei risultati di tutti i nodi. Il tempo cos&igrave; calcolato non 
include la somma finale dei venti numeri, ma questo tempo &egrave; molto breve 
e pu&ograve; essere trascurato. Possiamo cos&igrave; vedere che c'&egrave; un notevole 
miglioramento eseguendo questo programma in parallelo. In effetti il 
programma parallelo ha girato 17 volte pi&ugrave; velocemente, che &egrave; un buon 
risultato avendo incrementato di 20 volte il numero di CPU coinvolte. 
Lo scopo di questo esempio &egrave; quello di far vedere il metodo pi&ugrave; semplice 
di realizzare codice parallelo concorrente. In pratica per&ograve; esempi cos&igrave; 
semplici sono rari ma vengono usate altre tecniche (le API PVM e PMI) 
per ottenere il parallelismo.
<P>
<H2><A NAME="ss3.3">3.3 In cosa Beowulf &egrave; differente da un COW ?</A>
</H2>

<P>
<P>Il laboratorio di computer descritto sopra &egrave; un perfetto esempio di un 
Cluster di Workstation (COW). E allora cosa ha tanto di speciale
Beowulf e in cosa &egrave; diverso da un COW? La verit&agrave; &egrave; che non c'&egrave; una grande 
differenza, ma Beowulf ha alcune caratteristiche peculiari. Innanzitutto
in molti casi i nodi client di un cluster Beowulf non hanno tastiere,
mouse, schede video n&eacute; monitor. Tutti gli accessi ai nodi client sono 
realizzati in remoto dal nodo server, nodi che fungono solo da console 
o da un terminale seriale. Poich&eacute; non c'&egrave; bisogno per i nodi client di 
accedere a computer al di fuori del cluster, n&eacute; per computer esterni al 
cluster di accedere direttamente ai nc, &egrave; pratica comune dotare i nc di 
IP privati come gli indirizzi compresi in 10.0.0.0/8 o 192.168.0.0/16
(vedi RFC 1918 
<A HREF="http://www.alternic.net/rfcs/1900/rfc1918.txt.html">http://www.alternic.net/rfcs/1900/rfc1918.txt.html</A>). Normalmente 
l'unica macchina connessa all'esterno con una seconda scheda di rete &egrave; 
il nodo server. Il modo pi&ugrave; comune per usare un sistema di questo tipo &egrave;
di usare la console del ns, oppure di entrare in telnet o shell remota
dal computer personale. Una volta sul ns, gli utenti possono modificare
e compilare il loro codice e anche suddividere i loro programmi su
tutti i nodi del cluster. In molti casi i COW sono usati per calcoli
paralleli la notte e durante i fine settimana quando gli utenti non
usano effettivamente i computer per i compiti di tutti i giorni,
utilizzando cos&igrave; cicli idle di CPU. Beowulf d'altra parte &egrave; una macchina
dedicata normalmente solo al calcolo parallelo e ottimizzato per questo
scopo. Beowulf inoltre ha un miglior rapporto fra prezzo e prestazioni
poich&eacute; &egrave; realizzato da componenti di facile reperibilit&agrave; e usa normalmente
software gratuito. Beowulf ha inoltre un'immagine pi&ugrave; da sistema 
singolo cosa che aiuta gli utenti a vedere un cluster Beowulf come una 
singola workstation
<P>
<HR>
<A HREF="Beowulf-HOWTO-4.html">Avanti</A>
<A HREF="Beowulf-HOWTO-2.html">Indietro</A>
<A HREF="Beowulf-HOWTO.html#toc3">Indice</A>
</BODY>
</HTML>