algoritimi avanzati modulo 2 - moreno.marzolla.name · introduzione al calcolo parallelo. algoritmi...

34
Algoritimi Avanzati Algoritimi Avanzati modulo 2 modulo 2 Moreno Marzolla Dip. di Informatica—Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/

Upload: phamngoc

Post on 17-Feb-2019

224 views

Category:

Documents


0 download

TRANSCRIPT

Algoritimi AvanzatiAlgoritimi Avanzatimodulo 2modulo 2

Moreno MarzollaDip. di Informatica—Scienza e Ingegneria (DISI)Università di Bologna

http://www.moreno.marzolla.name/

Algoritmi Avanzati--modulo 2 2

Copyright © 2013, 2014, Moreno Marzolla, Università di Bologna, Italy(http://www.moreno.marzolla.name/teaching/AA2014/)

This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License (CC-BY-SA). To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Algoritmi Avanzati--modulo 2 3

Presentiamoci

● Moreno Marzolla– [email protected]– http://www.moreno.marzolla.name/

● Algoritmi Avanzati modulo 2– 2 CFU (~ 20 ore di lezione)– Aspetti pratici della programmazione parallela– http://www.moreno.marzolla.name/teaching/AA2014/

● Orario– Martedì ore 13:30—16:30, aula Magna Anatomia Comparata– Mercoledì ore 13:30—15:30, stessa aula

● Ricevimento– Previo accordo via mail

Algoritmi Avanzati--modulo 2 4

Scopo del modulo

● Aspetti pratici della programmazione parallela– Concetti di base– Modelli di programmazione più diffusi– Pattern di programmazione parallela

● Progettare e sviluppare (semplici) applicazioni parallele usando MPI e OpenMP

● Misurare le prestazioni di applicazioni parallele

Algoritmi Avanzati--modulo 2 5

Caveat

● Abbiamo poco tempo a disposizione, ci dovremo concentrare su poche cose

● Alcuni argomenti interessanti non potranno essere affrontati– e.g., programmazione di GPU tramite CUDA/OpenCL...– ...ma se la cosa vi interessa possiamo riparlarne per la

tesi :-)

Algoritmi Avanzati--modulo 2 6

Testo adottato● Peter S. Pacheco,

An Introduction to Parallel Programming, Morgan Kaufmann 2011, ISBN 9780123742605

Algoritmi Avanzati--modulo 2 7

Prerequisiti

● Conoscenze di– Architetture dei calcolatori– Sistemi operativi– Reti di calcolatori (cenni)

● Linguaggio C– Serve per il progetto

Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, Second Edition Prentice Hall, Inc., 1988. ISBN 0-13-110362-8 (paperback), 0-13-110370-9 (hardback)

Algoritmi Avanzati--modulo 2 8

Programma del modulo

● Introduzione alle architetture parallele● Pattern per la programmazione parallela● Metriche per la valutazione delle prestazioni● Programmazione di architetture a memoria condivisa in

linguaggio C con OpenMP● Programmazione di architetture a memoria distribuita in

linguaggio C con MPI

Algoritmi Avanzati--modulo 2 9

Modalità d'esame● Progetto di programmazione da svolgere individualmente,

accompagnato da una breve relazione– Verrà proposto un progetto differente prima di ogni sessione

d'esami (invernale, estiva, autunnale)● I progetti consegnati restano validi fino alla sessione

d'esame di gennaio/febbraio 2016 (compresa)● I progetti devono essere consegnati prima di sostenere

l'esame del modulo 1– Le date di consegna verranno comunicate più avanti

● Il voto finale del corso viene calcolato come

( voto_modulo_1 * 4 + voto_modulo_2 * 2 ) / 6

Algoritmi Avanzati--modulo 2 10

Valutazione del progetto

● Comprensibilità● Correttezza● Efficienza● Qualità della relazione

Algoritmi Avanzati--modulo 2 11

Valutazione del progetto

● Comprensibilità● Correttezza● Efficienza● Qualità della relazione

