CALCOLO PARALLELO ARCHITETTURE PARALLELLE

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "CALCOLO PARALLELO ARCHITETTURE PARALLELLE"

Transcript

1 CALCOLO PARALLELO ARCHITETTURE PARALLELLE La necessità di computers ad alte prestazioni Molte delle applicazioni oggi così come le previsioni del tempo, simulazioni numeriche in fluidodinamica ed aereodinamica, intelligenza artificiale etc sono problemi molto complessi che richiedono una mole notevole di calcoli e quindi la loro risoluzione richiede una potenza di calcolo veramente molto grande per avere delle risposte in tempi ragionevoli. ESEMPIO: Per calcolare la previsione del tempo a 24 ore per una zona di estensione pari all Italia si richiedono circa 10^12 operazioni. Questo implica un tempo di elaborazione di circa 2.5 ore su un Cray-1 (capace di eseguire 10^8 operazioni al secondo). Si capisce pertanto che se si vuole una previsione del tempo per un tempo più lungo (ad esempio una settimana) o per una zona molto più estesa c è bisogno di una potenza di calcolo molto più elevata. E ovvio che un modo per ottenere una potenza di calcolo maggiore è quella di costruire calcolatori con componenti elettroniche molto più veloci. Ricordiamo che esiste un limite superiore che è la velocità della luce oltre la quale non è possibile andare. ESEMPIO: La velocità della luce è circa 3x10^8 m/sec. Consideriamo due componenti elettronici distanti 0.5 mm, capaci di eseguire 10^12 operazioni al secondo. Come si può osservare diventa maggiore il tempo perché il segnale si propaghi tra i due componenti (t := 1.7x10^(-12) ) che il tempo per eseguire una operazione ( t := 1x10^(-12) ). Si può concludere pertanto che produrre calcolatori più veloci è praticamente impossibile. Appare dunque evidente che l unico modo per risolvere problemi di grosse dimensioni è quello di utilizzare il parallelismo. L idea fondamentale è che se alcune operazioni possono essere fatte simultaneamente allora il tempo totale per risolvere il problema può essere ridotto. 1

2 Intuitivamente la versione parallela sembrerebbe avere la potenzialità di essere tre volte più veloce di quella sequenziale. A tale proposito a seguire vogliamo fornire una semplice classificazione delle possibili architetture parallele attualmente esistenti. Classificazione delle architetture parallele Ogni computer sia esso sequenziale sia esso parallelo opera eseguendo istruzioni su dati: Un flusso di istruzioni (l algoritmo) dice al computer che cosa fare Un flusso di dati (l input) è manipolato da tali istruzioni A seconda se vi sono uno o più di questi flussi si hanno quattro possibili classi di computers. (Classificazione dovuta a Flynn 1966 ) Vi è una quinta classe aggiuntiva o pseudo macchina dalla sigla SPMD (Single Program Multiple Data). SISD Sigle Instruction (Stream) Single Data (Stream) MISD Multiple Instruction (Stream) Single Data (Stream) SIMD Single Instruction (Stream) Multiple Data (Stream) MIMD Multiple Instruction (Strem) Multiple Data (Stream) 2

3 Architetture SISD Questo è lo standard calcolatore sequenziale. Un singolo processore riceve il flusso delle istruzioni le quali operano su un unico flusso di dati. ESEMPIO: Per calcolare la somma di N numeri il calcolatore necessita di accedere in memoria N volte consecutive e riceve un numero alla volta, inoltre sono eseguite in sequenza N-1 somme. Quindi il calcolo richiede O(N) operazioni. Algoritmi per architetture SISD non contengono alcun parallelismo e vi è un solo processore. Architetture MISD N processori, ognuno con la propria unità di controllo, condividono una memoria comune. Vi sono N flussi di istruzioni (algoritmi/programmi) ed un solo flusso (insieme) di dati. Il parallelismo è raggiunto in quanto si richiede a differenti processori di fare cose differenti allo stesso tempo sullo stesso dato. Architetture MISD sono utili in calcoli in cui lo stesso input è soggetto a differenti operazioni. 3

4 ESEMPIO: Vedere se un numero Z è primo con l algoritmo di tentare tutti i possibili divisori. Se supponiamo che il numero N di processori è dato da N=Z- 2, ogni processore prende Z come input e vede se è divisibile per il divisore che gli è stato associato. Pertanto in un solo passo è possibile stabilire se Z è primo. Più realisticamente se N<Z-2 allora un sottoinsieme di divisori deve essere assegnato a ciascun processore. Per molte applicazioni architetture MISD sono poco maneggevoli da usare, pertanto non esiste alcuna macchina commerciale che adotti questa filosofia. Architetture SIMD N processori identici operano sotto il controllo di uno stesso insieme di istruzioni fornite da una stessa unità di controllo centrale. Vi sono N insiemi di dati, uno per ogni processore, quindi dati differenti possono essere manipolati dai vari processori. I processori operano in modo sincrono ed un clock globale è utilizzato per garantire operazioni bloccate ad ogni passo. Ad ogni passo (i. e. ad ogni global-clock-tick) tutti i processori eseguono la stessa istruzione, ciascuno su un insieme di dati differente. [ Architetture SPMD operano in modo asincrono facendo girare lo stesso programma su dati differenti utilizzando un architettura di tipo MIMD ]. Processori vettoriali come l ICL DAP (Distributed Array Processor), il Cray 1 e 2, Cyber 205, NEC SX-2, Jujitsu VP, Hitachi S820, Cray C90, Convex C-2 etc cadono in questa categoria. 4

5 Macchine tipo SIMD sono particolarmente utili nel risolvere problemi che hanno una struttura regolare. In particolare quando la stessa istruzione può essere applicata ad un sotto-insieme di dati. ESEMPIO: Sommare due matrici C=A+B. Supponiamo di avere due matrici A e B di ordine due e 4 processori, allora in un solo passo: P 1 : C11= A11 + B11 P 2 : C12 = A12 + B12 P 3 : C21= A21 + B21 P 4 : C22= A22 + B22 La stessa operazione è fatta dai 4 processori. (Sommare due numeri ) e tutti i processori eseguono l istruzione simultaneamente. In tal caso la procedura richiede un solo passo contro i 4 di una macchina sequenziale. Un istruzione può essere una semplice istruzione (sommare due numeri) o un istruzione complessa (fondere una lista di numeri). Similmente il dato può essere semplice (un numero) o complesso (più numeri). Alcune volte può essere necessario che solo un sottoinsieme di processori eseguano un istruzione, cioè, solo alcuni dati debbono essere manipolati utilizzando una stessa istruzione. Questa informazione può essere passata nell istruzione stessa indicando se: Il processore è attivo (esegue l istruzione) Il processore è inattivo (aspetta la successiva istruzione) In molti problemi risolti con architetture SIMD (anche MIMD) è utile che i processori possano comunicare l uno con l altro per scambiarsi dati e risultati. Questo può essere fatto in due modi: Utilizzando una memoria condivisa e variabili condivise (Shared Memory) O una forma di message-passing nel caso di memoria distribuita (Interconnection Network) 5

6 Architetture MIMD Questo tipo di architettura è il caso più generale ed il più potente nella classificazione fino ad ora fatta. Ogni processore opera su di un insieme di dati sotto il controllo di un flusso di istruzioni fornite dalla propria unità di controllo. Ogni processore è quindi capace di eseguire il proprio programma su dati differenti. Questo vuol dire che i processori possono operare in modo asincrono, cioè possono fare cose differenti su dati differenti allo stesso tempo. Come nel caso di architetture SIMD la comunicazione dei dati o dei risultati parziali o finali può essere fatta o utilizzando una memoria condivisa o una rete di connessione. Computers MIMD con memoria condivisa sono noti come multiprocessori. Esempi sono ENCORE, MULTIMAX, SEQUENT&BALANCE. Computers MIMD con rete di interconnessione sono noti come multicomputers. Esempi sono INTEL ipsc2, ncube, IBM RS6000 cluster, Sequent. Multicomputers sono spesso riferiti come sistemi distribuiti, ed è non corretto, infatti, con sistemi distribuiti ci si riferisce ad una rete di workstation o di personal computers. In tali configurazioni anche se il numero dei processori può essere abbastanza grande la comunicazione è generalmente troppo lenta. 6

7 SPMD Single Program Multiple Data Una architettura di tipo MIMD è detta che lavora in modo SPMD se lo stesso programma viene eseguito su ciascun processore. SPMD non è una classificazione hardware ma è un paradigma software per architetture MIMD. Ciascun processore esegue lo stesso programma su dati differenti e pertanto vi possono essere condizioni di disvio che portano i singoli processori ad eseguire istruzioni differenti, portando così ad un parallelismo asincrono. I processori non fanno le stesse cose in passi bloccati così come in una macchina di tipo SIMD. ESEMPIO: Supponiamo che la variabile x sia 0 sul processore 1 ed 1 sul processore 2. Prendiamo il seguente flusso di istruzioni: IF (X = =0) THEN <Esegui S1 > ELSE < Esegui S2 > ENDIF Come si può osservare il processore 1 esegue S1 nello stesso momento in cui il processore 2 esegue S2. Questo non può accadere in una macchina SIMD. SHARED MEMORY e INTERCONNECTION NETWORK Quando vi sono N processori ciascuno con il proprio flusso di dati (i.e. SIMD e MIMD) è necessario che questi comunichino tra di loro per passarsi i dati ed i risultati, questo può essere fatto principalmente in due differenti modi: Utilizzando una memoria condivisa e variabili condivise (Shared memory and shared variables) Utilizzando una rete di connessione ed il passaggio delle informazioni (Interconnection network and message passing) 7

8 Un processore può comunicare con un altro processore scrivendo sulla memoria globale dove il secondo processore può leggere. La memoria condivisa risolve il problema della comunicazione tra i singoli processori ma introduce il problema del simultaneo accesso alla stessa locazione di memoria. 8

