Valutazione delle prestazioni di programmi paralleli Moreno Marzolla Dip. di Informatica—Scienza e Ingegneria (DISI) Università di Bologna moreno.marzolla@unibo.it
Valutazione delle prestazioni Copyright © 2013, 2014, 2017 Moreno Marzolla, Università di Bologna, Italy (http://www.moreno.marzolla.name/teaching/HPC/) This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License (CC-BY-SA 4.0). To view a copy of this license, visit https://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. Valutazione delle prestazioni
Valutazione delle prestazioni Credits prof. David Padua https://courses.engr.illinois.edu/cs420/fa2012/lectures.ht ml Valutazione delle prestazioni
Valutazione delle prestazioni How fast can we run? 12 tasks, each one requiring 1s Total serial time: 12s 1 2 3 4 5 6 7 8 9 10 11 12 time Valutazione delle prestazioni Slide credit: Daivd Padua
Valutazione delle prestazioni How fast can we run? What if we have 3 processors and all tasks are independent? Execution time becomes 4s 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 P1 5 6 7 8 P2 9 10 11 12 P3 time Valutazione delle prestazioni Slide credit: Daivd Padua
Valutazione delle prestazioni How fast can we run? What if the processors can not execute the tasks with the same speed? Load imbalance (ending part of P2 and P3) 1 2 3 4 P1 5 6 7 8 P2 9 10 11 12 P3 time Valutazione delle prestazioni Slide credit: Daivd Padua
Valutazione delle prestazioni How fast can we run? What if tasks are dependent? Execution time grows from 4s to 6s 1 2 3 4 Dependency graph with highlighted critical path 5 6 7 8 9 10 11 12 1 2 3 4 P1 5 6 7 8 P2 9 10 11 12 P3 time Valutazione delle prestazioni Slide credit: Daivd Padua
Valutazione delle prestazioni Scalability How much faster can a given problem be solved with p workers instead of one? How much more work can be done with p workers instead of one? What impact for the communication requirements of the parallel application have on performance? What fraction of the resources is actually used productively for solving the problem? Valutazione delle prestazioni Slide credit: Daivd Padua
Valutazione delle prestazioni Speedup Definiamo p = Numero di processori / core Tserial = Tempo di esecuzione del programma sequenziale Tparallel (p) = Tempo di esecuzione del programma parallelo su p processori / core Valutazione delle prestazioni
Speedup Di solito si definisce Tserial = Tparallel(1) Speedup S(p) Nel caso ideale, il programma parallelo impiega 1/p del tempo del programma sequenziale Solitamente S(p) ≤ p S(p) = p è il caso ottimo di speedup lineare Quando può verificarsi S(p) > p ? 𝑆 𝑝 = 𝑇 serial 𝑇 parallel 𝑝 S(p) > p nel caso di 1) multicore eterogenei (e.g., processore Cell), oppure 2) effetti dovuti alle cache: aumentando p la dimensione dei sottoproblemi diminuisce, e potrebbe essere che si sfruttano meglio le cache di primo livello dei core Valutazione delle prestazioni
Porzioni non parallelizzabili Supponiamo che una frazione α del tempo di esecuzione sia dovuto ad una componente intrinsecamente seriale del programma Limitazioni algoritmiche (dipendenze tra codice) Colli di bottiglia (risorse condivise) Startup overhead Comunicazione Supponiamo che la rimanente frazione (1 - α) sia perfettamente parallelizzabile Avremo 𝑇 parallel 𝑝 = α 𝑇 serial + 1−α 𝑇 serial 𝑝 𝑇 parallel 𝑝 = α 𝑇 serial + 1−α 𝑇 serial 𝑝 𝑇 parallel 𝑝 = α 𝑇 serial + 1−α 𝑇 serial 𝑝 Valutazione delle prestazioni
Valutazione delle prestazioni Esempio p = 1 p = 2 p = 4 Porzione non parallelizzabile Tserial Tparallel(4) Tparallel(2) Tserial Porzione parallelizzabile 𝑇 parallel 𝑝 =α 𝑇 serial + 1−α 𝑇 serial 𝑝 (1 - ) Tserial Valutazione delle prestazioni
Valutazione delle prestazioni Esempio Un programma ha Tserial = 20s Il 90% del tempo di esecuzione è speso in una parte che può essere perfettamente parallelizzata Quindi il tempo di esecuzione della versione parallela con p processori si può esprimere come 𝑇 parallel 𝑝 = 0.1 𝑇 serial + 0.9 𝑇 serial 𝑝 = 2+ 18 𝑝 Valutazione delle prestazioni
Valutazione delle prestazioni Esempio (cont.) Lo speedup è Quale è lo speedup massimo ottenibile quando p → +∞ ? 𝑆 𝑝 = 𝑇 serial 0.1× 𝑇 serial + 0.9× 𝑇 serial 𝑝 = 20 2+ 18 𝑝 Valutazione delle prestazioni
Valutazione delle prestazioni Legge di Amdahl Quale è lo speedup massimo ottenibile? 𝑆 𝑝 = 𝑇 serial 𝑇 parallel 𝑝 = 𝑇 serial α 𝑇 serial + 1−α 𝑇 serial 𝑝 = 1 α+ 1−α 𝑝 Legge di Amdahl Gene Myron Amdahl (1922—) Valutazione delle prestazioni
Valutazione delle prestazioni Legge di Amdahl 𝑆 𝑝 = 1 α+ 1−α 𝑝 Da otteniamo che, per p tendente a +∞, lo speedup asintotico è 1 / α Se una frazione α di un programma seriale non è parallelizzabile, allora lo speedup è limitato superiormente da 1/α, indipendentemente dal numero di processori disposizione Valutazione delle prestazioni
Valutazione delle prestazioni Speedup Note: scala log-log Frazione non parallelizzabile 0.1% 1% 10% 20% Valutazione delle prestazioni
Valutazione delle prestazioni Esempio M. Marzolla, Fast Training of Support Vector Machines on the Cell Processor, Neurocomputing, Volume 74, Issue 17, October 2011, pp. 3700–3707, ISSN 0925-2312; disponibile all'indirizzo http://www.moreno.marzolla.name/publications/ Valutazione delle prestazioni
Valutazione delle prestazioni Esempio RS(n) = TSPE,n / TSPE,1 Valutazione delle prestazioni
Valutazione delle prestazioni Esempio Valutazione delle prestazioni
Valutazione delle prestazioni Scaling Efficiency Strong Scaling: Fissata la dimensione del problema, si incrementa il numero di processori p La quantità complessiva di lavoro svolto da tutti processori rimane costante La quantità di lavoro svolto da ciascun processore diminuisce all'aumentare di p L'obbiettivo è ridurre il tempo di esecuzione Weak Scaling: Fissata la quantità di lavoro svolto da ciascun processore, si aumenta il numero p di processori Quindi aumenta la quantità totale di lavoro svolto complessivamente dai p processori L'obbiettivo è di risolvere problemi “più grandi” Valutazione delle prestazioni
Strong Scaling Efficiency E(p) = Strong Scaling Efficiency dove Tserial = Tempo di esecuzione del programma sequenziale Tparallel (p) = Tempo di esecuzione del programma parallelo su p processori / core 𝐸 𝑝 = 𝑆 𝑝 𝑝 = 𝑇 serial 𝑝× 𝑇 parallel 𝑝 Valutazione delle prestazioni
Strong scaling efficiency e legge di Amdahl 0.1% 1% 10% 20% Frazione non parallelizzabile Valutazione delle prestazioni Nota: scala x logaritmica
Weak Scaling Efficiency W(p) = Weak Scaling Efficiency dove T1 = tempo necessario a completare 1 “unità di lavoro” con 1 processore Tp = tempo necessario a completare p “unità di lavoro” con p processori 𝑊 𝑝 = 𝑇 1 𝑇 𝑝 Valutazione delle prestazioni
Valutazione delle prestazioni Esempio Vedi omp-matmul.c demo-strong-scaling.sh calcola i tempi da usare per strong scaling (demo-strong-scaling.ods) demo-weak-scaling.sh calcola i tempi da usare per weak scaling (demo-weak-scaling.ods) Osservazione importante: Fissato n, la quantità di "lavoro" necessario per calcolare il prodotto tra due matrici n ´ n è Θ(n3) Per raddoppiare il lavoro, non dobbiamo raddoppiare n! La quantità di lavoro necessario per calcolare il prodotto di due matrici (2n ´ 2n) è Θ(8n3), cioè otto volte il caso n ´ n Per raddoppiare il lavoro, occorre usare una matrice di dimensione 3 2 𝑛 × 3 2 𝑛 Valutazione delle prestazioni
Misurazione dei tempi Per valutare sperimentalmente speedup ed efficienza, il tempo di esecuzione che viene misurato è il wall clock time del programma, ESCLUDENDO il tempo necessario a leggere l'input e a scrivere l'output. Parte in cui sono svolte le computazioni #include "hpc.h" ... double start, finish; /* eventuale lettura input da file; questo NON va considerato */ start = hpc_gettime(); /* parte di codice di cui vogliamo misurare il wall clock time */ finish = hpc_gettime(); printf(“The elapsed time = %e seconds\n”, finish – start); /* eventuale scrittura output su file; questo NON va considerato */ Valutazione delle prestazioni
Misurazione del wall-clock time Per i programmi OpenMP: omp_get_wtime() Per i programmi MPI: MPI_Wtime() Soluzione “generica”: clock_gettime() Soluzione SBAGLIATA: clock() NAME clock - Determine processor time SYNOPSIS #include <time.h> clock_t clock(void); DESCRIPTION The clock() function returns an approximation of processor time used by the program. Il problema del “processor time” è che viene sommato per tutti i core: questo significa ad esempio che un programma che impiega meta' del tempo se eseguito su due core ritornerà lo stesso processor time! Valutazione delle prestazioni
Postilla: Come presentare i risultati Valutazione delle prestazioni
Valutazione delle prestazioni Regole di base Presentare i risultati in modo da richiedere il minor sforzo possibile da parte del lettore Usare nomi piuttosto che simboli nella legenda Fornire abbastanza informazione da rendere il grafico autocontenuto, limitando i rimandi al testo Utilizzare pratiche comunemente accettate Mostrare ciò che la gente si aspetta: ci si aspetta che l'origine dei grafici sia (0,0); che la causa sia mostrata sull'asse x e l'effetto sull'asse y; ecc... Valutazione delle prestazioni
Utilizzare le scale degli assi in maniera adeguata Giocando con la scala dei grafici, è possibile enfatizzare oppure minimizzare le differenze Valutazione delle prestazioni
Valutazione delle prestazioni Mostrare tutti i dati Valutazione delle prestazioni
Attenzione a combinare i grafici Per rendere più “drammatico” l'effetto, si tende spesso a presentare due misure correlate tra loro sullo stesso grafico Speedup Wall clock time Num. of processors Valutazione delle prestazioni
Usare nomi piuttosto che simboli 1 job/sec m=2 2 job/sec m=3 3 job/sec Valutazione delle prestazioni
Non collegare punti se i valori intermedi non esistono MIPS 68000 68010 68020 68030 CPU Type Valutazione delle prestazioni
Valutazione delle prestazioni Grafico inutile 123.54 Valutazione delle prestazioni
Valutazione delle prestazioni Consigli vari Tutte le immagini (inclusi i grafici) devono includere una didascalia con la numerazione e la descrizione Idealmente la descrizione dovrebbe essere sufficientemente completa da consentire al lettore di interpretare il grafico anche senza leggere la spiegazione presente nel testo Tutte le immagini devono essere richiamate e descritte nel corpo del documento Valutazione delle prestazioni
Valutazione delle prestazioni Esempio Valutazione delle prestazioni
Example of very good graphic Modern redrawing of Charles Minard's map of Napoleon's disastrous Russian campaign of 1812. The graphic is notable for its representation in two dimensions of six types of data: the number of Napoleon's troops; distance; temperature; the latitude and longitude; direction of travel; and location relative to specific dates (Image and description from Wikipedia) Valutazione delle prestazioni
Valutazione delle prestazioni Per approfondire Edward R. Tufte, The Visual Display of Quantitative Information, 2nd ed., Graphics Press, 2011, ISBN 978-0961392147 Valutazione delle prestazioni