I have seen things you people wouldn't believe. Attack ships on fire off the shoulder of Orion. I watched c-beams glitter in the dark near the Tannhäuser Gate. All those moments will be lost in time, like tears in rain. Time to die...

– Blade Runner

Algoritmi Avanzati--modulo 2 12

Introduzione al calcolo parallelo

Algoritmi Avanzati--modulo 2 13

High Performance Computing

● Molte applicazioni hanno bisogno di elevata potenza di calcolo – Meteorologia, fisica, ingegneria, animazione 3D, finanza...

● Perché?– Per risolvere problemi più complessi– Per risolvere gli stessi problemi in modo più accurato– Per risolvere gli stessi problemi in minor tempo– Per sfruttare al meglio le risorse disponibili– ...

Algoritmi Avanzati--modulo 2 14

I bei tempi andati...

Source: Hennessy, Patterson, Computer Architecture: A Quantitative Approach

Gordon E. Moore(1929– )

Algoritmi Avanzati--modulo 2 15

I bei vecchi tempi...

● Il vecchio “contratto” tra progettisti HW e SW– “Scrivete codice così come viene, tanto poi ci pensiamo noi

progettisti HW a costruire processori veloci per farlo girare a velocità accettabile”

● Risultato– Nessuno (sviluppatori di software, ma anche linguaggi di

programmazione) si cura più di ottimizzare il codice

Algoritmi Avanzati--modulo 2 16

Lezione di fisica● Transistor più piccoli =

processore più veloce● Processore più veloce

= maggiore energia consumata

● Maggiore energia consumata = maggiore calore prodotto

● Maggiore calore prodotto = processore non affidabile

Herb Sutter, The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software, Dr. Dobb's Journal, 30(3), March 2005, http://www.gotw.ca/publications/concurrency-ddj.htm

Algoritmi Avanzati--modulo 2 17

Che succede oggi?

● Per fornire prestazioni sempre più elevate, gli sviluppatori HW fanno la cosa più naturale– Creare processori con

un numero elevato di core

NVidia Tegra 4 SoC

Algoritmi Avanzati--modulo 2 18

Risultato

● La premessa– Abbiamo chip multi-core non perché gli sviluppatori SW

sappiano scrivere software parallelo, ma perché non è più possibile aumentare la frequenza di clock dei processori

● Il risultato– L'hardware parallelo è ovunque– Il software parallelo è raro

● La sfida– Il software parallelo deve diventare diffuso (ed efficiente!)

come l'hardware parallelo

Algoritmi Avanzati--modulo 2 19

Pian piano ci si arriva...

Algoritmi Avanzati--modulo 2 20

Il “Santo Graal”

● Da anni gli informatici tentano di sviluppare linguaggi di programmazione che “parallelizzano da soli”– In casi particolari i risultati sono positivi– In generale i risultati sono mediocri (quando va bene), o del

tutto inesistenti (quando va male)● Occorre quindi usare strumenti specifici e sviluppare

algoritmi efficienti che traggano vantaggio dalle caratteristiche specifiche dell'architettura parallela sottostante Qui entriamo in gioco noi

Fondamenti di Calcolo Parallelo 21

Nessuno pero' dice che sia facile...

Versione sequenziale(~49 righe di codice C++)

http://www.moreno.marzolla.name/software/svmcell/

Fondamenti di Calcolo Parallelo 22

Nessuno pero' dice che sia facile...

Versione sequenziale(~49 righe di codice C++)

Versione parallela (PPU+SPU)(~1000 righe di codice C/C++15 fogli A4)

http://www.moreno.marzolla.name/software/svmcell/

Algoritmi Avanzati--modulo 2 23

Esempio classico: somma

● Calcola la somma dei valori contenuti in un array A[0..n-1] di float

float seq_sum(float* A, int n){

int i;float sum = 0.0;for (i=0; i<n; i++)

sum += A[i];return sum;

}

Algoritmi Avanzati--modulo 2 24

Somma parallela (schema)

● p << n core numerati come 0..p-1

● my_id è l'indice del core che esegue l'algoritmo

● Ciascun core calcola la somma degli elementi di un sottovettore