9 Dipendendo da come i processori accedono alla memoria il risultato può essere o 1 o 2 o Se P1 esegue e completa x=x+1 prima che P2 legga il valore di x dalla memoria o viceversa il risultato è x=3 2. Se P1 e P2 leggono il valore di x simultaneamente prima che questo venga aggiornato da uno dei due processori il risultato può essere o 1 o 2 dipendendo da chi scrive per ultimo nella locazione di memoria condivisa riservata alla variabile condivisa x. Anche se entrambi i processori scrivessero contemporaneamente il valore di x sarebbe indeterminato in quanto nella locazione di memoria riservata ad x può essere memorizzato un solo valore. Questo problema di indeterminazione può essere risolto sincronizzando l utilizzo dei dati condivisi, cioè, se x=x+1 e x=x+2 fossero mutuamente esclusivi, ( i. e. non eseguibili allo stesso tempo) allora il risultato sarebbe sempre 3. In tal caso ogni processore ha la propria memoria locale e non vi è nessuna memoria globale condivisa. Pertanto i processori debbono essere connessi in qualche modo per far si che possano comunicare tra di loro. 9

10 Se un processore richiede l utilizzo di dati contenuti nella memoria di un altro processore allora questi dati debbono essere esplicitamente passati utilizzando delle opportune istruzioni fornite per la comunicazione (ad esempio send e receive) P1 P2 (receive x da P2 ) (send x a P1 ) Il valore di x è esplicitamente passato da P2 a P1. Questo è noto come message passing. Le principali reti di connessione Completamente connessi (all to all) : Questa è la più potente (topologia) rete di connessione, ogni nodo è direttamente connesso a tutti gli altri nodi. Se abbiamo N processori, ogni nodo ha N-1 connessioni, dando un totale di N(N- 1)/2 connessioni per tutta la rete. Sebbene sia la migliore rete in quanto ha il massimo numero di connessioni per nodo essa può essere implementata solo per piccoli N. Griglia k-dimensionale (Mesh) : In una rete del genere i nodi sono disposti su una griglia k-dimensionale di ampiezza w, dando un totale di nodi pari a w^k. (k=1 lineare, k=2 matrice). Le comunicazioni sono fatte solo con i nodi immediatamente vicini. (Ogni nodo interno è connesso a 2k altri nodi) Anello (Ring) : Un anello è un array lineare con i nodi finali connessi tra di loro. E equivalente ad una mesh 1D con la connessione dei nodi finali. Ipercubo (Binary n-cube) : Una rete di tipo ipercubo consiste di N=2^k nodi disposti secondo un ipercubo k-dimensionale. I nodi sono numerati da 0 a 2^k-1 e due nodi sono connessi se la loro rappresentazione binaria differisce per esattamente un bit. Reti di Workstations (o PC) Workstations o PC sono collegati in rete (ad esempio Ethernet o fibra ottica) Essi cooperano insieme per risolvere i problemi agendo come una architettura di tipo MIMD Le informazioni sono scambiate tramite messaggi Linguaggi come lo C ed il FORTRAN possono usare librerie libere di scambio di messaggi (PVM, MPI) per spedire e ricevere informazioni 1. PVM Parallel Virtual Machine 2. MPI Message Passing Interface Linguaggi come HPF e F90 sono invece software di tipo commerciale 10

11 MPP e SMP I due maggiori paradigmi di architetture parallele sono: MPP Massively Parallel Processing (Elaboratori massicciamente paralleli) Molti processori, memoria distribuita, rete di comunicazione SMP Symmetric Multi-Processing (Multielaborazione simmetrica) Pochi processori, memoria condivisa, comunicazione tramite memoria condivisa MPP sono più difficili da programmare in quanto le applicazioni devono essere spezzate in pezzi che possano comunicare efficientemente su una rete (abbastanza lenta) che può essere formata anche da migliaia di processori. SMP sono più facili da programmare in quanto il dato è tenuto in memoria condivisa ed i processori possono comunicare ( in modo abbastanza veloce) per mezzo di tale memoria condivisa. Comunque la memoria condivisa crea ostacoli e non si adatta bene ad un grande numero di processori. PROGRAMMAZIONE PARALLELA Incominciamo dicendo che non tutti i problemi sono parallelizzabili. Un esempio è il calcolo della classica successione di Fibonacci con l utilizzo della formula F(0)=1 F(1)=1 F(k+2)=F(k+1)+F(k), k=0,1,2, Il risultato ad ogni passo richiede il risultato dai due passi precedenti e pertanto questi tre termini non possono essere calcolati simultaneamente. Il problema è detto intrinsecamente non parallelizzabile. Supponendo di avere un problema parallelizzabile vi sono tre categorie generali: 1. Perfetto parallelismo (Perfect parallelism) 2. Parallelismo dei dati ( Data parallelism) 3. Parallelismo funzionale ( Functional parallelism) Perfect Parallelism anche noto come parallelismo imbarazzante in quanto lo speedup che si può ottenere può essere veramente molto buono. Le applicazioni possono essere suddivise in insiemi di processi che richiedono pochissime comunicazioni o addirittura nessuna. Un esempio può essere il calcolo numerico dell integrale di una funzione di una o più variabili usando ad esempio la formula di quadratura dei rettangoli. E il più semplice e miglior genere di parallelismo che si possa avere. 11

12 Data Parallelism anche noto come domain decomposition (scomposizione del dominio, ovvero dei dati). Alcune operazioni sono effettuate su molti dati simultaneamente. Differenti aree del dominio sono mappate su differenti processori. Ad esempio una matrice distribuita su differenti processori, oppure utilizzare più processori per cercare una specifica richiesta su differenti parti di un archivio, o anche discretizzazioni con metodi finiti (elementi finiti) di problemi retti da PDE. Functional Parallelism spesso chiamato parallelismo gestito. Molte operazioni possono essere fatte simultaneamente. Guardare il problema come un insieme di operazioni separate ed assegnare diversi processori per ogni operazione. Metodi di programmazione parallela Tre sono i principali modi per poter costruire un codice parallelo. 1. Utilizzando linguaggi paralleli I dati sono distribuiti sui processori come vettori Interi arrays vengono manipolati A(1:100)=B(1:100)+C(1:100) Il compilatore trasforma il tutto in istruzioni sui processori e sui dati Esempi sono F90, HPF, HPC etc 2. Utilizzando librerie per il passaggio delle informazioni Il programmatore è responsabile per la distribuzione dei dati, la sincronizzazione delle operazioni e la spedizione e ricezione delle informazioni ( utilizzando qualche libreria di message passing) Le librerie più comuni sono PVM (Parallel Virtual Machines) ed MPI (Mesate Passing Interface) 3. Utilizzo di compilatori paralleli I compilatori analizzano il programma e lo parallelizzano (generalmente i loops) Molto facile da usare, infatti non richiedono nozioni di programmazione parallela, ma molto limitati nelle loro prestazioni (speedup ed efficienza) 12

13 Message Passing Libraries Daremo uno sguardo particolare a tale metodo di programmazione parallela in quanto costituirà poi il metodo che utilizzeremo nelle nostre applicazioni. Riassumeremo in punti schematici le caratteristiche principali di tale metodo, in particolare: Sulla maggior parte delle architetture MIMD con memoria distribuita l informazione, relativa a qualunque cosa si voglia fare, deve essere necessariamente scambiata tra i processori. La distribuzione dei dati e le comunicazioni sono esplicitamente gestite dal programmatore, con l utilizzo di subroutine che permettono la spedizione delle informazioni (SEND) e la ricezione delle stesse (RECEIVE). I dati non locali sono passati tra i processori per mezzo di messaggi. Sono disponibili diverse piattaforme indipendenti e facili da usare. (PVM, P4, MPI etc) Metodo di programmazione molto flessibile, tutti i controlli (ed il lavoro più duro e noioso) sono nelle mani del programmatore. Il codice può essere ben regolato specialmente se i dati sono ben distribuiti. Il programmatore scrive il codice tramite uno linguaggio seriale standard (C o Fortran) + chiamate a subroutines della libreria per lo scambio dei messaggi. Il codice del programmatore deve poi essere lincato con la libreria dell MPI. Programmi che utilizzano librerie di scambio di messaggi tra i processori possono sfruttare ogni forma di parallelismo (Perfect, Data, Functional). Le tecniche di programmazione più comuni sono: SPMD (Single Program Multiple Data) Data decomposition Speedup ed Efficienza Un algoritmo parallelo è un algoritmo che permette l esecuzione di un programma su più di un processore simultaneamente. Vi sono due importanti misure per la stima della qualità di un algoritmo parallelo e cioè lo speedup e l efficienza. Se Ts è il tempo impiegato per far girare il più veloce algoritmo seriale su un processore e Tp il tempo impiegato per risolvere lo stesso problema su N processori definiamo come speedup: 13

14 Speedup=Su=Ts/Tp Mentre l efficienza di un algoritmo parallelo è data da: Efficienza=Ef=Ts/(N*Tp) Esempio: Se un algoritmo seriale è risolto in 8 sec (Ts=8) mentre il parallelo in 2 sec (Tp=2) su 5 processori allora: Su=Ts/Tp=(8 sec)/(2 sec) = 4 ; Ef = Su/N = 4/5 = 0.8 = 80% L ideale ovviamente sarebbe quello di produrre uno speedup lineare (cioè avere uno speedup pari ad N con N processori) ed un efficienza pari ad 1 (100%). Nella realtà comunque non si giunge mai ad uno speedup lineare o ad un efficienza pari ad uno. Il tutto ovviamente dipende da quanto il problema è parallelizzabile e quanto tempo è speso nelle comunicazioni tra i vari processori. Fattori che limitano l efficienza Software più lungo: anche con algoritmi completamente equivalenti il software spesso si allunga su algoritmi paralleli ( per esempio, nel parallelo, vi possono essere il calcolo di indici che sono necessari per poter distribuire i dati sui singoli processori). In generale, quindi, vi sono più linee del programma sorgente che debbono essere eseguite in un programma parallelo rispetto alla versione seriale e questo indipendentemente dalle istruzioni che necessitano per il passaggio delle informazioni. Caricamento bilanciato: lo speedup è generalmente limitato dalla velocità del nodo meno veloce. Pertanto è importante assicurarsi che ogni nodo faccia la stessa mole di lavoro in termini di elaborazione, cioè, è importante che il sistema sia caricato in modo bilanciato. Sopra caricamento per le comunicazioni: Assumendo che le comunicazioni ed i calcoli non possano essere sovrapposti, allora, ogni tempo speso per comunicare i dati (le informazioni) tra i vari processori degrada in modo diretto l efficienza in quanto quando i processori comunicano tra loro non possono elaborare i dati. La legge di Amdahls Questa stabilisce che lo speedup di un algoritmo parallelo è effettivamente limitata dal numero di operazioni che debbono essere fatte in modo sequenziale (i.e la fase seriale). Supponiamo che S sia il tempo totale speso da 14

