Algoritmo per il calcolo della somma di N numeri In ambiente di calcolo parallelo su architettura MIMD a memoria distribuita
|
|
- Raffaela Natali
- 7 anni fa
- Visualizzazioni
Transcript
1 Algoritmo per il calcolo della somma di N numeri In ambiente di calcolo parallelo su architettura MIMD a memoria distribuita Carlo Maurizio Santoro Attività di laboratorio Università Parthenope - Corso di Calcolo Parallelo Aprile 2007 Carlo Maurizio Santoro Attività di laboratorio - Somma N numeri! 1
2
3 Primo approccio Accentrare il carico di management dei risultati parziali su un solo processore Il carico di lavoro è distribuito, ma il carico di gestione è centralizzato Analisi del problema L algoritmo parallelo da sviluppare vrà ricevere in input N dati da sommare e restituire in output la somma degli N valori. Per applicare questa strategia sarà necessario distribuire sui vari processori in maniera paritaria l intera mole di lavoro, san inizialmente gli N dati di partenza ed in fine raccogliere i risultati. Descrizione generale dell algoritmo Ogni processore, po aver ricevuto i dati da sommare che potrebbero essere forniti tramite varie modalità, effettua la suddetta operazione matematica tramite un ciclo iterativo enumerativo ed accumula il risultato in una variabile locale al processo. L ultimo passaggio che deve compiere ogni computing process è inviare il proprio risultato parziale al processore scelto come no di gestione. Altresì, il processore di coordinazione, oltre ad eseguire le istruzioni basilari prima descritte deve effettuare un numero di procedure di ricezione degli altri risultati parziali, pari al numero di processori restanti. Carlo Maurizio Santoro Attività di laboratorio - Somma N numeri! 2
4 Grafici dei Tempi, dello speed-up e dell efficienza Consideran i seguenti dati di benchmark ricavati in mo induttivo - sperimentale tramite la combinazione dello script bash con lo script gnu plot e consideran una mole di dati in input pari a 10 3 : P T(p) T(ideale) SpeedUp(p) Efficienza Il primo grafico presentato è ottenuto misuran i tempi dell algoritmo nel caso peggiore, che nella prima strategia è sempre associato al processore che svolge l operazione di aggregazione dei risultati. L asse Y è stata adattata ad una scala logaritmica per consentire la visualizzazione normalizzata delle due curve che altrimenti sarebbero state graficate come dissimili, in particolare quella con ordine di grandezza superiore sarebbe risultata molto pendente verso il basso, altresì la curva che rappresenta la dimensione computazionale minore sarebbe stata assimilabile ad una retta. 10 Grafico dei tempi - Prima strategia 10 4 Dati Ideale 10 3 Dati Ideale Tempo (sec) in log Numero di Processori Carlo Maurizio Santoro Attività di laboratorio - Somma N numeri! 3
5 Entrambe le curve risultano minare i valori ideali, calcolati a partire da p=2 ed attendensi un riduzione della complessità di tempo in base al numero di processori; è da osservare che la flessione delle due traiettorie ideali è da imputarsi esclusivamente alla scala logaritmica senza la quale i valori ideali sarebbero risultati giacenti su una linea retta, come osservabile tramite i valori della tabella prima scritta. Verrà soffermata l attenzione sull algoritmo avviato con 10 3 dati, rappresentato dalla curva in blu nel grafico dei tempi. Si può direttamente constatare l anomalia del tempo dell algoritmo eseguito su 6 processori, tale tempo risulta fuori traiettoria ideale della curva, con molta probabilità è imputabile ad un sovraccarico temporaneo della struttura di calcolatori a disposizione. Risulta palese osservare come tale anomalia influisca sulle curve dello speed up e dell efficienza e sia verificata esclusivamente in corrispondenza di 6 processori, ciò è da addurre alle formule di calcolo che dipenno strettamente da T p da che, nel caso sia falsato si ripercuote su tali dati Dati Ideale Dati Ideale Lo speed up ideale, rappresentato dalla retta bisettrice dal colore chiaro, segue ed è approssimato fedelmente dalla curva dello speed up reale, discostansi tal volta per difetto o per eccesso, facen esclusione del caso numero 6. Carlo Maurizio Santoro Attività di laboratorio - Somma N numeri! 4
6 Secon approccio Decentrare il carico di management dei risultati parziali su più processori Il carico di lavoro è distribuito, il carico di gestione è parzialmente distribuito Descrizione generale dell algoritmo Per aggregare i risultati parziali vrà essere generato un albero binario in cui la base è rappresentata dalle somme parziali che ogni no ha calcolato, ogni no dell albero corrisponde ad un invio e ricezione tra i due genitori, dei quali esclusivamente uno calcolerà la somma parziale e continuerà le elaborazioni nella fase successiva. Per applicare questa strategia sarà necessario disporre di un numero di processori pari ad una potenza di 2, tale limitazione vrà essere prevista nell algoritmo. Il carico di gestione risulta parzialmente distribuito perché non tutti i processori proseguono le elaborazioni ad ogni passo temporale, difatti al termine dell algoritmo esclusivamente il no accentratore sarà possessore del risultato. Per identificare i processori addetti alle comunicazioni ci si baserà sul identificativo del processore nel comunicatore, calcolan il resto della moltiplicazione con la potenza di 2 relativa al passo temporale. E importante notare che ad ogni passo temporale, all interno delle coppie formate per la comunicazione, solo un processore effettuerà la somma ed andrà avanti nel prossimo passaggio iterativo. Carlo Maurizio Santoro Attività di laboratorio - Somma N numeri! 5
7 Grafici dei Tempi, dello speed-up e dell efficienza Si osserva che, i tempi misurati risultano essere esatti nelle prime due cifre ed hanno una buona approssimazione anche sulla terza cifra decimale, ciò è direttamente riscontrabile anche dal grafico, ve entrambe le curve risultano sovrapposte alle traiettorie ideali. Algoritmo eseguito su 10 3 dati P T(p) T(ideale) SpeedUp(p) Efficienza Lo speed up e l efficienza nel primo test minano sempre i valori ideali, anche se lo scarto è di un ordine di grandezza di piccole dimensioni, tali da non essere scindibili nel grafico ve le curve risultano sovrapposte. Algoritmo eseguito su 10 4 dati P T(p) T(ideale) SpeedUp(p) Efficienza Grafico dei tempi - Seconda strategia 10 4 Dati Ideale 10 3 Dati Ideale Tempo (sec) in log Numero di Processori Carlo Maurizio Santoro Attività di laboratorio - Somma N numeri! 6
8 Grafico dello Speed Up - Seconda Strategia Dati Ideale Numero di Processori Si nota chiaramente che la retta dell efficienza mina di poco quella ideale, tale scarto è tale da provocare una lieve tangenza. 1.4 Grafico Efficienza - Seconda strategia 10 3 Dati Ideale Numero di Processori Si potrebbe esprimere un giudizio sull algoritmo complessivamente positivo. Carlo Maurizio Santoro Attività di laboratorio - Somma N numeri! 7
9 Terzo approccio Distribuire il carico di management dei risultati parziali su tutti i processori Il carico di lavoro ed il carico di gestione sono distribuiti Descrizione generale dell algoritmo Questa strategia si differenzia dalle precedenti perché tutti i processori eseguono somme ad ogni passo temporale, al termine dell algoritmo ogni processore possederà la somma totale. Per implementare questo algoritmo è necessario individuare le coppie che vranno scambiarsi i risultati parziali ed effettuare le somme, si procederà come nella seconda strategia basansi sulle potenze di 2 relative al passo temporale i-simo. Grafici dei Tempi, dello speed-up e dell efficienza Algoritmo eseguito su 10 3 dati P T(p) T(ideale) SpeedUp(p) Efficienza Algoritmo eseguito su 10 4 dati P T(p) T(ideale) SpeedUp(p) Efficienza Carlo Maurizio Santoro Attività di laboratorio - Somma N numeri! 8
10 Tempo (sec) in log 10 1 Grafico dei tempi - Terza strategia 10 4 Dati Ideale 10 3 Dati Ideale Si osserva la precisione di tutti i tempi misurati ed in particolare con un carico di lavoro di 10 3 dati su 4 processori, ve risulta avvicinarsi alla cifra ideale per addirittura 6 cifre Numero di Processori 1.4 Grafico Efficienza - Terza strategia 10 3 Dati Ideale 9 8 Grafico dello Speed Up - Terza Strategia 10 3 Dati Ideale Numero di Processori Nanosleep Numero di Processori Tutti i grafici presentati sono stati ottenuti forzan ogni somma con la funzione nanosleep, provocan un overhead ad ogni somma, che anche se minimo aiuta a far prescindere la valutazione dell algoritmo dal carico attuale del cluster. La funzione è stata studiata in maniera da accumulare nanosecondi ogni somma, pari a 1 millisecon che equivale a 10-3 secondi, in pratica ogni mille somme viene accumulato un secon di overhead. Non attan questa strategia si sarebbero ottenuti grafici strettamente dipendenti dal momento in cui si sia lanciato l algoritmo, ottenen risultati come il seguente Tempo (sec) in log Grafico dei tempi - Seconda strategia Numero di Processori 10 4 Dati Ideale 10 3 Dati Ideale Si nota come all aumentare del numero di processori, cresca anche il tempo di esecuzione, ciò è imputabile sia al carico del cluster sia alla complessità di tempo delle procedure MPI che mina la complessità dell algoritmo. Carlo Maurizio Santoro Attività di laboratorio - Somma N numeri! 9
11 Analisi del software sviluppato Il software protto è stato articolato in un programma in linguaggio C che utilizza le librerie mpi, uno script unix bash ed uno script gnu plot. Programma C Il sorgente è stato articolato in 5 funzioni principali che sono richiamate in mo sequenziale all interno della funzione main. Il programma può essere eseguito con varie modalità agen sui parametri, la prima riguarda la strategia da attare che è variabile tramite il parametro -str, sono disponibili le 3 precedentemente descritte; per verificare l attendibilità di tutte le modalità è stata implementata una quarta strategia che ha il compito di calcolare i risultati delle somme totali seguen tutte le vie a disposizione e confrontare i risultati ottenuti. I Grafici relativi alla dimensione computazionale di 10 3 sono stati ottenuti eseguen il programma in modalità benchmark con l opzione -b 3. void init_environment( int argc, char *argv[]) E la prima funzione richiamata, essa effettua un controllo sui parametri di input ed inizializza l ambiente MPI restituen l' identificativo di ogni processore nell ambiente del comunicatore principale. void step1() Questa procedura si occupa di generare e distribuire su tutti i processori una mole di dati in input ranm pari ad una potenza di 10 specificata come parametro di -b oppure di acquisire dati dallo standard input se eseguito con l opzione -b 0. int step1() Consiste nel cuore dell algoritmo, viene eseguita indipendentemente dalla strategia attata, effettua le vere e proprie somme locali ad ogni processore, ritornan come variabile di uscita la somma calcolata. int str_n_step3(int PartialSum ) Sono state sviluppate 3 funzioni con N = 1,2, 3 che applicano le strategie prima descritte, la funzione prende in input il risultato parziale di ogni processore e restituisce la somma totale. Nella prima e seconda strategia il risultato è contenuto solo nel processore root che potrà effettuare la stampa del valore ritornato da tale funzione. Carlo Maurizio Santoro Attività di laboratorio - Somma N numeri! 10
12 /Users/alanturing2/Desktop/somma_parallela.c //================================================= file=somma_parallela.c ===== //= Titolo : //= Three stategy approaches for parallel sum 1.0 build=52 //============================================================================== //= Note: = //= 1) Questo programma e' stato compilato su Cluster Linux usan MPIch = //= 2) E' stato sviluppato uno script bash che automatizza i test = //= per eseguirlo e' necessario GNUplot = //= = //= Parametri : = //= Benchmark = //= -b 0 Attiva un input manuale dallo STD_INPUT = //= -b <k> Attiva un input ranm = //= generan una dimensione computazionale pari a 10^k = //= e visualizzan sullo STD_OUTPUT il tempo impiegato = //= = //= Strategia = //= -str <k> Attiva la strategia k con k = 1,2,3 = //= = //= Controllo di consistenza = //= -str 4 Attiva il programma eseguen tutte le strategie = //= computan gli stessi dati in input = //= e controllan l'uguaglianza dei 3 risultati = //= = //= Esempio di esecuzione = //= = //= mpirun -np 8 -machinefile lista somma_parallela -b 3 -str 4 = //= esegue su 8 processori usan : un input Ranm = //= visualizzan il tempo = //= usa la terza strategia = //= = //= Compilazione: mpicc somma_parallela.c -o somma_parallela = //= = //= Fine alla prova di medio corso di Calcolo Parallelo e Distribuito = //= Prof. A. Murli = //= = //= Autore: Carlo Maurizio Santoro = //= Universita' Parthenope, Informatica Generale, Napoli = //= WWW: = //= alanturing2@hotmail.com = //= Perio di sviluppo: 13 Aprile - Maggio 2007 = //= Ultima revisione : 3 Maggio :00 = //= = Printed: 07/05/07 20:29 Page 1
13 /Users/alanturing2/Desktop/somma_parallela.c #include <stdio.h> #include <mpi.h> #include <math.h> #include <stdlib.h> #include <time.h> // Useful bitwise function int log_2(int n); int is_pow_2(int n); // start - end environment void erroreinput(char **argv); void init_environment( int argc, char *argv[]); void end_environment(void); void step1(void); int step2(void); int str_1_step3( int PartialSum ); int str_2_step3( int PartialSum ); int str_3_step3( int PartialSum ); //Global var int myrank; int clustersize; int n; int nloc; // My Processor ID from MPI_Comm_Rank() // Size of cluster from MPI_Comm_Size() // number of elements to add // Size of sub_array int * VettLoc; int * RecvSumVett; //Input Var int Benchmark = 0 ; int Strategy = 0 ; // Dinamic Sub-Array containing the elements to add // Dinamic Array contain the recived sum // Define if Benchmark is on // Computing strategy Printed: 07/05/07 20:29 Page 2
14 /Users/alanturing2/Desktop/somma_parallela.c int main ( int argc, char *argv[]) // Benchmark variable uble starttime; uble endtime; int PartialSum ; int FinalSum ; // initialize the computational size and input parameter init_environment(argc,argv); // Barrier for wtime MPI_Barrier(MPI_COMM_WORLD); //Wtime start if (myrank == 0 && Benchmark == 1) starttime = MPI_Wtime(); // Ranm number, creation and distribution step1(); // SubTotal sum and aggregation PartialSum = step2(); // Final total sum and output if (Strategy == 1) FinalSum = str_1_step3(partialsum); else if (Strategy == 2) FinalSum = str_2_step3(partialsum); else if (Strategy == 3) FinalSum = str_3_step3(partialsum); else if (Strategy == 4) int return1; int return2; int return3; Printed: 07/05/07 20:29 Page 3
15 /Users/alanturing2/Desktop/somma_parallela.c return1 = str_1_step3(partialsum); return2 = str_2_step3(partialsum); return3 = str_3_step3(partialsum); if (myrank==0) printf ("strategy 1 = %d\n", return1 ); printf ("strategy 2 = %d\n", return2 ); printf ("strategy 3 = %d\n", return3 ); else // Strategy is not 1,2,3 or 4 fprintf(stderr,"error : Strategy must be : \n"); MPI_Abort( MPI_COMM_WORLD, 1 ); // Barrier for wtime MPI_Barrier(MPI_COMM_WORLD); // Output result if ( myrank == 0 ) if (Benchmark == 1) endtime = MPI_Wtime(); // Output formatting for TAB if ( (endtime-starttime) >= 10 ) printf("%d\t%8.6f\n",clustersize,endtime-starttime); else printf("%d\t%8.7f\n",clustersize,endtime-starttime); else if (Benchmark == 0) printf("final Sum = %d\n",finalsum); end_environment(); Printed: 07/05/07 20:29 Page 4
16 /Users/alanturing2/Desktop/somma_parallela.c //Visualizza il messaggio di errore se si passano parametri errati void erroreinput(char **argv) printf("errore : Sintassi errata\n"); printf("uso: %s [-b] [dimensione computazionale in potenza di 10] [-st] [Numero di strategia]\n",argv[0]); printf("usare l'opzione -b per attivare i benchmark generan un input automatico ranm\n"); printf("generan una dimensione computazionale pari a 10 elevato alla potenza inserita"); printf("non usan opzioni si attiver! un input manuale\n"); printf("%s -b 5 -str 2 #genera un input rann con dimensione computazionale 10^5 applican la seconda strategia\n"); printf("%s #avvia il programma con input manuale\n"); return; // produces logarithm in base 2 of n using bitwise operation int log_2(int n) int i=0; int result; int mask=1; result =n; if( (mask & result) == 1 ) return i; i++; result = result >> 1; while(i<=31); // Gli int sono al massimo 32 bit // finds if n is -> n = 2^x with 0 < x < 31 int is_pow_2(int n) int mask = 1; if( mask == n) return 1; mask = mask << 1; while(mask<= n); //Se non! stata trovata nessuna maschera valida return 0 ; Printed: 07/05/07 20:29 Page 5
17 /Users/alanturing2/Desktop/somma_parallela.c void init_environment( int argc, char *argv[]) int i; // For Variable int potenza; // input exp // Init. the MPI env. MPI_Init (&argc, &argv); MPI_Comm_rank (MPI_COMM_WORLD, &myrank); MPI_Comm_size (MPI_COMM_WORLD, &clustersize); // starts MPI env. // get current process id // get number of processor // Check INPUT //Numero Parametri if ( (argc!= 5) && (argc!= 1) ) fprintf(stderr,"error : Incorrect Parameters \n"); erroreinput(argv); MPI_Abort( MPI_COMM_WORLD, 1 ); // Set the correct input variable if (argc == 5) // -b setting if (strcmp(argv[1],"-b")==0) Benchmark = 1; else Benchmark = 0 ; potenza = atoi(argv[2]); // -str setting if ( strcmp(argv[3],"-str") == 0 ) Strategy = atoi(argv[4]) ; else Strategy = atoi(argv[4]) ; if ( (Strategy <= 0) (Strategy >= 5) ) fprintf(stderr,"error : Strategy must be \n"); MPI_Abort( MPI_COMM_WORLD, 1 ); Printed: 07/05/07 20:29 Page 6
18 /Users/alanturing2/Desktop/somma_parallela.c //Init. the seed value srand((unsigned int)time(0)); //input if (myrank==0) if (Benchmark == 0) // Manual Input printf("insert Number of element : "); scanf("%d",&n); else // Ranm input n = pow(10,potenza); // Computational size must be bigger then Cluster Size if (n < clustersize) fprintf(stderr,"error : computational size () must be bigger then Cluster Size () \n",n,clustersize); MPI_Abort( MPI_COMM_WORLD, 1 ); // In the Second and third strategy, // the computational process must be in logaritmic_2 scale if ( (Strategy == 2) (Strategy == 3) ) if ( is_pow_2(clustersize) == 0) fprintf(stderr,"error, Cluster Size must be in logaritmic_2 scale \n"); MPI_Abort( MPI_COMM_WORLD, 1 ); // Broadcast of n MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD); // How many number i must sum nloc = n / clustersize; Printed: 07/05/07 20:29 Page 7
19 /Users/alanturing2/Desktop/somma_parallela.c void end_environment(void) MPI_Finalize(); void step1() MPI_Status STAT; int k; int i; int rest; // Stat for MPI_Recv() // For Variable // For Variable // Rest used if n is not pair // Distribute the rest, if n is not pair rest = n % clustersize; if (myrank<rest) nloc++; // Sub-Array allocation if (!(VettLoc = (int *) calloc(nloc,sizeof(int) ) ) ) fprintf(stderr,"error : Calloc error\n"); MPI_Abort( MPI_COMM_WORLD, 1 ); if (myrank==0) // Rank 0 es not know the nloc of other Computing Proc. int RealLoc ; // Delivery loop for (i=1;i<clustersize;i++) // determines the real nloc, because rank 0 // can not look to nloc of other process RealLoc = nloc-1; if (i<rest) RealLoc++; // fills up and send the sub-array for (k=0;k<realloc;k++) if (Benchmark == 0) Printed: 07/05/07 20:29 Page 8
20 /Users/alanturing2/Desktop/somma_parallela.c printf("insert element %d for rank %d : ",k,i); scanf("%d",&vettloc[k]); else //Generate ranm number in range 1-20 VettLoc[k] = (int) (rand()) ; MPI_Send(VettLoc,RealLoc,MPI_INT,i,10,MPI_COMM_WORLD); // fills up the sub-array of rank 0 for (k=0;k<nloc;k++) if (Benchmark == 0) printf("insert element %d for rank 0 : ",k); scanf("%d",&vettloc[k]); else //Generate ranm number in range 1-20 VettLoc[k] = (int) (rand()) ; // Recived Sum Array allocation RecvSumVett = (int *) calloc(clustersize,sizeof(int)); else // My Rank is not 0 // Recive the Sub-array MPI_Recv(VettLoc,nloc,MPI_INT,0,10,MPI_COMM_WORLD,&STAT); Printed: 07/05/07 20:29 Page 9
21 /Users/alanturing2/Desktop/somma_parallela.c int step2(void) int sum =0; int i; struct timespec tv; // Temp sum // For Variable // Construct the timespec from the number of whole seconds... tv.tv_sec = 0; // nanosec = 1 millisec = 10^-3 sec // Ogni mille somme viene accumulato un secon tv.tv_nsec = ; if (Benchmark == 1) // Sum the elements of Sub-Array for (i=0;i<=nloc-1;i++) nanosleep (&tv, NULL); // And sum sum = sum + VettLoc[i]; else // Sum the elements of Sub-Array for (i=0;i<=nloc-1;i++) // And sum sum = sum + VettLoc[i]; return sum ; Printed: 07/05/07 20:29 Page 10
22 // SubTotal Aggregation int str_1_step3( int PartialSum ) /Users/alanturing2/Desktop/somma_parallela.c int i; // For Variable int FinalSum; // Final Sum developed by rank 0 MPI_Status STAT; // Stat for MPI_Recv() // SubTotal Aggregation if (myrank==0) for (i=1;i<=clustersize-1;i++) MPI_Recv( &RecvSumVett[i], 1, MPI_INT, i, i, MPI_COMM_WORLD, &STAT); // Store the Sub-Sum of rank 0 RecvSumVett[0]=PartialSum; else MPI_Send(&PartialSum, 1, MPI_INT, 0, myrank, MPI_COMM_WORLD ); // Rank 0 make the final aggregation of sub-sum to final sum if (myrank==0) FinalSum=0; for (i=0;i<=clustersize-1;i++) FinalSum = FinalSum + RecvSumVett[i]; return FinalSum ; Printed: 07/05/07 20:29 Page 11
23 /Users/alanturing2/Desktop/somma_parallela.c int str_2_step3( int PartialSum ) // Power 2 array int power_2[31]; int mask = 1; int i=0; int RecvSum = 1; int RecvSumTmp = 0; MPI_Status STAT; // Stat for MPI_Recv() power_2[i] = mask; mask = mask << 1; i++; while(i <= 29); //int = 32 bit (-3) RecvSum = PartialSum ; for ( i=1 ; i <= log_2( clustersize ) ; i++) if ( (myrank % power_2[i]) == 0 ) MPI_Recv(&RecvSumTmp,1,MPI_INT, (myrank + power_2[i-1]),i,mpi_comm_world,&stat); RecvSum = RecvSum + RecvSumTmp ; else if ( (myrank % power_2[i-1]) == 0 ) MPI_Send(&RecvSum, 1, MPI_INT, (myrank - power_2[i-1]), i, MPI_COMM_WORLD ); else // Stop the for, is not a computing proc. break ; // End for return RecvSum ; Printed: 07/05/07 20:29 Page 12
24 /Users/alanturing2/Desktop/somma_parallela.c int str_3_step3(int PartialSum ) // Power 2 array int power_2[31]; int mask = 1; int i=0; int MySum = 0; int RecvSum = 0; MPI_Status STAT; // Stat for MPI_Recv() power_2[i] = mask; mask = mask << 1; i++; while(i <= 29); //int = 32 bit MySum = PartialSum ; for ( i=1 ; i <= log_2( clustersize ) ; i++) if ( (myrank % power_2[i]) < (power_2[i-1]) ) MPI_Recv( &RecvSum, 1, MPI_INT, (myrank + power_2[i-1]), i, MPI_COMM_WORLD, &STAT); MPI_Send( &MySum, 1, MPI_INT, (myrank + power_2[i-1]), i, MPI_COMM_WORLD ); MySum = MySum + RecvSum ; else MPI_Send( &MySum, 1, MPI_INT, (myrank - power_2[i-1]), i, MPI_COMM_WORLD ); MPI_Recv( &RecvSum, 1, MPI_INT, (myrank - power_2[i-1]), i, MPI_COMM_WORLD, &STAT); MySum = MySum + RecvSum ; // End for return MySum; Printed: 07/05/07 20:29 Page 13
25 Script Bash Il seguente script implementato ha il compito di automatizzare i test di esecuzione richiaman il sorgente e lo script gnuplot produce in output File : Tempi.dat contenente tutti i tempi dei vari test con le descrizioni sotto forma di tabella con speed up ed efficienza. Directory : Grafici/ contiene tutti i grafici in formato post script, il nome di ogni file si riferisce alla strategia attata e alla dimensione computazionale. Lo script è articolato secon le seguenti fasi : 1. Cancella i file delle precedenti esecuzioni che potrebbero danneggiare l attuale test 2. Compila il sorgente 3. Esegue il sorgente con le 3 strategie, con i processori disponibili e con le varie dimensioni computazionali tramite 3 cicli for innestati che richiamano mpirun. 4. Tramite awk crea le tabelle che affiancano i test eseguiti precendentemente, in particolare calcola : Tempi ideai, Speed-up ed efficienza 5. Dopo aver ottenuto un file con i tempi per ogni caso, richiama lo script gnuplot 6. Raccoglie tutti i tempi generati in un solo file : Tempi.dat 7. Elimina tutti i file non necessari temporanei ed esce Script GNU Plot Tale script si basa sui file temporanei con i tempi creati dallo script bash, po aver impostato l ambiente di esecuzione e di output, in particolare il formato post script, richiama il coman plot sui file dat. Le curve dei tempi sono state ottenute con delle spline interpolanti su tutti i punti, mentre le traiettorie ideali dello speed up e dell efficienza sono state visualizzate come funzioni. I grafici relativi ai tempi, sono stati disegnati impostan sull asse y la scala logaritmica per migliorare la visione delle due diverse dimensioni computazionali, mentre tale scala è stata eliminata degli ultimi due tipo di grafici che considerano una sola curva dei valori e la sua traiettoria ideale Carlo Maurizio Santoro Attività di laboratorio - Somma N numeri! 11
26 /Volumes/EsternoMac/Universita/Calcolo Parallelo/Esercizi/Somma/Codice/script.sh #!/bin/bash echo " SCRIPT START " # Cleaning old file # Because, they interfere with normal programm running echo "Cleaning DAT FILE : str$i_n$j.dat... " rm -f *.dat echo "Cleaning executable..." rm -f somma_parallela; echo "Compiling source..." mpicc somma_parallela.c -o somma_parallela # Executable launch for each study case for j in # Strategy variable for k in 3 4 # Computational size 10 ^3-10 ^ 4 if [ "$j" -eq "1" ] then # Running Strategy 1 echo " " for (( i = 2 ; i <= 8; i++ )) # for each available proc. echo "Running $j Strategy for $i computing proc on 10^$k " mpirun -np $i -machinefile lista somma_parallela -b $k \ -str $j >> str$j_n$k.dat ne else # Running Strategy 2 or 3 echo " " for i in # Must be in logarithmic scale echo "Running $j Strategy for $i computing proc on 10^$k " mpirun -np $i -machinefile lista somma_parallela -b $k \ -str $j >> str$j_n$k.dat ne fi ne ne Printed: 07/05/07 21:36 Page 1
27 /Volumes/EsternoMac/Universita/Calcolo Parallelo/Esercizi/Somma/Codice/script.sh # Ideal time comparsion for k in for j in 3 4 rm -f ideale?.dat; if [ "$k" -eq "1" ] then for (( i=2 ; i <= 8 ; i++ )) cat str1_n$j.dat awk ' if ($1 == 2) print $2 ' \ tail -n 1 >> ideale1.dat ne cat ideale1.dat awk ' print $1/NR ' >> ideale2.dat cat ideale2.dat awk ' print NR+1, $0 ' >> ideale3.dat else for i in cat str$k_n$j.dat awk ' if ($1 == 2) print $2 ' \ tail -n 1 >> ideale1.dat ne cat ideale1.dat awk ' if (NR == 1) print 2, $1 \ if (NR == 2) print 4, $1 if (NR == 3) print 8, $1 ' \ >> ideale2.dat cat ideale2.dat awk ' if (NR == 1) print $1, $2 if (NR == 2) \ \ print $1, $2/2 if (NR == 3) print $1, $2/4 ' >> ideale3.dat fi rm -f Ideale_str$k_n$j.dat; mv ideale3.dat Ideale_str$k_n$j.dat rm -f ideale?.dat; ne ne Printed: 07/05/07 21:36 Page 2
28 /Volumes/EsternoMac/Universita/Calcolo Parallelo/Esercizi/Somma/Codice/script.sh echo " " # SPEED UP TEST # Executable launch for each study case for j in # Strategy variable for k in 3 4 # Computational size 10 ^3-10 ^ 4 #cleaning rm -f speed.dat rm -f speed?.dat echo "Speed Up : Running $j Strategy for 1 computing proc on 10^$k" mpirun -np 1 -machinefile lista somma_parallela -b $k -str $j >> \ speed.dat if [ "$j" -eq "1" ] then # Running Strategy 1 for (( i=2 ; i <= 8 ; i++ )) cat speed.dat awk ' print $2 ' >> speed1.dat ne else # Running Strategy 2 or 3 for i in cat speed.dat awk ' print $2 ' >> speed1.dat ne fi paste str$j_n$k.dat speed1.dat >> speed2.dat cat speed2.dat awk ' print $3/$2 ' >> speed3.dat cat speed3.dat awk 'if ($1 >= 10 ) printf("%8.6f\n",$1) \ if ($1 < 10 ) printf("%8.7f\n",$1 ) ' >> speed4.dat cat Ideale_str$j_n$k.dat awk 'if ($2 >= 10 ) printf("%8.6f\n",$2)\ if ($2 < 10 ) printf("%8.7f\n",$2 ) ' >> speed5.dat paste str$j_n$k.dat speed5.dat speed4.dat >> speed6.dat cat speed6.dat awk ' print $4/$1 ' >> speed7.dat ; echo -e "# P\tT(p)\t\tT(ideale)\tSpeedUp(p)\tEfficienza" \ >> Strategia$j_n$k.dat paste speed6.dat speed7.dat >> Strategia$j_n$k.dat ne ne Printed: 07/05/07 21:36 Page 3
29 /Volumes/EsternoMac/Universita/Calcolo Parallelo/Esercizi/Somma/Codice/script.sh echo " " # Cleaning and plotting rm -f speed.dat rm -f speed?.dat rm -r -f Grafici mkdir Grafici echo "Cleaning GRAPHIC :... " rm -f *.ps; echo "Plotting... " gnuplot script_plot.gp mv *.ps Grafici/ echo " " #Cleaning rm -f Ideale* rm -f str* # File dat aggregation in one big file and cleaning echo "Cleaning Tempi.dat..." rm -f Tempi.dat; echo "Test effettuati il : " >>Tempi.tmp; date >> Tempi.tmp; echo "" >> Tempi.tmp echo "" >> Tempi.tmp more *.dat >> Tempi.tmp rm -f *.dat; mv Tempi.tmp Tempi.dat echo "Cleaning executable..." rm -f somma_parallela; echo "Cleaning executable.o..." rm -f somma_parallela.o; echo " SCRIPT -- END " Printed: 07/05/07 21:36 Page 4
30 /Volumes/EsternoMac/Universita/Calcolo Parallelo/Esercizi/Somma/Codice/script_plot.gp set term postscript eps enhanced color solid set autoscale # scale axes automatically unset log # remove any log-scaling unset label # remove any previous labels set xtic auto # set xtics automatically set ytic auto # set ytics automatically set xlabel "Numero di Processori" font "Times-Roman,25" set ylabel "Tempo (sec) in log " font "Times-Roman,30" set xr [1:9] set logscale y set yr [0.2:20] set output "GraficoTempi_str1.ps" set title "Grafico dei tempi - Prima strategia" font "Times-Roman,40" plot "str1_n4.dat" smooth csplines title '10^4 Dati' with lines lw 4 lt 1,\ "str1_n4.dat" notitle with points lw 5 lt 1,\ "Ideale_str1_n4.dat" smooth csplines title 'Ideale' with lines lw 2 lt 2,\ "str1_n3.dat" smooth csplines title '10^3 Dati' with lines lw 4 lt 3,\ "str1_n3.dat" notitle with points lw 5 lt 3,\ "Ideale_str1_n3.dat" smooth csplines title 'Ideale' with lines lw 2 lt 4 set output "GraficoTempi_str2.ps" set title "Grafico dei tempi - Seconda strategia" font "Times-Roman,40" plot "str2_n4.dat" smooth csplines title '10^4 Dati' with lines lw 4 lt 1,\ "str2_n4.dat" notitle with points lw 5 lt 1,\ "Ideale_str2_n4.dat" smooth csplines title 'Ideale' with lines lw 2 lt 2,\ "str2_n3.dat" smooth csplines title '10^3 Dati ' with lines lw 4 lt 3,\ "str2_n3.dat" notitle with points lw 5 lt 3,\ "Ideale_str2_n3.dat" smooth csplines title 'Ideale' with lines lw 2 lt 4 set output "GraficoTempi_str3.ps" set title "Grafico dei tempi - Terza strategia" font "Times-Roman,40" plot "str3_n4.dat" smooth csplines title '10^4 Dati' with lines lw 4 lt 1,\ "str3_n4.dat" notitle with points lw 5 lt 1,\ "Ideale_str3_n4.dat" smooth csplines title 'Ideale' with lines lw 2 lt 2,\ "str3_n3.dat" smooth csplines title '10^3 Dati ' with lines lw 4 lt 3,\ "str3_n3.dat" notitle with points lw 5 lt 3,\ "Ideale_str3_n3.dat" smooth csplines title 'Ideale' with lines lw 2 lt 4 unset log # remove any log-scaling Printed: 07/05/07 21:43 Page 1
31 /Volumes/EsternoMac/Universita/Calcolo Parallelo/Esercizi/Somma/Codice/script_plot.gp set yr [1:9] set ylabel "Tempo (sec) " font "Times-Roman,30" set output "GraficoSpeedUp_str1.ps" set title "Grafico dello Speed Up - Prima strategia" font "Times-Roman,40" plot "Strategia1_n3.dat" using 1:4 smooth csplines title '10^3 Dati' with lines lw 8 lt 1,\ "Strategia1_n3.dat" using 1:4 notitle with points lw 5 lt 1,\ "Strategia1_n3.dat" using 1:1 smooth csplines title 'Ideale' with lines lw 2 lt 3 set output "GraficoSpeedUp_str2.ps" set title "Grafico dello Speed Up - Seconda Strategia" font "Times-Roman,40" plot "Strategia2_n3.dat" using 1:4 smooth csplines title '10^3 Dati' with lines lw 8 lt 1,\ "Strategia2_n3.dat" using 1:4 notitle with points lw 5 lt 1,\ "Strategia2_n3.dat" using 1:1 smooth csplines title 'Ideale' with lines lw 2 lt 3 set output "GraficoSpeedUp_str3.ps" set title "Grafico dello Speed Up - Terza Strategia" font "Times-Roman,40" plot "Strategia3_n3.dat" using 1:4 smooth csplines title '10^3 Dati' with lines lw 8 lt 1,\ "Strategia3_n3.dat" using 1:4 notitle with points lw 5 lt 1,\ "Strategia3_n3.dat" using 1:1 smooth csplines title 'Ideale' with lines lw 2 lt 3 set yr [0.5:1.5] set output "GraficoEfficienza_str1.ps" set title "Grafico Efficienza - Prima strategia" font "Times-Roman,40" plot "Strategia1_n3.dat" using 1:5 smooth csplines title '10^3 Dati' with lines lw 8 lt 1,\ "Strategia1_n3.dat" using 1:5 notitle with points lw 5 lt 1,\ 1 title 'Ideale' with lines lw 2 lt 3 set output "GraficoEfficienza_str2.ps" set title "Grafico Efficienza - Seconda strategia" font "Times-Roman,40" plot "Strategia2_n3.dat" using 1:5 smooth csplines title '10^3 Dati' with lines lw 8 lt 1,\ "Strategia2_n3.dat" using 1:5 notitle with points lw 5 lt 1,\ 1 title 'Ideale' with lines lw 2 lt 3 set output "GraficoEfficienza_str3.ps" set title "Grafico Efficienza - Terza strategia" font "Times-Roman,40" plot "Strategia3_n3.dat" using 1:5 smooth csplines title '10^3 Dati' with lines lw 8 lt 1,\ "Strategia3_n3.dat" using 1:5 notitle with points lw 5 lt 1,\ 1 title 'Ideale' with lines lw 2 lt 3 Printed: 07/05/07 21:43 Page 2
Prodotto Matrice - Vettore in MPI II Strategia
Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Esercitazione di Calcolo Parallelo Prodotto Matrice - Vettore in MPI II Strategia Anno Accademico 2010/2011 Prof.ssa Alessandra D'alessio
DettagliAlcuni 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
DettagliERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }
ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il
DettagliLe etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j
L insieme delle istruzioni (2) Architetture dei Calcolatori (lettere A-I) Istruzioni per operazioni logiche: shift Shift (traslazione) dei bit di una parola a destra o sinistra sll (shift left logical):
DettagliMPI è 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
DettagliSomma di un array di N numeri in MPI
Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Elaborato di Calcolo Parallelo Somma di un array di N numeri in MPI Anno Accademico 2011/2012 Professoressa Alessandra D Alessio Studenti
DettagliRicerca binaria (o dicotomica) di un elemento in un vettore
Ricerca binaria (o dicotomica) di un elemento in un La ricerca binaria o dicotomica è utilizzata per ricercare i dati in un ORDNATO. L algoritmo di ricerca binaria, dopo ogni confronto, scarta metà degli
DettagliA.d'Alessio. Calcolo Parallelo. Esempi di topologie
Message Passing Interface MPI Le topologie 1 Esempi di topologie Anello Griglia Toro L utilizzo di una topologia per la progettazione di un algoritmo in ambiente MIMD è spesso legata alla geometria intrinseca
DettagliPolitecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.
Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione prof. Lorenzo Porcelli e mail: genna18@iol.it sito: users.iol.it/genna18 Risoluzione di un problema Dato
DettagliLezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit
Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione
DettagliStringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche
Fondamenti di Informatica T-1 modulo 2 Laboratorio 04: stringhe 1 Stringhe In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche terminatore
DettagliIl linguaggio di programmazione Python
Università Roma Tre Dipartimento di Matematica e Fisica Percorso Abilitante Speciale Classe A048 Matematica Applicata Corso di Informatica Il linguaggio di programmazione Python Marco Liverani (liverani@mat.uniroma3.it)
DettagliBreve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN
Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...
DettagliSistemi operativi Modulo II I semafori 2 Select
Il sistema operativo LINUX Semafori 2 Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica La system call read è bloccante Non
DettagliEsercitazione 6. Array
Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
DettagliESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -
ESERCIZI DI PROGRAMMAZIONE - condizionali e cicli - Elementi di Informatica e Programmazione Università di Brescia 1 Esercizio 1: dal tema d esame ING-INF del 28 gennaio 2009 Si sviluppi un programma in
DettagliLinguaggi di Programmazione
Linguaggi di Programmazione Linguaggi di Programmazione Programmazione. Insieme delle attività e tecniche svolte per creare un programma (codice sorgente) da far eseguire ad un computer. Che lingua comprende
DettagliFunzioni e. Alessandra Giordani Mercoledì 16 maggio 2012
Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni
DettagliCapitolo 5 - Funzioni
Capitolo 5 - Funzioni Divide and conquer Introduzione Costruire un programma da pezzi più piccoli o da singole componenti Questi pezzi più piccoli sono chiamati moduli Ogni singolo pezzo è più facilmente
DettagliApprossimazione dell esponenziale
Approssimazione dell esponenziale Si calcola l approssimazione di exp(x) mediante sviluppo in serie di Taylor opportunamente troncato. Più precisamente, per ogni fissato valore di x (si considereranno
DettagliPerché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
DettagliProva di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:
Prova di Laboratorio del 12.1.2005 [durata 90 min.] Corso A-B di Programmazione (A.A. 2004/05) 1. Leggere da tastiera un insieme di numeri interi ed inserirli in un vettore A 2. Calcolare tramite una funzione
DettagliCapitolo 6 - Array. Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.
1 Capitolo 6 - Array Array Array Gruppo di locazioni di memoria consecutive Stesso nome e tipo Per riferirsi a un elemento, specificare Nome dell array Posizione Formato: arrayname[ position number ] Primo
DettagliComplementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -
Complementi - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system - Università degli Studi di Brescia Prof. Massimiliano Giacomin
DettagliEsempio di Prova Scritta
Esempio di Prova Scritta La prova scritta è composta da alcuni esercizi per un totale di 10 punti (durata:circa 1h15 ). Le tipologie di esercizi possibili comprendono:! sintesi di una funzione ricorsiva/iterativa,
DettagliIstruzioni iterative (o cicliche)
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Istruzioni iterative (o cicliche) Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 6 - Liste Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
DettagliRicerca sequenziale di un elemento in un vettore
Ricerca sequenziale di un elemento in un vettore La ricerca sequenziale o lineare è utilizzata per ricercare i dati in un vettore NON ordinato. L algoritmo di ricerca sequenziale utilizza quan non ha alcuna
DettagliEsercizio 1 - cicli. Esercizio 1 cicli - Soluzione
Sequenze di cifre Esercizio 1 - cicli Realizzare un programma che prende in input una sequenza di cifre (tra 1 e 9) e calcola la somma massima fra le sotto- sequenze di cifre non decrescente Il programma
DettagliCompitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A
Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare
DettagliLe Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni
Le Strutture di controllo Del Linguaggio C Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni STRUTTURE DI CONTROLLO PRIMITIVE SEQUENZA SELEZIONE (o scelta logica) ITERAZIONE NON PRIMITIVE
DettagliLe Funzioni e la Ricorsione
Aula V Dip. di Matematica G. Castelnuovo Univ. di Roma La Sapienza Le Funzioni e la Ricorsione Igor Melatti Slides disponibili (assieme ad altro materiale) in: http://www.dsi.uniroma1.it/ melatti/programmazione1.2007.2008.html
DettagliL utility Unix awk [Aho-Weinberger-Kernighan]
L utility Unix awk [Aho-Weinberger-Kernighan] L utility awk serve per processare file di testo secondo un programma specificato dall utente. L utility awk legge riga per riga i file ed esegue una o più
Dettaglifile fisico file logico
I files Un file è una struttura di dati residente su una memoria di massa (file fisico) Un programma vede un file come una sequenza di bytes (file logico) Generalizzando, un file può comprendere qualsiasi
DettagliUNIVERSITA DEGLI STUDI DI NAPOLI FEDERICO II
UNIVERSITA DEGLI STUDI DI NAPOLI FEDERICO II PROGETTO DI CALCOLO PARALLELO SOMMA DEGLI ELEMENTI DI UN VETTORE STUDENTE Gabriele Piantadosi (885/000282) 1. OBIETTIVI E AMBIENTE DI CALCOLO Si vuole distribuire
DettagliArray e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 12 Array e Oggetti A. Miola Dicembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Array e Oggetti 1 Contenuti Array paralleli
DettagliLezione 5 Sottoarray di somma massima
Lezione 5 Sottoarray di somma massima Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 1 My strcat 1 Esercizio Implementare
DettagliLezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22
Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)
DettagliShell scripting. Turing completi approccio procedurale non tipati (l'unico tipo disponibile è la stringa) interpretati
Shell scripting Shell scripting la shell è uno strumento potente per l'esecuzione di comandi arbitrariamente complessi ciò nonostante, per automatizzare l'esecuzione di compiti lunghi e ripetitivi, ogni
DettagliDefinizione di metodi in Java
Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un
DettagliUNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi
UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Matlab: esempi ed esercizi Sommario e obiettivi Sommario Esempi di implementazioni Matlab di semplici algoritmi Analisi di codici Matlab Obiettivi
DettagliUn algoritmo realizza una relazione funzionale tra i valori di input e quelli di output
Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output F = { (s, s ) } per ogni s esiste una e una sola coppia (s, s ). Esempio: un algoritmo che calcola il quadrato di
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
DettagliLaboratorio Progettazione Web Le funzioni in PHP. Angelica Lo Duca IIT-CNR 2012/2013
Laboratorio Progettazione Web Le funzioni in PHP Angelica Lo Duca IIT-CNR angelica.loduca@iit.cnr.it 2012/2013 Funzioni Una funzione è una sequenza di istruzioni che implementano una specifica funzionalità
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 3 - Array Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
DettagliValutazione delle prestazioni
Valutazione delle prestazioni Architetture dei Calcolatori (lettere A-I) Valutazione delle prestazioni Misura/valutazione di un insieme di parametri quantitativi per Quantificare le caratteristiche di
DettagliValutazione delle prestazioni. Valutazione delle prestazioni. Tempo di risposta e throughput. Prestazioni e tempo di esecuzione
Valutazione delle prestazioni Valutazione delle prestazioni Architetture dei Calcolatori (lettere A-I) Misura/valutazione di un insieme di parametri quantitativi per Quantificare le caratteristiche di
DettagliEsercitazione 12. Esercizi di Ricapitolazione
Esercitazione 12 Esercizi di Ricapitolazione Esercizio Scrivere un programma che, dato un numero intero positivo, stampa la sua rappresentazione binaria. ALGORITMO Scriviamo una procedura stampa_bin che,
DettagliLABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice
LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 18.III.2015 VINCENZO MARRA Indice Parte 1. L algoritmo euclideo 3 Esercizio 1 3 L algoritmo euclideo
DettagliSi digita login e password e si clicca su accedi. Si apre la finestra di collegamento:
Corso di Laurea Specialistica Ingegneria Informatica Laboratorio di Calcolo Parallelo Prof. Alessandra d Alessio GUIDA AL LABORATORIO DI CALCOLO PARALLELO Il progetto SCoPE (www.scope.unina.it) ha messo
DettagliLinguaggio C: introduzione
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: introduzione La presente dispensa e da utilizzarsi
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliRaccolta degli esercizi svolti in aula
Raccolta degli esercizi svolti in aula ed esercizi proposti Alfredo Paolillo apaolillo@unisa.it Versione del: 18 marzo 2011 1 3 marzo 2010: Struttura Sequence e Sub-VI La struttura Sequence permette di
DettagliARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.
3 ITI - a.s. 2007-2008 Compiti di Informatica ESTATE 2008 ARRAY E STRINGHE Scrivere una funzione che carica da tastiera un array di n elementi e lo stampa invertendo il primo elemento con l'ultimo, il
DettagliPuntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
DettagliJavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132
JavaScript Core Language Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132 Condizioni L utilizzo di operatori relazionali e logici consente di formulare delle condizioni
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E03 Esempi di algoritmi e programmi A. Miola Novembre 2011 1 Contenuti q Progettazione di algoritmi q Problemi di ingresso - uscita
DettagliLaboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/05/08 Nota Questi lucidi sono tratti
DettagliIntroduzione a GCC: GNU Compiler Collection
Introduzione a GCC: GNU Compiler Collection Caratteristiche di GCC Compilatore multipiattaforma modulare Disponibile per tutti i principali sistemi operativi Può produrre programmi per la maggior parte
DettagliTipici tempi di esecuzione. Martedì 7 ottobre 2014
Tipici tempi di esecuzione Martedì 7 ottobre 2014 Punto della situazione Abbiamo definito il tempo di esecuzione di un algoritmo Scelto l analisi asintotica Abbiamo definito le notazioni asintotiche che
DettagliStringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
Dettagliprova.c #include <stdio.h> char funzione(char); codice oggetto del main()
prova.c #include char funzione(char); {char c= a ; printf( Ecco il carattere: %c\n,c); c=funzione(c); printf( Ecco il carattere modificato: %c\n,c); char funzione(char tmp) {if(tmp
DettagliLezione 3: Programmazione della Shell di Unix
Lezione 3: Programmazione della Shell di Unix Laboratorio di Elementi di Architettura e Sistemi Operativi 2 Marzo 202 Parte : Soluzione degli esercizi Statistiche Ho ricevuto 2 soluzioni Tutte le soluzioni
DettagliInformatica Applicata al Suono Tutorial Matlab
Prof. Mario Malcangi malcangi@di.unimi.it MATLAB è un linguaggio di alto livello e un ambiente interattivo per il calcolo numerico, l'analisi e la visualizzazione dei dati e la programmazione. MATLAB consente
Dettagliin termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico
Click to edit Algoritmo Master title style algoritmo: un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si arresta in un tempo finito
DettagliCorso di Fondamenti di Informatica
Corso di Fondamenti di Informatica Le classi di istruzioni in C++ 1 Le classi di istruzioni in C++ SEQUENZIALI Statement semplice Statement composto CONDIZIONALI if < expr.> else switch case
DettagliOperazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliInformatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura
Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE Francesco Tura francesco.tura@unibo.it 1 Lo strumento dell informatico: ELABORATORE ELETTRONICO [= calcolatore = computer] Macchina multifunzionale Macchina
DettagliAlgoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo
1 Cos è l informatica? L informatica è la scienza della rappresentazione e dell elaborazione dell informazione Algoritmi e loro proprietà Proprietà formali degli Algoritmi Efficienza rispetto al tempo
DettagliIntroduzione a. Funzioni di Ingresso e Uscita. Compilazione
Introduzione a Funzioni di Ingresso e Uscita Compilazione 2 Come si termina...... un programma in esecuzione (processo)? Ctrl + C In UNIX ci si basa sul concetto di terminale Anche da GUI, quello che si
DettagliPrimi passi col linguaggio C
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta
DettagliIndice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX
Indice Prefazione Gli Autori Ringraziamenti dell Editore La storia del C XVII XXIX XXXI XXXIII PARTE A Capitolo 1 Computer 1 1.1 Hardware e software 2 1.2 Processore 3 1.3 Memorie 5 1.4 Periferiche di
DettagliUnità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.
Unità Didattica 1 Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C UNIX (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti
DettagliIl sistema operativo LINUX Semafori. Semaforo. Sommario. Sommario. Uso delle pipe. Gestione di semafori tramite pipe. Sistemi operativi Modulo II
Il sistema operativo LINUX Semafori Semaforo Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica Un semaforo è una variabile
DettagliACSO Programmazione di Sistema e Concorrente
ACSO Programmazione di Sistema e Concorrente P2 Modello Thread 2/12/2015 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio di informazione) necessario tra attività
DettagliCorso di Reti di Calcolatori L-A
Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 9 (svolta) RPC: Inizializzazione Strutture Dati sul Server Luca Foschini Anno accademico 2010/2011
DettagliManipolazioni elementari di flussi di testo strutturati
Manipolazioni elementari di flussi di testo strutturati L output di molti comandi è costituito da flussi di testo strutturati: ogni riga rappresenta una parte del risultato ed è divisa in campi (fields)
DettagliMacchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016
Macchine Astratte Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione 010194 29 feb, 2016 Sommario 1 Introduzione Macchina astratta Interprete Implementazione
DettagliProcedura operativa per la gestione della funzione di formazione classi prime
Procedura operativa per la gestione della funzione di formazione classi prime Questa funzione viene fornita allo scopo di effettuare la formazione delle classi prime nel rispetto dei parametri indicati
DettagliCorso di Fondamenti di Informatica Linguaggi di Programmazione
Corso di Fondamenti di Informatica Linguaggi di Programmazione Anno Accademico Francesco Tortorella Linguaggi di programmazione Un calcolatore basato sul modello di von Neumann permette l esecuzione di
DettagliSviluppare un programma in FORTRAN
Sviluppare un programma in FORTRAN Scrivere il file sorgente Editor di testo (emacs, vi, notepad, etc) Compilare Compilatore (ifort, gfortran, etc) Eseguire il programma Riga di comando, doppio click,
DettagliIDE DevC
IDE DevC++ 4.9.8.1.0 Manuale utente Data ultima revisione: 22/01/2005 Fondamenti di informatica Università Facoltà Corso di laurea Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria
DettagliAppunti del corso di Informatica 1. 6 Introduzione al linguaggio C
Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)
DettagliLinguaggio C. Esercizio 1
Linguaggio C Esercizi su puntatori e liste Walter Didimo (e-mail:didimo@dia.uniroma3.it) supplemento al Corso di Calcolatori Elettronici (Riccardo Torlone) 1 Esercizio 1 Siano p e q due puntatori a variabili
DettagliAlgoritmi e soluzione di problemi
Algoritmi e soluzione di problemi Dato un problema devo trovare una soluzione. Esempi: effettuare una telefonata calcolare l area di un trapezio L algoritmo è la sequenza di operazioni (istruzioni, azioni)
DettagliAppunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C
Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)
DettagliEsercizio 1. Esercizio 1 - Soluzione
Esercizio 1 Progettare e Codificare in C un programma che permetta di Chiedere all utente quanti numeri vuole inserire Leggere i numeri inseriti dall utente e calcolare la somma dei fattoriali Esempio:
DettagliL Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento
DettagliDirectory. Le directory unix sono file.
Le directory unix sono file. Directory Molte system call per i file ordinari possono essere utilizzate per le directory. E.g. open, read, fstat, close. Tuttavia le directory non possono essere create con
DettagliStrategie di programmazione
Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie
Dettagligiapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL
Materiale di ausilio utilizzabile durante l appello: tutto il materiale è a disposizione, inclusi libri, lucidi, appunti, esercizi svolti e siti Web ad accesso consentito in Lab06. L utilizzo di meorie
DettagliFondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 5A di Mercoledì 13 Luglio 2011 tempo a disposizione 2h
Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit5A.zip contenente i file necessari (progetto Visual Studio ed eventuali altri file di esempio). Avvertenze per la consegna:
DettagliEsercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);
Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di
DettagliINGEGNERIA E TECNOLOGIE DEI SISTEMI DI CONTROLLO Calcolo di funzioni non lineari
INGEGNERIA E TECNOLOGIE DEI SISTEMI DI CONTROLLO Calcolo di funzioni non lineari Prof. Carlo Rossi DEIS - Università di Bologna Tel: 051 2093020 email: crossi@deis.unibo.it Calcolo di funzioni non lineari
DettagliSmallShell Piccolo processore comandi
SmallShell Piccolo processore comandi /* file smallsh.h */ #include #include #define EOL 1 #define ARG 2 #define AMPERSAND 3 #define SEMICOLON 4 #define RIDIRIN 5 #define RIDIROUT 6
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 1
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E03 Esempi di algoritmi e programmi A. Miola Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi di algoritmi e
DettagliLettura da tastiera e scrittura su monitor
Lettura da tastiera e scrittura su monitor Per poter leggere UN SINGOLO CARATTERE dalla tastiera e visualizzare UN SINGOLO CARATTERE sul monitor si possono utilizzare le funzioni: int getchar (void) (per
DettagliIl programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria p. 1
Il programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria R. Vitolo Dipartimento di Matematica Università di Lecce SaLUG! - Salento Linux User Group Il programma OCTAVE per l
DettagliShell: variabili di sistema. Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set
PATH Shell: variabili di sistema HOME USER PWD SHELL HOSTNAME HOSTTYPE Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set Shell: variabili di sistema Per visualizzare il
Dettagli