● I core (tranne il master) inviano la somma parziale al core 0

...float my_sum = 0.0;int i;int my_id = …, my_start = …, my_end = …;

for ( i = my_start; i < my_end; i++ ) {my_sum += A[i];

}if ( my_id == 0 ) {

for ( i=1; i<p; i++ ) {float v = receive from core i;my_sum += v;

}printf(“The sum is %f\n”, my_sum);

} else {send my_sum to core 0;

}

Algoritmi Avanzati--modulo 2 25

Somma parallelaCore 0

A[ ]

my_sum

Core 1 Core 2 Core 3 Core 4 Core 5 Core 6 Core 7

1 3 -2 7 -6 5 3 4

15

4

2

9

3

8

11

Algoritmi Avanzati--modulo 2 26

Problema

● Il master è il collo di bottiglia, perché riceve p - 1 messaggi e deve eseguire p - 1 somme– Sbilanciamento del carico: nella seconda fase, l'operazione

di somma dei parziali viene svolta solo dal master● E' possibile calcolare la somma globale, partendo dai

risultati parziali, in maniera più bilanciata?

Algoritmi Avanzati--modulo 2 27

Somma parallelaCore 0

A[ ]

my_sum

Core 1 Core 2 Core 3 Core 4 Core 5 Core 6 Core 7

1 3 -2 7 -6 5 3 4

5 -1 7

6

15

4

9

● In tutto si eseguono p – 1 somme tra risultati parziali; il master (core 0) riceve log

2 p messaggi ed effettua log

2 p somme.

Algoritmi Avanzati--modulo 2 28

Coordinazione

● I processori devono coordinare il loro lavoro● Comunicazione

– Uno o più core inviano la propria somma parziale ad un altro core

● Bilanciamento del carico– Dividere il lavoro tra i core in maniera uniforme

● Sincronizzazione– Assicurarsi che il lavoro di ciascun core sia “allineato” a

quello degli altri

Algoritmi Avanzati--modulo 2 29

Come scrivere applicazioni parallele?

● Task Parallelism– Ciascun processore esegue un proprio thread (o processo)

che opera sugli stessi dati o su dati diversi– I thread possono eseguire lo stesso programma oppure, più

frequentemente, programmi diversi● Data Parallelism

– Si dividono i dati di input tra i vari core– I core eseguono sostanzialmente lo stesso programma sui

propri dati

Algoritmi Avanzati--modulo 2 30

EsempioTask Parallel vs Data Parallel

● Supponiamo di raccogliere in un foglio di calcolo (spreadsheet) le temperature giornaliere misurate durante un anno (365 giorni) in una certa località

● La temperatura viene registrata una volta all'ora (24 misurazioni giornaliere)

● Vogliamo calcolare, per ogni giorno, la temperatura massima, minima e media

● Numero di core a disposizione: 3

Algoritmi Avanzati--modulo 2 31

Esempio

max min ave0 1 2 3 22 23

Hour (0—23)

0

1

2

364

Day

s (0

—36

4)

Algoritmi Avanzati--modulo 2 32

Approccio data parallel

max min ave0 1 2 3 22 23

Hour (0—23)

0

1

2

364

Day

s (0

—36

4)

Core 0

Core 1

Core 2

Algoritmi Avanzati--modulo 2 33

Approccio task parallel

max min ave0 1 2 3 22 23

Hour (0—23)

0

1

2

364

Day

s (0

—36

4)

Cor

e 0

Cor

e 1

Cor

e 2

Algoritmi Avanzati--modulo 2 34

Conclusioni

● Le leggi della fisica ci hanno condotto verso le architetture di calcolo parallele

● I programmi sequenziali generalmente non traggono vantaggio dalla presenza di più processori (core)

● La parallelizzazione automatica (quando funziona) non sempre produce la soluzione migliore

● Imparare a scrivere programmi paralleli richiede di imparare a coordinare i processori a disposizione

● I programmi paralleli sono solitamente molto complessi e quindi richiedono tecniche adeguate di progettazione e sviluppo