15 un processore per eseguire le parti seriali di un programma e P il tempo per eseguire le parti parallele dello stesso programma, allora lo speedup nella definizione di Amdahls è il seguente: Su=(S+P)/(S+P/N) Esempio: Supponiamo di avere un programma contenete 100 operazioni ciascuna delle quali prende una unità di tempo. Se 80 di esse possono essere fatte in parallelo ( P=80) e 20 debbono essere fatte sequenzialmente (S=20) allora, se si utilizzano 80 processori, lo speedup secondo Amdahls è: Su= (80+20)/(20+80/80)=100/21 < 5 Si può al massimo raggiungere uno speedup pari a 5 qualunque sia il numero di processori a disposizione. Se definiamo la frazione seriale di tempo con: F=S/(S+P) => P=(1-F)(S+P) => Su=1/(F+(1-F)/N) Da tale ultima relazione si osserva che se F=0, cioè il codice è tutto parallelizzabile allora Su=N, se invece F=1, cioè nessuna parte del codice è parallelizzabile allora Su=1 qualunque siano i processori utilizzati. Esempio: come precedentemente supponiamo che il programma contenga 100 operazioni ed ognuna di esse è risolta con una unità di tempo, prendiamo due configurazioni parallele, una con 10 processori e l altra con 1024 processori, supponiamo inoltre che solo l 1% del tempo è impiegato per la parte seriale, allora: Su(10 processori) = 100/(1+99/10) = 100/10.9 ~ 9 Su(1024 processori) = 100/(1+99/1024) ~ 91 Con la legge di Amdahls la frazione seriale F gioca un vincolo severo relativamente allo speedup quando il numero di processori cresce. Poiché molti programmi paralleli contengono una buona parte di codice di tipo seriale una possibile conclusione è che non è efficiente a livello di costo beneficio costruire architetture parallele con molti processori. 15

16 MESSAGE PASSING INTERFACE (MPI) Prima di passare alla descrizione di alcune delle routines della libreria MPI, diamo una breve descrizione della libreria istallata, di come configurare il cluster, come lanciare una applicazione ed infine come generare un eseguibile compatibile con la nostra configurazione. La libreria MPI utilizzata è la libreria MPICH2 per Windows XP (versione MPICH ). All interno delle utilità vi sono alcuni eseguibili che permettono di configurare il cluster e di mandare in esecuzione un programma su cluster configurato. Ricordiamo che utilizzeremo come linguaggio di programmazione il Fortran 90 e che il compilatore utilizzato, compatibile con la libreria fmpich2s.lib è il Compaq Visual Fortran 6. Quali file scaricare dalla rete Per poter utilizzare la libreria MPI della versione MPICH andare sul sito cliccare su Downloads page e scaricare l eseguibile mpich win32-ia32.msi per la versione di windows a 32 bit oppure mpich win64-x86-64.msi per la versione di windows a 64 bit Lanciare l applicazione e seguire tutte le informazioni richieste. Potrebbero mancare delle applicazioni sul vostro computer, in tal caso vi sarà richiesto di istallarle. Sarà lo stesso programma che vi indicherà il sito internet ove reperirle. Tale applicazione deve essere istallata almeno su un computer del cluster, per gli altri computers è sufficiente istallare l applicazione SMPD.EXE Tutti i computers del cluster e bene che siano avviati con lo stesso user_name e la stessa password. Configurazione del Cluster di PC Dal menù di Avvio+Programm+mpich2 mandare in esecuzione l applicazione wmpiregister 16

17 Inserire Account e password cliccare sul bottone register e quindi OK Sempre dal menù Avvio+Programm+mpich2 mandare in esecuzione l applicazione wmpiconfig 17

18 Scegliere il dominio e quindi utilizzare il bottone get hosts utilizzare il bottone scan hosts per verificare in quali computer è istallata l applicazione MPICH e quali versioni. I computers nell elenco hosts si colorano in verdino se in essi è istallato SMPD.EXE. Marcare gli hosts che ci interessano e quindi Apply. Il primo è il master gli altri sono slaves. Come lanciare una applicazione nel cluster appena configurato: Dal menù Avvio+Programm+Mpich2 lanciare l applicazione wmpiexec, apparirà la finestra che segue: 18

19 Se non si deve interagire in INPUT con il computer, dopo aver caricato l eseguibile, cliccando su ed aver scelto il numero di processori, cliccare sul bottone. Se si deve interagire con il computer in fase di esecuzione, spuntare, prima di mandare in esecuzione il programma, run in a separate window. Se si vogliono utilizzare ulteriori opzioni cliccare su more options la finestra precedente si aprirà ulteriormente come segue: 19

20 Utilizzando il bottone reset saranno visualizzate le macchine così come configurate con l applicazione wmpiconfig. Si consiglia nella riga extra mpiexec options di inserire le opzioni -l -exitcodes A seguire è riportata la finestra ulteriore che viene aperta dove deve essere inserito l input e dove viene stampato l output. Come si noterà l opzione l indicherà quale processore sta mandando l output mentre l opzione exitcodes indicherà il codice di uscita di ogni processore. 20

21 Come generare l eseguibile: Dopo aver scritto il codice sorgente utilizzando la sintassi del F90 unitamente alle SUBROUTINES dell MPI, compilare e lincare il tutto tramite il compilatore Compaq Visual Fortran 6 il quale può essere lanciato dal menù di Avvio+Programmi+Visual Fortran 6+Developer Studio. Come si noterà appare una finestra simile a quella di Microsoft Visual C e pertanto essa va utilizzata esattamente allo stesso modo Dopo aver creato il progetto inserendo tutti i moduli, gli oggetti, le librerie ed i percorsi dove ritrovare tutti i files si può compilare e lincare per generare l eseguibile. E importante aggiungere il file fmpich2s.lib delle librerie MPI ed inoltre il file mpif.h deve trovarsi sulla directory dove si trova file sorgente, che in questo caso è fox.f90 21

22 La Libreria MPI Introduzione MPI (Message Passing Interface) è una libreria di funzioni e routines che possono essere usate in programmi scritti in C, FORTRAN 77, FORTRAN 90 e C++. Come il suo nome ci dice, MPI è utilizzata in programmi che si servono di più processori e che dialogano tra loro tramite lo scambio di messaggi. MPI è stato sviluppato nel da un gruppo di ricercatori dell industria e dell università. Come tale è uno dei primi standards per la programmazione su architetture parallele ed è il primo basato sullo scambio delle informazioni. Tutto ciò che sarà riportato a proposito della libreria MPI avrà compatibilità con la versione MPICH che è stata installata, in particolare quasi tutte le routines dell MPI prese in considerazione sono delle subroutine esterne chiamabili da un sorgente F90, e pertanto la chiamata è fatta nel classico modo: CALL <nome> ( <argomenti> ) Considerazioni generali per programmi che utilizzano la libreria MPI Ogni programma MPI deve contenere in testa le direttive di pre-processing. INCLUDE MPIF.H Questo file mpif.h (un modulo in Fortran 90) contiene le definizioni, le macro e le funzioni necessarie per compilare un programma che contiene subroutine della libreria MPI. Prima di poter chiamare una qualunque routine MPI, bisogna chiamare la subroutine MPI_INIT ed essa deve essere chiamata una sola volta. Le subroutines fortran hanno, quasi sempre, come argomento una variabile intera IERR che contiene il codice errore. Prima che un programma termini deve contenere la chiamata alla subroutine MPI_FINALIZE. Questa pulisce ogni operazione MPI non terminata, i.e. receive pendenti che non sono stati mai completati. Pertanto la struttura tipica di un programma MPI+F90 è la seguente: 22

23 PROGRAM MAIN INCLUDE MPIF.H INTEGER :: IERR CALL MPI_INIT(IERR) CALL MPI_FINALIZE(IERR) END PROGRAM MAIN Determinazione del rango e del numero di processori MPI fornisce la subroutine MPI_COMM_RANK la quale ritorna il rango di un processore nel suo secondo argomento. La sua sintassi è: INTEGER :: COMM,RANK,IERR CALL MPI_COMM_RANK(COMM,RANK,IERR) Il primo argomento è il comunicatore. Essenzialmente un comunicatore è un insieme di processori che possono spedire messaggi l uno all altro. Per programmi di base l unico comunicatore necessario è MPI_COMM_WORLD. Esso è predefinito già nell MPI ed è formato da tutti i processori che sono stati configurati. Molte delle costruzioni nel nostro programma dipendono anche dal numero dei processori che stanno eseguendo il programma. Pertanto l MPI fornisce la subroutine MPI_COMM_SIZE che permette di determinare tale numero. Il suo primo argomento è il comunicatore. Nel suo secondo argomento tale routine ritorna il numero di processori. La sua sintassi è: INTEGER :: COMM,P,IERR CALL MPI_COMM_SIZE(COMM, P, IERR) Come spedire o ricevere dati o messaggi (Comunicazioni punto a punto) La spedizione e la ricezione dei messaggi è eseguita con due routines MPI che sono MPI_SEND ed MPI_RECV. La prima routine spedisce un messaggio ad un determinato processore, la seconda riceve un messaggio da un determinato 23

24 processore. Queste due sono le principali routines in MPI per la spedizione e la ricezione dei messaggi. Affinché il messaggio possa essere correttamente comunicato il sistema deve sapere alcune informazioni sui dati che l applicazione desidera trasmettere, diciamo la busta che contiene il messaggio. Nell MPI essa deve contenere le seguenti informazioni: Il rango del ricevitore Il rango di chi spedisce Un etichetta Un comunicatore Queste informazioni possono essere usate da chi riceve per distinguere i vari messaggi. L etichetta è un indice intero che può essere utilizzato per distinguere i messaggi che un singolo processore deve ricevere. Per esempio, supponiamo che il processore A voglia spedire due messaggi al processore B, ed entrambi i messaggi contengono un singolo numero reale. Uno dei due reali deve essere utilizzato per calcoli successivi mentre il secondo deve essere stampato. In modo da poter identificare qual è quello giusto il processore A può utilizzare un etichetta relativa al messaggio. Se B utilizza le stesse etichette nella corrispondente istruzione di ricezione allora quando riceverà i messaggi saprà che cosa farne. Come etichette, in MPI, si possono utilizzare interi compresi tra 0 e (Molte implementazioni permettono un intervallo maggiore). Riassumendo, diamo in dettaglio la sintassi delle due istruzioni: INTEGER :: COUNT,DATATYPE,DEST,TAG,COMM,IERR <TYPE> :: MESSAGE(*) CALL MPI_SEND( MESSAGE,COUNT,DATATYPE,DEST,TAG,COMM,IERR) INTEGER :: COUNT,DATATYPE,SOURCE,TAG,COMM,IERR INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS <TYPE> :: MESSAGE(*) CALL MPI_RECV( MESSAGE,COUNT,DATATYPE,SOURCE,TAG,COMM,STATUS,IERR) N.B. Nella routines sopra riportate abbiamo utilizzato la sintassi <TYPE> :: MESSAGE(*) per indicare l eventuale array che si vuole spedire o ricevere al posto della sintassi <TYPE>, DIMENSION(N) :: MESSAGE Il contenuto del messaggio è memorizzato in un blocco di memoria a cui ci si può riferire specificando l argomento del messaggio. COUNT e DATATYPE permettono al sistema di identificare la fine del messaggio, questo conterrà una successione di COUNT valori, ciascuno dei quali avente un DATATYPE di tipo 24

25 MPI. I tipi MPI predefiniti e corrispondenti ai tipi Fortran sono elencati nella tabella a seguire: MPI datatype MPI_INTEGER MPI_REAL MPI_DOUBLE_PRECISION MPI_COMPLEX MPI_LOGICAL MPI_CHARACTER FORTRAN datatype INTEGER REAL DOUBLE PRECISION COMPLEX LOGICAL CHARACTER(1) MPI_BYTE MPI_PACKED Gli ultimi due tipi, MPI_BYTE ed MPI_PACHED non corrispondono a tipi standard del fortran. Il tipo MPI_BYTE può essere usato se si desidera forzare il sistema ad eseguire nessuna conversione tra i differenti dati ( ad esempio quando si utilizza un cluster di work-stations eterogenee che utilizzano differenti rappresentazioni dei dati). A seguire vedremo il significato di MPI_PACHED. Da notare che la quantità di spazio allocato per ricevere il pacchetto non deve necessariamente coincidere con la quantità di spazio del messaggio che sta per essere ricevuto. Per esempio, quando il nostro programma sta girando, la grandezza del messaggio che il processore 1 spedisce ( ( LEN_TRIM(MESSAGE) ), è di 28 caratteri, ma il processore 0 riceve il messaggio in un buffer che può contenere 100 caratteri. Nel caso contrario viene segnalato un errore di overflow. Gli argomenti DEST e SOURCE sono, rispettivamente, il rango di chi riceve ed il rango di chi spedisce. MPI permette di avere un SOURCE jolly. Vi è infatti una costante predefinita MPI_ANY_SOURCE che può essere usata se un processore è pronto a ricevere un messaggio da un qualunque altro processore piuttosto che da un particolare processore. Non vi è il jolly per la variabile DEST. Gli argomenti TAG e COMM sono rispettivamente l etichetta ed il comunicatore. Il TAG è un intero mentre per ora il comunicatore è MPI_COMM_WORLD che come sopra detto è predefinito per ogni implementazione MPI. Vi è un jolly anche per il TAG relativamente a MPI_RECV ed è MPI_ANY_TAG. In altre parole per spedire un messaggio al processore B, l argomento COMM che A usa nell MPI_SEND deve essere identico a quello che B usa in MPI_RECV. 25

26 L ultimo argomento di MPI_RECV, e cioè STATUS, ritorna informazioni sui dati che sono stati ricevuti in quel momento. Se, ad esempio, il rango del ricevitore è MPI_ANY_SOURCE, allora la variabile STATUS conterrà il rango del processore che spedisce il messaggio. A seguire sono riportati due esempi in cui vengono utilizzate tutte le routines MPI fino ad ora viste. Esempio 1 (Hello world)!====================================================================== PROGRAM HELLO_WORLD IMPLICIT NONE INCLUDE MPIF.H INTEGER, PARAMETER :: & MESSAGE_LEN = 2, &! Massima lunghezza del messaggio MESSAGE_TAG = 50! TAG di identificazione INTEGER :: & MY_ID, &! Rango del processore NUM_TASKS, &! Numero di processori SOURCE_ID, &! Processore che spedisce il messaggio DEST_ID, &! Processore che spedisce il messaggio RC! Codice di errore INTEGER :: I INTEGER, DIMENSION(MPI_STATUS_SIZE) :: & STATUS! Ritorna lo stato della call INTEGER, DIMENSION(MESSAGE_LEN) :: & MESSAGE! Il vettore messaggio CALL MPI_INIT(RC)! Inizializzazione MPI CALL MPI_COMM_RANK(MPI_COMM_WORLD, MY_ID, RC)! Ritorna il processore corrente CALL MPI_COMM_SIZE(MPI_COMM_WORLD, NUM_TASKS, RC)! Ritorna il N di processori MESSAGE = (/ MY_ID, NUM_TASKS /)! Costruzione del messaggio IF (MY_ID /= 0) THEN DEST_ID = 0! Spedisce al master CALL MPI_SEND(MESSAGE, MESSAGE_LEN, MPI_INTEGER, DEST_ID, & MESSAGE_TAG, MPI_COMM_WORLD, RC) 26

27 ELSE WRITE(*,'(A,X,I3.3,A,I3.3)') & 'HELLO DAL PROCESSORE NUMERO', MESSAGE(1), 'DI', MESSAGE(2) DO I = 1, NUM_TASKS-1 CALL MPI_RECV(MESSAGE, MESSAGE_LEN, MPI_INTEGER, & MPI_ANY_SOURCE, MESSAGE_TAG, MPI_COMM_WORLD, STATUS, RC) SOURCE_ID = STATUS(MPI_SOURCE) IF (SOURCE_ID == MESSAGE(1)) THEN WRITE(*,'(A,X,I3.3,A,I3.3)') & 'HELLO DAL PROCESSORE NUMERO', MESSAGE(1), 'DI', MESSAGE(2) ELSE WRITE(*,'(A,X,I3.3)') 'ERRORE NEL MESSAGGIO DAL PROCESSORE', SOURCE_ID END IF END DO END IF CALL MPI_FINALIZE(RC)! Fine delle comunicazioni MPI END PROGRAM HELLO_WORLD! Fine del programma Esempio 2 (Calcolo di un integrale definito con la formula di quadratura dei trapezi) Ricordiamo che la formula di quadratura dei trapezi è la b f ( x ) dx = hf [ ( x0) / 2+ f( xn) / 2+ f( xi)]. a n 1 i= 1 Dove h=(b - a)/n ed x i =a+ih, i = 0,...,n. Un approccio per parallelizzare questo programma è semplicemente quello di suddividere l intervallo [a,b] tra i singoli processori ed ogni processore può stimare l integrale di f(x) nel proprio sottointervallo. Per calcolare il valore finale dell integrale basta sommare le quantità calcolate dai singoli processori. Supponiamo che p siano il numero dei processori a disposizione e che n siano le aree dei trapezi da dover valutare, e per semplificare la trattazione supponiamo che n sia divisibile per p. Allora è naturale che ogni processore valuti l area di n/p trapezi, ed alla fine il processore 0 valuti il valore finale dell integrale. Pertanto ogni processore necessiterà delle seguenti informazioni: 27

28 Il numero p di processori Il suo rango L intero intervallo di integrazione Il numero totale n di sottointervalli Il programma in Fortran 90 è il seguente: PROGRAM TRAPEZI IMPLICIT NONE INCLUDE MPIF.H!IL NUMERO DEI PROCESSORI DEI DIVIDERE IL NUMERO DEI SOTTOINTERVALLI INTEGER :: RANGO, P,N=2048 REAL :: A=0.0,B=1.0,H,L_A,L_B,INT_LOC,INT_TOT,TRAP INTEGER ::L_N,SOURCE,DEST=0,TAG=50,IERR INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS CALL MPI_INIT(IERR) CALL MPI_COMM_RANK(MPI_COMM_WORLD,RANGO,IERR) CALL MPI_COMM_SIZE ( MPI_COMM_WORLD, P, IERR ) H=(B-A)/N L_N=N/P L_A=A+RANGO*L_N*H L_B=A+(RANGO + 1)*L_N*H INT_LOC=TRAP(L_A,L_B,L_N,H) IF(RANGO==0) THEN INT_TOT=INT_LOC DO SOURCE = 1,P-1 CALL MPI_RECV(INT_LOC,1,MPI_REAL,SOURCE,TAG, ELSE ENDIF INT_TOT=INT_TOT+INT_LOC ENDDO CALL MPI_SEND(INT_LOC,1,MPI_REAL,DEST,TAG, & MPI_COMM_WORLD,IERR)! Stampa del risultato MPI_COMM_WORLD,STATUS,IERR) & IF (RANGO==0) THEN WRITE(*,*) VALORE_INTEGRALE ENDIF =,INT_TOT CALL MPI_FINALIZE(IERR) 28

29 END PROGRAM TRAPEZI REAL FUNCTION TRAP(L_A,L_B,L_N,H) IMPLICIT NONE REAL :: L_A,L_B,H,INT_LOC,X,F INTEGER :: L_N,I INT_LOC=(F(L_A)+F(L_B))/2.0 X=L_A DO I=1,L_N-1 X=X+H INT_LOC=INT_LOC+F(X) ENDDO TRAP=INT_LOC*H RETURN END FUNCTION TRAP REAL FUNCTION F(X) IMPLICIT NONE REAL :: X F=X*X RETURN END FUNCTION F La comunicazione delle informazioni tra in vari processori può essere ottimizzata. In particolare si possono utilizzare le routines di comunicazione collettive. 29

30 Comunicazioni Collettive Le subroutines per la comunicazione collettiva più importanti dell MPI sono: MPI_BCAST ed MPI_REDUCE. Vediamole in dettaglio: INTEGER :: COUNT,DATA,ROOT,COMM,IERR <TYPE> :: BUFFER(*) CALL MPI_BCAST(BUFFER,COUNT,DATATYPE,ROOT,COMM,IERR) Tale subroutine semplicemente spedisce una copia del dato BUFFER, che si trova sul processore ROOT, ad ogni processore che è presente nel comunicatore COMM. Tale messaggio, spedito via megafono, non può essere ricevuto con la routine MPI_RECV. Comunque a differenza delle comunicazioni punto a punto COUNT e DATATYPE debbono essere gli stessi su tutti i processori del comunicatore. Nel programma TRAPEZI dopo la fase di input, ogni processore esegue essenzialmente gli stessi comandi prima della fase finale di somma. Pertanto, a meno che la nostra funzione integranda non sia molto complicata, (ad esempio richieda valutazioni differenti su differenti parti dell intervallo [a,b] ) questa parte del programma distribuisce il lavoro in modo uniforme tra i vari processori. Questo non è vero per la fase relativa alle somme dei risultati parziali dove tutta l incombenza è lasciata al processore 0. Anche in tal caso l MPI fornisce una routine collettiva che permette di ottimizzare questa fase (MPI_REDUCE). Vediamola in dettaglio: INTEGER :: COUNT, DATATYPE, OP, ROOT, COMM, IERR <TYPE> :: OPERAND(*), RESULT(*) CALL MPI_REDUCE( OPERAND, RESULT, COUNT, DATATYPE, OP, ROOT, COMM, IERR ) MPI_REDUCE combina gli operandi memorizzati in OPERAND utilizzando l operazione OP e memorizza il risultato RESULT sul processore ROOT. Sia OPERAND che RESULT fanno riferimento alle locazioni di memoria di COUNT di tipo DATATYPE. Tale routine deve essere chiamata da ogni processore nel comunicatore COMM ed inoltre COUNT, DATATYPE ed OP debbono essere gli stessi in ogni processore. 30

31 L argomento OP può assumere una delle seguenti forme predefinite: Nome dell operatore MPI_MAX MPI_MIN MPI_SUM MPI_PROD MPI_LAND MPI_BAND MPI_LOR MPI_BOR MPI_LXOR MPI_BXOR MPI_MAXLOC MPI_MINLOC Significato Massimo Minimo Somma Prodotto AND logico AND su bits OR logico OR su bits OR esclusivo OR esclusivo su bits Massimo e locazione del massimo Minimo e locazione del minimo Vediamo ora un esempio di utilizzo di tali due ultime subroutines. 31

32 Esempio Calcolo di Pi tramite integrazione della funzione f(x)=4/(1+x**2) Metodo di integrazione dei rettangoli PROGRAM RETTANGOLI! Ciascun nodo:! 1) Riceve il numero dei rettangoli usati per l approssimazione! 2) Calcola l area dei rettangoli! 3) Si sincronizza per le somme globali! 4) Il nodo 0 stampa il risultato IMPLICIT NONE INCLUDE mpif.h REAL, PARAMETER :: PI7= REAL :: MYPI, PI, H, SUM, F, X INTEGER :: N, MYID, NUMPROCS, I, IERR CALL MPI_INIT(IERR) CALL MPI_COMM_RANK( MPI_COMM_WORLD, MYID, IERR ) CALL MPI_COMM_SIZE( MPI_COMM_WORLD, NUMPROCS, IERR) WRITE(*,*) IL PROCESSORE,MYID, DI,NUMPROCS, STA PRONTO DO IF( MYID == 0 ) THEN WRITE(*,*) DAI IL NUMERO DI SOTTOINTERVALLI: (CON 0 TERMINA) READ(*,*) N ENDIF CALL MPI_BCAST( N,1, MPI_INTEGER, 0, MPI_COMM_WORLD, IERR ) IF ( N == 0 ) EXIT H=1.0/N SUM=0.0 DO I=MYID+1,N,NUMPROCS X=H*(I-0.5) SUM=SUM+F(X) ENDDO MYPI=H*SUM! Vengono riunite tutte le somme parziali IERR) CALL MPI_REDUCE( MYPI, PI, 1, MPI_REAL, MPI_SUM, 0, MPI_COMM_WORLD,! Il processore zero scrive IF( MYID == 0 ) THEN WRITE(*,*) VALORE APPROSSIMATO DI PI=,PI WRITE(*,*) ERRORE =,ABS(PI7-PI) ENDIF 32

33 ENDDO CALL MPI_FINALIZE( IERR) STOP END PROGRAM RETTANGOLI REAL FUNCTION F(X) IMPLICIT NONE REAL :: X F=4.0/(1.0+X**2) RETURN END FUNCTION F Altre operazioni collettive L MPI fornisce molte altre funzioni per la comunicazione collettiva. In questa breve dispensa noi ne prenderemo in esame solo alcune. MPI_BARRIER, MPI_GATHER, MPI_SCATTER, MPI_ALLGATHER ed MPI_ALLREDUCE. Vediamole in dettaglio: La subroutine MPI_BARRIER INEGER :: COMM,IERR CALL MPI_BARRIER(COMM,IERR) MPI_BARRIER fornisce un modo per sincronizzare tutti i processori nel comunicatore COMM. Ciascun processore si blocca (i.e. è in pausa) fino a che ogni processore in COMM non abbia chiamato la routine MPI_BARRIER.! ESEMPIO DI UTILIZZO DELLA SUBROUTINE MPI_BARRIER PROGRAM BARRIER IMPLICIT NONE INCLUDE 'mpif.h' REAL(KIND=8) :: A INTEGER :: N, MYID, NUMPROCS, I, IERR CALL MPI_INIT(IERR) CALL MPI_COMM_RANK( MPI_COMM_WORLD, MYID, IERR ) CALL MPI_COMM_SIZE( MPI_COMM_WORLD, NUMPROCS, IERR) A=0.0D0 IF(MYID.NE.0) THEN DO A=A+1.0D0 IF(A.GT.1.0E+10) EXIT END DO END IF CALL MPI_BARRIER(MPI_COMM_WORLD,IERR) WRITE(*,*) A CALL MPI_FINALIZE( IERR) END PROGRAM BARRIER 33

34 La subroutine MPI_GATHER <TYPE> :: SEND_BUFF(*), RECV_BUF(*) INTEGER :: SEND_COUNT, SEND_TYPE, RECV_COUNT, RECV_TYPE, ROOT, COMM, IERR CALL MPI_GATHER( SEND_BUFF, SEND_COUNT, SEND_TYPE, RECV_BUF, & RECV_COUNT,RECV_TYPE,ROOT,COMM,IERR ) Ciascun processore in COMM spedisce il contenuto di SEND_BUF al processore di rango ROOT. Il processore ROOT concatena i dati ricevuti in RECV_BUF secondo l ordine del rango. Per meglio dire, il dato proveniente dal processore di rango 0 è seguito dal dato proveniente dal processore di rango 1 che è seguito dal dato proveniente dal processore di rango 2 etc. Gli argomenti di tipo RECV sono significativi solo sul processore di rango ROOT. L argomento RECV_COUNT indica il numero delle informazioni ricevute da ciascun processore e non il numero totale delle informazioni. La subroutine MPI_SCATTER 34

35 IERR <TYPE > :: SEND_BUF(*), RECV_BUF(*) INTEGER :: SEND_COUNT, SEND_TYPE, RECV_COUNT, RECV_TYPE, ROOT, COMM, CALL MPI_SCATTER( SEND_BUF, SEND_COUNT, SEND_TYPE, RECV_BUF, & RECV_COUNT, RECV_TYPE, ROOT, COMM, IERR ) Il processore di rango ROOT distribuisce il contenuto di SEND_BUF a tutti i processori. Il contenuto di SEND_BUF è spezzato in P segmenti ciascuno consistente in un numero di informazioni pari a SEND_COUNT. Il primo segmento va al processore 0, il secondo al processore 1, etc. Gli argomenti di tipo SEND sono significativi solo nel processore ROOT. Esempio di utilizzo della subroutine MPI_SCATTER PROGRAM scatter IMPLICIT NONE INCLUDE mpif.h INTEGER :: ERR, RANK, SIZE REAL, DIMENSION(4) :: PARAM REAL :: MINE INTEGER :: SNDCNT,RCVCNT CALL MPI_INIT(ERR) 35

36 CALL MPI_COMM_RANK(MPI_COMM_WORLD,RANK,ERR) CALL MPI_COMM_SIZE(MPI_COMM_WORLD,SIZE,ERR) RCVCNT=1 IF(RANK.EQ.3)THEN DO I=1,4 PARAM(I)=23.0+I END DO SNDCNT=1 END IF call MPI_SCATTER(PARAM,SNDCNT,MPI_REAL,MINE,RCVCNT, & MPI_REAL,3,MPI_COMM_WORLD,ERR) WRITE(*,*) "P:",RANK," IL MIO VALORE = ",MINE CALL MPI_FINALIZE(ERR) END OUTPUT P:1 IL MIO VALORE = 25. P:3 IL MIO VALORE = 27. P:0 IL MIO VALORE = 24. P:2 IL MIO VALORE = 26. La subroutine MPI_ALLGATHER <TYPE > :: SEND_BUF(*), RECV_BUF(*) INTEGER :: SEND_COUNT,SEND_TYPE,RECV_COUNT, RECV_TYPE,COMM,IERR CALL MPI_ALLGATHER( SEND_BUF, SEND_COUNT, SEND_TYPE, RECV_BUF, & RECV_COUNT, RECV_TYPE, COMM, IERR ) MPI_ALLGATHER riunisce il contenuto di ciascun SEND_BUF in ciascun processore del comunicatore. Il suo effetto è lo stesso di quello ottenuto con una successione di P chiamate ad MPI_GATHER, ciascuna delle quali ha un differente processore agente come ROOT. La subroutine MPI_ALLREDUCE <TYPE> :: OPERAND(*), RESULT(*) INTEGER :: COUNT, DATATYPE, OP, COMM, IERR. CALL MPI_ALLREDUCE( OPERAND, RESULT, COUNT, DATATYPE, OP, COMM, IERR) MPI_ALLREDUCE memorizza il risultato dell operazione OP di REDUCE nel buffer RESULT di ciascun processore. 36

37 Come raggruppare i dati per la comunicazione MPI fornisce tre modi per raggruppare dati individuali in un singolo messaggio: utilizzando il parametro COUNT nelle varie routines di comunicazione, utilizzando tipi di dati derivati, oppure tramite le routines MPI_PACK ed MPI_UNPACK. Il parametro COUNT Ricordiamo che le routines MPI_SEND, MPI_RECV, MPI_BCAST, MPI_REDUCE hanno come argomenti sia il parametro COUNT che l argomento DATATYPE. Questi due parametri permettono all utente di raggruppare dati dello stesso tipo in un unico messaggio. Per poter fare ciò tali dati debbono essere memorizzati in locazioni di memoria contigue. Poiché il Fortran memorizza gli elementi di variabili indicizzate in locazioni di memoria contigue, se noi vogliamo spedire gli elementi di un vettore o un suo sottoinsieme possiamo farlo con un unico messaggio, come già abbiamo fatto negli esercizi precedenti. Come altro esempio supponiamo di voler spedire la seconda metà di un vettore di 100 numeri reali dal processore 0 al processore 1: PROGRAM COUNT IMPLICIT NONE INCLUDE 'mpif.h' REAL, DIMENSION(100):: VECTOR INTEGER :: STATUS(MPI_STATUS_SIZE) INTEGER :: SIZE, RANK,TAG=50,NCO=50,DEST=1,SOURCE=0 INTEGER :: I,ERR CALL MPI_INIT(ERR) CALL MPI_COMM_RANK(MPI_COMM_WORLD,RANK,ERR) CALL MPI_COMM_SIZE(MPI_COMM_WORLD,SIZE,ERR) IF (RANK == 0) THEN! Inizializza il vettore e spedisci VECTOR(1:50)=0.0 VECTOR(51:100)=1.0 CALL MPI_SEND(VECTOR(51), NCO, MPI_REAL, DEST, TAG,& MPI_COMM_WORLD, ERR) ELSE 37

38 CALL MPI_RECV(VECTOR(51), NCO, MPI_REAL, SOURCE, TAG, & MPI_COMM_WORLD, STATUS, ERR) ENDIF IF (RANK==1) THEN WRITE(*,*) VECTOR(51:61) ENDIF CALL MPI_FINALIZE(ERR) END Sfortunatamente ciò non è possibile se vogliamo spedire dati di tipo differente. Ad esempio gli estremi A e B dell intervallo d integrazione ed il numero N di suddivisioni dell intervallo. In tal caso si presuppone che A e B siano reali ed N intero, pertanto non è possibile memorizzarli in un unico vettore, a meno che non si dichiari N reale, ma ciò non è la procedura corretta. D altronde se supponiamo di dichiararli in sequenza questo non implica che il Fortran li memorizzi in zone di memoria contigue. Per risolvere tale problema possiamo ricorrere ad alcune routines dell MPI che ci permettono di raggruppare come ad esempio MPI_PACHED. Pack ed Unpack Un modo alternativo per raggruppare i dati è fornito dall utilizzo delle routines MPI_PACK ed MPI_UNPACK. La subroutine MPI_PACK ci permette di memorizzare dati che si trovano in locazioni di memoria non consecutive in dati che occupano locazioni di memoria consecutive mentre la routine MPI_UNPACK può essere usata per copiare dati memorizzati in forma consecutiva in un buffer in dati che occupano locazioni di memoria non consecutive. La sintassi delle due subroutines è la seguente: <TYPE> :: PACK_DATA(*),BUFFER(*) INTEGER :: IN_COUNT,SIZE,POSITION,COMM,IERR... CALL MPI_PACK(PACK_DATA, IN_COUNT, DATATYPE, BUFFER, SIZE, & & POSITION, COMM, IERR) Il parametro PACK_DATA si riferisce al dato che deve essere bufferizzato. Può consistere di IN_COUNT elementi, ciascuno avente tipo DATA_TYPE. Il parametro POSITION è un paramentro di input/output. In input, il dato indicato con PACK_DATA è copiato in memoria all indirizzo BUFFER+POSITION. In output POSITION conterrà la prima locazione libera in BUFFER immediatamente dopo il dato copiato. Il parametro SIZE contiene la grandezza in bytes della memoria necessaria per il BUFFER e COMM è il comunicatore. 38

39 <TYPE> :: BUFFER(*),UNPACK_DATA(*) INTEGER :: SIZE,POSITION,COUNT,COMM,IERR... CALL MPI_UNPACK(BUFFER,SIZE,POSITION,UNPACK_DATA,COUNT, & & DATATYPE,COMM,IERR) Il parametro BUFFER si riferisce al dato che deve essere spacchettato e consiste di un numero di byte pari a SIZE. Il parametro POSITION è ancora una volta un parametro di input/output. Quando viene chiamata MPI_UNPACK il dato all indirizzo BUFFER+POSITION è copiato nella locazione di memoria riservata ad UNPACK_DATA. In output POSITION conterrà la locazione in BUFFER immediatamente successiva al dato copiato. MPI_UNPACK copierà COUNT elementi aventi tipo DATATYPE in UNPACK_DATA. A seguire un esempio di utilizzo delle routines MPI_PACK ed MPI_UNPACK. Come si osserva nelle routines di spedizione del buffer (nell esempio MPI_BCAST) il tipo del dato impacchettato è MPI_PACHED. PROGRAM PACK_UNPACK IMPLICIT NONE INCLUDE 'MPIF.H' REAL :: A,B INTEGER :: RANGO,N,NP,IERR,POSIZIONE REAL, DIMENSION(100) :: BUFFER! IN REALTÀ L ISTRUZIONE DOVEVA ESSERE! CHARATCTER, DIMENSION(100) :: BUFFER! IL LINKER DEL FORTRAN COMPAQ IN TAL MODO NON RICONOSCE LE SUBROUTINES CALL MPI_INIT(IERR) CALL MPI_COMM_RANK(MPI_COMM_WORLD,RANGO,IERR) CALL MPI_COMM_SIZE(MPI_COMM_WORLD,NP,IERR) IF (RANGO.EQ. 0) THEN WRITE(*,*) ' DAI A, B ED N' READ(*,*) A,B,N POSIZIONE=0 CALL MPI_PACK(A, 1, MPI_REAL, BUFFER, 100, & & POSIZIONE, MPI_COMM_WORLD, IERR ) CALL MPI_PACK(B, 1, MPI_REAL, BUFFER, 100, & & POSIZIONE, MPI_COMM_WORLD, IERR ) CALL MPI_PACK(N, 1, MPI_INTEGER, BUFFER, 100, & 39

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6 Appunti di Calcolatori Elettronici Esecuzione di istruzioni in parallelo Introduzione... 1 Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD...

Dettagli

Alcuni strumenti per lo sviluppo di software su architetture MIMD

Alcuni strumenti per lo sviluppo di software su architetture MIMD Alcuni strumenti per lo sviluppo di software su architetture MIMD Calcolatori MIMD Architetture SM (Shared Memory) OpenMP Architetture DM (Distributed Memory) MPI 2 MPI : Message Passing Interface MPI

Dettagli

MPI è una libreria che comprende:

MPI è una libreria che comprende: 1 Le funzioni di MPI MPI è una libreria che comprende: Funzioni per definire l ambiente Funzioni per comunicazioni uno a uno Funzioni percomunicazioni collettive Funzioni peroperazioni collettive 2 1 3

Dettagli

Operazioni di Comunicazione di base. Cap.4

Operazioni di Comunicazione di base. Cap.4 Operazioni di Comunicazione di base Cap.4 1 Introduzione: operazioni di comunicazioni collettive Gli scambi collettivi coinvolgono diversi processori Sono usati massicciamente negli algoritmi paralleli

Dettagli

Sistema operativo: Gestione della memoria

Sistema operativo: Gestione della memoria Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain. *+33(GLWRU GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain. Il programma si basa su un architettura di tasti funzionali presenti

Dettagli

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini. Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio

Dettagli

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU Lezione n.7 Il moltiplicatore binario e il ciclo di base di una CPU 1 SOMMARIO Architettura del moltiplicatore Architettura di base di una CPU Ciclo principale di base di una CPU Riprendiamo l analisi

Dettagli

Architettura hardware

Architettura hardware Architettura dell elaboratore Architettura hardware la parte che si può prendere a calci Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

Gestione della memoria centrale

Gestione della memoria centrale Gestione della memoria centrale Un programma per essere eseguito deve risiedere in memoria principale e lo stesso vale per i dati su cui esso opera In un sistema multitasking molti processi vengono eseguiti

Dettagli

Dispensa di Informatica I.1

Dispensa di Informatica I.1 IL COMPUTER: CONCETTI GENERALI Il Computer (o elaboratore) è un insieme di dispositivi di diversa natura in grado di acquisire dall'esterno dati e algoritmi e produrre in uscita i risultati dell'elaborazione.

Dettagli

Testi di Esercizi e Quesiti 1

Testi di Esercizi e Quesiti 1 Architettura degli Elaboratori, 2009-2010 Testi di Esercizi e Quesiti 1 1. Una rete logica ha quattro variabili booleane di ingresso a 0, a 1, b 0, b 1 e due variabili booleane di uscita z 0, z 1. La specifica

Dettagli

Sommario. Analysis & design delle applicazioni parallele. Misura delle prestazioni parallele. Tecniche di partizionamento.

Sommario. Analysis & design delle applicazioni parallele. Misura delle prestazioni parallele. Tecniche di partizionamento. Sommario Analysis & design delle applicazioni parallele Misura delle prestazioni parallele Tecniche di partizionamento Comunicazioni Load balancing 2 Primi passi: analizzare il problema Prima di iniziare

Dettagli

Il calendario di Windows Vista

Il calendario di Windows Vista Il calendario di Windows Vista Una delle novità introdotte in Windows Vista è il Calendario di Windows, un programma utilissimo per la gestione degli appuntamenti, delle ricorrenze e delle attività lavorative

Dettagli

La Gestione delle risorse Renato Agati

La Gestione delle risorse Renato Agati Renato Agati delle risorse La Gestione Schedulazione dei processi Gestione delle periferiche File system Schedulazione dei processi Mono programmazione Multi programmazione Gestione delle periferiche File

Dettagli

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro, EXCEL PER WINDOWS95 1.Introduzione ai fogli elettronici I fogli elettronici sono delle applicazioni che permettono di sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area

Dettagli

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

Dettagli

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta

Dettagli

Calcolatori Elettronici A a.a. 2008/2009

Calcolatori Elettronici A a.a. 2008/2009 Calcolatori Elettronici A a.a. 2008/2009 PRESTAZIONI DEL CALCOLATORE Massimiliano Giacomin Due dimensioni Tempo di risposta (o tempo di esecuzione): il tempo totale impiegato per eseguire un task (include

Dettagli

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Il software per gli esami ICON può essere eseguito su qualunque computer dotato di Java Virtual Machine aggiornata.

Dettagli

Strutturazione logica dei dati: i file

Strutturazione logica dei dati: i file Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer

Dettagli

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo I Thread 1 Consideriamo due processi che devono lavorare sugli stessi dati. Come possono fare, se ogni processo ha la propria area dati (ossia, gli spazi di indirizzamento dei due processi sono separati)?

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica per chimica industriale e chimica applicata e ambientale LEZIONE 4 - parte II La memoria 1 La memoriaparametri di caratterizzazione Un dato dispositivo di memoria è caratterizzato da : velocità di accesso,

Dettagli

Speedup. Si definisce anche lo Speedup relativo in cui, invece di usare T 1 si usa T p (1).

Speedup. Si definisce anche lo Speedup relativo in cui, invece di usare T 1 si usa T p (1). Speedup Vediamo come e' possibile caratterizzare e studiare le performance di un algoritmo parallelo: S n = T 1 T p n Dove T 1 e' il tempo impegato dal miglior algoritmo seriale conosciuto, mentre T p

Dettagli

Guida all uso di Java Diagrammi ER

Guida all uso di Java Diagrammi ER Guida all uso di Java Diagrammi ER Ver. 1.1 Alessandro Ballini 16/5/2004 Questa guida ha lo scopo di mostrare gli aspetti fondamentali dell utilizzo dell applicazione Java Diagrammi ER. Inizieremo con

Dettagli

Dimensione di uno Spazio vettoriale

Dimensione di uno Spazio vettoriale Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione

Dettagli

Metodologie di programmazione in Fortran 90

Metodologie di programmazione in Fortran 90 Metodologie di programmazione in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2007/2008 Fortran 90: Metodologie di programmazione DIS - Dipartimento di

Dettagli

Parte VIII. Architetture Parallele

Parte VIII. Architetture Parallele Parte VIII Architetture Parallele VIII.1 Motivazioni Limite di prestazioni delle architetture sequenziali: velocità di propagazione dei segnali, la luce percorre 30 cm in un nsec! Migliore rapporto costo/prestazioni

Dettagli

Reti di calcolatori ed indirizzi IP

Reti di calcolatori ed indirizzi IP ITIS TASSINARI, 1D Reti di calcolatori ed indirizzi IP Prof. Pasquale De Michele 5 aprile 2014 1 INTRODUZIONE ALLE RETI DI CALCOLATORI Cosa è una rete di calcolatori? Il modo migliore per capire di cosa

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 11 Martedì 12-11-2013 1 Tecniche di allocazione mediante free list Generalmente,

Dettagli

Algoritmi e strutture dati. Codici di Huffman

Algoritmi e strutture dati. Codici di Huffman Algoritmi e strutture dati Codici di Huffman Memorizzazione dei dati Quando un file viene memorizzato, esso va memorizzato in qualche formato binario Modo più semplice: memorizzare il codice ASCII per

Dettagli

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica Consiglio regionale della Toscana Regole per il corretto funzionamento della posta elettronica A cura dell Ufficio Informatica Maggio 2006 Indice 1. Regole di utilizzo della posta elettronica... 3 2. Controllo

Dettagli

Più processori uguale più velocità?

Più processori uguale più velocità? Più processori uguale più velocità? e un processore impiega per eseguire un programma un tempo T, un sistema formato da P processori dello stesso tipo esegue lo stesso programma in un tempo TP T / P? In

Dettagli

EM3 SoftCom Software di comunicazione fra EM3 e PC Versione 2.019

EM3 SoftCom Software di comunicazione fra EM3 e PC Versione 2.019 EM3 SoftCom Software di comunicazione fra EM3 e PC Versione 2.019 Via Serraglio, 48 - Imola (BO) - Italy Tel. 0542 641770 - Fax 0542 641761 www.elcotronic.it - info@elcotronic.it Pagina 1 di 17 Pagina

Dettagli

Introduzione a Dev-C++

Introduzione a Dev-C++ Introduzione a Dev-C++ Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Note: Dev-C++ richiede Windows 95/98/NT/2000/XP

Dettagli

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti. SH.MedicalStudio Presentazione SH.MedicalStudio è un software per la gestione degli studi medici. Consente di gestire un archivio Pazienti, con tutti i documenti necessari ad avere un quadro clinico completo

Dettagli

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda Premessa Con l analisi di sensitività il perito valutatore elabora un range di valori invece di un dato

Dettagli

Comunicazione. La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI

Comunicazione. La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI Comunicazione La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI Concettualmente la comunicazione point to point e' molto semplice: Un processo invia un

Dettagli

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2.

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Dichiarazione di dati: le direttive DS e DC...3 2.1 Direttiva DS...3 2.2

Dettagli

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello): Architettura (10/9003) Pag. 1/6 Esame di Architettura (matr.0-1) del 10/9003 Per Fondamenti di Architettura NON rispondere Per le domande a risposta multipla cerchiare la risposta scelta. Non alle domande

Dettagli

L archiviazione della posta elettronica può aiutarci a recuperare spazio senza costringerci a cestinare documenti importanti

L archiviazione della posta elettronica può aiutarci a recuperare spazio senza costringerci a cestinare documenti importanti L archiviazione della posta elettronica può aiutarci a recuperare spazio senza costringerci a cestinare documenti importanti Potete immaginare un ufficio senza archivio? Sarebbe un inferno. Dover rintracciare

Dettagli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per

Dettagli

Comunicazione tra Processi

Comunicazione tra Processi Comunicazione tra Processi Comunicazioni in un Sistema Distribuito Un sistema software distribuito è realizzato tramite un insieme di processi che comunicano, si sincronizzano, cooperano. Il meccanismo

Dettagli

Comunicazione tra Processi

Comunicazione tra Processi Comunicazione tra Processi Comunicazioni in un Sistema Distribuito Un sistema software distribuito è realizzato tramite un insieme di processi che comunicano, si sincronizzano, cooperano. Il meccanismo

Dettagli

Introduzione al MATLAB c Parte 2

Introduzione al MATLAB c Parte 2 Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione

Dettagli

Fasi di creazione di un programma

Fasi di creazione di un programma Fasi di creazione di un programma 1. Studio Preliminare 2. Analisi del Sistema 6. Manutenzione e Test 3. Progettazione 5. Implementazione 4. Sviluppo 41 Sviluppo di programmi Per la costruzione di un programma

Dettagli

Protezione. Protezione. Protezione. Obiettivi della protezione

Protezione. Protezione. Protezione. Obiettivi della protezione Protezione Protezione La protezione riguarda i meccanismi per il controllo dell accesso alle risorse in un sistema di calcolo da parte degli utenti e dei processi. Meccanismi di imposizione fissati in

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino Il Sistema Operativo Il Sistema Operativo è uno strato software che: opera direttamente sull hardware; isola dai dettagli dell architettura hardware; fornisce un insieme di funzionalità di alto livello.

Dettagli

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it MODELLO CLIENT/SERVER Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it POSSIBILI STRUTTURE DEL SISTEMA INFORMATIVO La struttura di un sistema informativo

Dettagli

File, Modifica, Visualizza, Strumenti, Messaggio

File, Modifica, Visualizza, Strumenti, Messaggio Guida installare account in Outlook Express Introduzione Questa guida riguarda di sicuro uno dei programmi maggiormente usati oggi: il client di posta elettronica. Tutti, ormai, siamo abituati a ricevere

Dettagli

Gestione della memoria. Paginazione Segmentazione Segmentazione con paginazione

Gestione della memoria. Paginazione Segmentazione Segmentazione con paginazione Gestione della memoria Paginazione Segmentazione Segmentazione con paginazione Modello di paginazione Il numero di pagina serve come indice per la tabella delle pagine. Questa contiene l indirizzo di base

Dettagli

FPf per Windows 3.1. Guida all uso

FPf per Windows 3.1. Guida all uso FPf per Windows 3.1 Guida all uso 3 Configurazione di una rete locale Versione 1.0 del 18/05/2004 Guida 03 ver 02.doc Pagina 1 Scenario di riferimento In figura è mostrata una possibile soluzione di rete

Dettagli

Installazione e caratteristiche generali 1

Installazione e caratteristiche generali 1 Installazione e caratteristiche generali 1 Introduzione SIGLA Ultimate e SIGLA Start Edition possono essere utilizzati solo se sono soddisfatti i seguenti prerequisiti: Microsoft.Net Framework 3.5 (consigliato

Dettagli

I sistemi di numerazione

I sistemi di numerazione I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono

Dettagli

CALCOLO PARALLELO SUPERARE I LIMITI DI CALCOLO. A cura di Tania Caprini

CALCOLO PARALLELO SUPERARE I LIMITI DI CALCOLO. A cura di Tania Caprini CALCOLO PARALLELO SUPERARE I LIMITI DI CALCOLO A cura di Tania Caprini 1 CALCOLO SERIALE: esecuzione di istruzioni in sequenza CALCOLO PARALLELO: EVOLUZIONE DEL CALCOLO SERIALE elaborazione di un istruzione

Dettagli

GESGOLF SMS ONLINE. Manuale per l utente

GESGOLF SMS ONLINE. Manuale per l utente GESGOLF SMS ONLINE Manuale per l utente Procedura di registrazione 1 Accesso al servizio 3 Personalizzazione della propria base dati 4 Gestione dei contatti 6 Ricerca dei contatti 6 Modifica di un nominativo

Dettagli

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro Introduzione alle tecnologie informatiche Strumenti mentali per il futuro Panoramica Affronteremo i seguenti argomenti. I vari tipi di computer e il loro uso Il funzionamento dei computer Il futuro delle

Dettagli

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio AXO Architettura dei Calcolatori e Sistema Operativo processo di assemblaggio linguaggio assembly è il linguaggio simbolico che consente di programmare un calcolatore utilizzando le istruzioni del linguaggio

Dettagli

Il web server Apache Lezione n. 3. Introduzione

Il web server Apache Lezione n. 3. Introduzione Procurarsi ed installare il web server Apache Introduzione In questa lezione cominciamo a fare un po di pratica facendo una serie di operazioni preliminari, necessarie per iniziare a lavorare. In particolar

Dettagli

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE PREMESSA La presente guida è da considerarsi come aiuto per l utente per l installazione e configurazione di Atollo Backup. La guida non vuole approfondire

Dettagli

Coordinazione Distribuita

Coordinazione Distribuita Coordinazione Distribuita Ordinamento degli eventi Mutua esclusione Atomicità Controllo della Concorrenza 21.1 Introduzione Tutte le questioni relative alla concorrenza che si incontrano in sistemi centralizzati,

Dettagli

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09 SISTEMI OPERATIVI Prof. Enrico Terrone A. S: 2008/09 Che cos è il sistema operativo Il sistema operativo (SO) è il software che gestisce e rende accessibili (sia ai programmatori e ai programmi, sia agli

Dettagli

Statistica 4038 (ver. 1.2)

Statistica 4038 (ver. 1.2) Statistica 4038 (ver. 1.2) Software didattico per l insegnamento della Statistica SERGIO VENTURINI, MAURIZIO POLI i Il presente software è utilizzato come supporto alla didattica nel corso di Statistica

Dettagli

risulta (x) = 1 se x < 0.

risulta (x) = 1 se x < 0. Questo file si pone come obiettivo quello di mostrarvi come lo studio di una funzione reale di una variabile reale, nella cui espressione compare un qualche valore assoluto, possa essere svolto senza necessariamente

Dettagli

CPU. Maurizio Palesi

CPU. Maurizio Palesi CPU Central Processing Unit 1 Organizzazione Tipica CPU Dispositivi di I/O Unità di controllo Unità aritmetico logica (ALU) Terminale Stampante Registri CPU Memoria centrale Unità disco Bus 2 L'Esecutore

Dettagli

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca

Dettagli

Il database management system Access

Il database management system Access Il database management system Access Corso di autoistruzione http://www.manualipc.it/manuali/ corso/manuali.php? idcap=00&idman=17&size=12&sid= INTRODUZIONE Il concetto di base di dati, database o archivio

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

Dettagli

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi Il Software Il software impiegato su un computer si distingue in: Software di sistema Sistema Operativo Compilatori per produrre programmi Software applicativo Elaborazione testi Fogli elettronici Basi

Dettagli

Introduzione al Foglio Elettronico

Introduzione al Foglio Elettronico Microsoft Excel Introduzione al Foglio Elettronico Il Foglio Elettronico Si presenta come una grande tabella su un foglio di carta Le celle contengono differenti dati Numeri Testo Date Ecc I dati possono

Dettagli

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE 1/6 MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE Per prima cosa si ringrazia per aver scelto ImmobiPhone e per aver dato fiducia al suo autore. Il presente documento istruisce l'utilizzatore sull'uso del programma

Dettagli

Product Shipping Cost Guida d'installazione ed Utilizzo

Product Shipping Cost Guida d'installazione ed Utilizzo Guida d'installazione ed Utilizzo Installazione Per installare il modulo è sufficiente copiare la cartella app del pacchetto del modulo nella cartella principale dell'installazione di Magento dove è già

Dettagli

Proteggiamo il PC con il Firewall di Windows Vista

Proteggiamo il PC con il Firewall di Windows Vista Proteggiamo il PC con il Firewall di Windows Vista Il momento in cui un computer è più a rischio e soggetto ad attacchi informatici, è quando è connesso a internet. Per proteggere il nostro PC ed evitare

Dettagli

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore Il processore Architettura dell elaboratore Il processore La esegue istruzioni in linguaggio macchina In modo sequenziale e ciclico (ciclo macchina o ciclo ) Effettuando operazioni di lettura delle istruzioni

Dettagli

Registratori di Cassa

Registratori di Cassa modulo Registratori di Cassa Interfacciamento con Registratore di Cassa RCH Nucleo@light GDO BREVE GUIDA ( su logiche di funzionamento e modalità d uso ) www.impresa24.ilsole24ore.com 1 Sommario Introduzione...

Dettagli

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi Indice generale OOA Analisi Orientata agli Oggetti Introduzione Analisi Metodi d' analisi Analisi funzionale Analisi del flusso dei dati Analisi delle informazioni Analisi Orientata agli Oggetti (OOA)

Dettagli

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE IL SISTEMA OPERATIVO Insieme di programmi che opera al di sopra della macchina fisica, mascherandone le caratteristiche e fornendo agli utenti funzionalità di alto livello. PROGRAMMI UTENTE INTERPRETE

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Esame di INFORMATICA

Esame di INFORMATICA Università di L Aquila Facoltà di Biotecnologie Esame di INFORMATICA Lezione 4 MACCHINA DI VON NEUMANN Anni 40 i dati e i programmi che descrivono come elaborare i dati possono essere codificati nello

Dettagli

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Compito fondamentale di un S.O. è infatti la gestione dell

Dettagli

Approccio stratificato

Approccio stratificato Approccio stratificato Il sistema operativo è suddiviso in strati (livelli), ciascuno costruito sopra quelli inferiori. Il livello più basso (strato 0) è l hardware, il più alto (strato N) è l interfaccia

Dettagli

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche Software di sistema e software applicativo I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche Software soft ware soffice componente è la parte logica

Dettagli

STUDIUM.UniCT Tutorial per gli studenti

STUDIUM.UniCT Tutorial per gli studenti STUDIUM.UniCT Tutorial per gli studenti Studium.UniCT Tutorial Studenti v. 6 06/03/2014 Pagina 1 Sommario 1. COS È STUDIUM.UniCT... 3 2. COME ACCEDERE A STUDIUM.UniCT... 3 3. COME PERSONALIZZARE IL PROFILO...

Dettagli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................

Dettagli

Tutorial 3DRoom. 3DRoom

Tutorial 3DRoom. 3DRoom Il presente paragrafo tratta il rilievo di interni ed esterni eseguito con. L utilizzo del software è molto semplice ed immediato. Dopo aver fatto uno schizzo del vano si passa all inserimento delle diagonali

Dettagli

Architettura di un calcolatore

Architettura di un calcolatore 2009-2010 Ingegneria Aerospaziale Prof. A. Palomba - Elementi di Informatica (E-Z) 7 Architettura di un calcolatore Lez. 7 1 Modello di Von Neumann Il termine modello di Von Neumann (o macchina di Von

Dettagli

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica.

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica. Tecnologie informatiche ACCESSO REMOTO CON WINDOWS Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica. Un esempio di tale servizio

Dettagli

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass 0_Iniziare con GRASS Avvio di Grass e creazione della cartella del Database di GRASS Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Dettagli

MANUALE PARCELLA FACILE PLUS INDICE

MANUALE PARCELLA FACILE PLUS INDICE MANUALE PARCELLA FACILE PLUS INDICE Gestione Archivi 2 Configurazioni iniziali 3 Anagrafiche 4 Creazione prestazioni e distinta base 7 Documenti 9 Agenda lavori 12 Statistiche 13 GESTIONE ARCHIVI Nella

Dettagli

Transitori del primo ordine

Transitori del primo ordine Università di Ferrara Corso di Elettrotecnica Transitori del primo ordine Si consideri il circuito in figura, composto da un generatore ideale di tensione, una resistenza ed una capacità. I tre bipoli

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014)

INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014) INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014) Se la Suite risulta già stata installata e quindi sono già presenti le configurazioni di seguito indicate, si prega di andare direttamente alla fine

Dettagli

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.6. Unità di controllo microprogrammata

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.6. Unità di controllo microprogrammata Lezione n.6 Unità di controllo microprogrammata 1 Sommario Unità di controllo microprogrammata Ottimizzazione, per ottimizzare lo spazio di memoria occupato Il moltiplicatore binario Esempio di architettura

Dettagli

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate MODULO BASE Quanto segue deve essere rispettato se si vuole che le immagini presentate nei vari moduli corrispondano, con buona probabilità, a quanto apparirà nello schermo del proprio computer nel momento

Dettagli

Architetture Applicative

Architetture Applicative Alessandro Martinelli alessandro.martinelli@unipv.it 6 Marzo 2012 Architetture Architetture Applicative Introduzione Alcuni esempi di Architetture Applicative Architetture con più Applicazioni Architetture

Dettagli

MPI: comunicazioni collettive

MPI: comunicazioni collettive - g.marras@cineca.it Gruppo Supercalcolo - Dipartimento Sistemi e Tecnologie 29 settembre 5 ottobre 2008 Collective Communications -Communications involving a group of process -Called by all processes

Dettagli

Il memory manager. Gestione della memoria centrale

Il memory manager. Gestione della memoria centrale Il memory manager Gestione della memoria centrale La memoria La memoria RAM è un vettore molto grande di WORD cioè celle elementari a 16bit, 32bit, 64bit (2Byte, 4Byte, 8Byte) o altre misure a seconda

Dettagli