46
Programa¸c˜ ao Multicore: Como sobreviver a esta revolu¸c˜ ao? Paulo Ricardo Paz Vital IBM Linux Technology Center Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Programação Multicore: Como sobreviver a esta revolução?

Embed Size (px)

DESCRIPTION

CONISLI 2008, São Paulo, SP, Brazil

Citation preview

Page 1: Programação Multicore: Como sobreviver a esta revolução?

Programacao Multicore:Como sobreviver a esta revolucao?

Paulo Ricardo Paz Vital

IBM Linux Technology Center

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 2: Programação Multicore: Como sobreviver a esta revolução?

Sobre o palestrante...

Engenheiro de Computacao, UCDB, 2003

Engenheiro de Software, IBM Linux Technology Center:

IBM Installation Toolkit for Linux on POWERYabootIBM Server Consolidation ToolkitMulticore Development Tools - Cell IDE

Pesquisador do Instituto de Computacao da Unicamp:

Memorias TransacionaisProgramacao Multicore

Usuario, administrador e desenvolvedor de sistemas Unix-likedesde 1999

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 3: Programação Multicore: Como sobreviver a esta revolução?

Agenda

1 Introducao

A emergencia do Software MulticoreO que e Paralelismo?

2 Plataformas de concorrencia

MPIPthreadsOpenMP

3 20 questoes a fazer quando ir para multicore

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 4: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

Parte I

Introducao

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 5: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

1 A emergencia do Software MulticoreA Lei de Moore

2 O que e Paralelismo?A Lei de AmdahlUm modelo para execucao multithreaded

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 6: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de Moore

A Lei de Moore

Gordon Moore - cofundadorda Intel Corporation

Eletronics Magazine, 19 deAbril de 1965

Lei de Moore

O numero de transistores numa mesma area de semicondutordobra a cada 18 (24) meses.

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 7: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de Moore

A Lei de Moore

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 8: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de Moore

A Lei de Moore

Problemas?

Miniaturizacao chegando ao limite.

Dissipacao de calor.

Solucoes?

Novas tecnologias de gravacao de chips.

Mais de um nucleo, ou seja, multicore.

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 9: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de Moore

A Lei de Moore

Problemas?

Miniaturizacao chegando ao limite.

Dissipacao de calor.

Solucoes?

Novas tecnologias de gravacao de chips.

Mais de um nucleo, ou seja, multicore.

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 10: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de Moore

A Lei de Moore

Problemas?

Miniaturizacao chegando ao limite.

Dissipacao de calor.

Solucoes?

Novas tecnologias de gravacao de chips.

Mais de um nucleo, ou seja, multicore.

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 11: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de Moore

A Lei de Moore

Problemas?

Miniaturizacao chegando ao limite.

Dissipacao de calor.

Solucoes?

Novas tecnologias de gravacao de chips.

Mais de um nucleo, ou seja, multicore.

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 12: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de AmdahlUm modelo para execucao multithreaded

A Lei de Amdahl

”Speedup”

Quanto se ganhou com a execucao de uma tarefa em umcomputador paralelo?

seepdup =Temposerial

Tempoparalelo=

Ts

Tp(1)

Exemplo

Uma determinada tarefa, quando executada em um computadorconvencional consome 200 segundos e quando executada em umamaquina paralela (com 24 processadores) consome 10 segundos,entao

seepdup =Ts

Tp=

200

10= 20 (2)

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 13: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de AmdahlUm modelo para execucao multithreaded

A Lei de Amdahl

”Speedup”

Quanto se ganhou com a execucao de uma tarefa em umcomputador paralelo?

seepdup =Temposerial

Tempoparalelo=

Ts

Tp(1)

Exemplo

Uma determinada tarefa, quando executada em um computadorconvencional consome 200 segundos e quando executada em umamaquina paralela (com 24 processadores) consome 10 segundos,entao

seepdup =Ts

Tp=

200

10= 20 (2)

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 14: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de AmdahlUm modelo para execucao multithreaded

A Lei de Amdahl

Lei de Amdahl

Se somente uma fracao do programa sera otimizado, somente umafracao do benefıcio sera alcancado

seepdup =1

s + (1− s)/n(3)

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 15: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de AmdahlUm modelo para execucao multithreaded

A Lei de Amdahl

Exemplo

20% de um programa nao sera alterado

Serao utilizados 4 processadores para executar todo oprograma

Qual sera o ”speedup”?

Resolucao

20% +80%

4= 40% (4)

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 16: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de AmdahlUm modelo para execucao multithreaded

A Lei de Amdahl

Exemplo

20% de um programa nao sera alterado

Serao utilizados 4 processadores para executar todo oprograma

Qual sera o ”speedup”?

Resolucao

20% +80%

4= 40% (4)

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 17: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de AmdahlUm modelo para execucao multithreaded

Um modelo para execucao multithreaded

“dag model for multithreading”

vertices = conjunto de instrucoes

arestas = dependencias entre instrucoes

instrucao x precede instrucao y (x ≺ y), se x terminou antesde y comecar,

caso nao aconteca x ≺ y ou y ≺ x , entao dizemas que asinstrucoes estao em paralelo (x ‖ y)

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 18: Programação Multicore: Como sobreviver a esta revolução?

A emergencia do Software MulticoreO que e Paralelismo?

A Lei de AmdahlUm modelo para execucao multithreaded

Um modelo para execucao multithreaded

1 ≺ 2

6 ≺ 12

5 ‖ 9

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 19: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

Parte II

Plataformas de concorrencia

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 20: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

3 MPI

4 PThreads

5 OpenMP

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 21: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

MPI

MPI (Message Passing Interface) e uma biblioteca desubrotinas de comunicacao, utilizadas em ambientes dememoria distribuıda, maquinas paralelas massivas, NOWs(network of workstations) e redes heterogeneas.

Informacoes passadas da memoria local do processo para amemoria principal do processo remoto.

Paralelismo e explicito, ou seja, o desenvolvedor e responsavelpela distribuicao.

API predominante no desenvolvimento de aplicacoes paraclusters cientıficos.

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 22: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

MPI

Diversas implementacoes;

OpenMPI - http://www.open-mpi.org/LAM/MPI - http://www.lam-mpi.org/Los Alamos MPI - http://public.lanl.gov/lampi/MPICH - http://www-unix.mcs.anl.gov/mpi/mpich/MPICH2 - http://www-unix.mcs.anl.gov/mpi/mpich2/

Alguns pontos antes de comecar:

MPI assume que vai trabalhar com processos.MPI assume que nao o mesmo espaco de enderecamento dememoria sera compartilhado.Todos os processos podem usar operacoes de IO.Nao pense em ”regioes paralelas”.MPI opera via ”function calls”.

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 23: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

MPI

Estrutura basica de um programa MPI

/* add in MPI startup routines *//* 1st: launch the MPI processes on each node */MPI_Init(&argc,&argv);

/* 2nd: request a thread id, sometimes called a "rank"from the MPI master process, which has tid == 0 */

MPI_Comm_rank(MPI_COMM_WORLD, &tid);

/* 3rd: this is often useful, get the number ofthreads or processes launched by MPI */

MPI_Comm_size(MPI_COMM_WORLD, &nthreads);

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 24: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

MPI

hello-mpi

hello-mpi-2

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 25: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

PThreads

POSIX Threads e um padrao POSIX que define uma API paracriar e manipular threads.

Conjunto de tipos e chamadas para linguagem deprogramacao C

Caracterısticas

Threads co-existem num mesmo processo, compartilhandovarios recursos, mas sao escalonadas separadamente pelosistema operacional

Somente o mınimo necessario de recursos sao replicados entreas duas threads

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 26: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

PThreads

Criando e Terminando Threads

pthread_create (thread,attr,start_routine,arg)

pthread_exit (status)

pthread_attr_init (attr)

pthread_attr_destroy (attr)

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 27: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

PThreads

Unindo e Desunindo Threads

pthread_join (threadid,status)

pthread_detach (threadid,status)

pthread_attr_setdetachstate (attr,detachstate)

pthread_attr_getdetachstate (attr,detachstate)

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 28: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

PThreads

Criando e Destruindo Mutex

pthread_mutex_init (mutex,attr)

pthread_mutex_destroy (mutex)

pthread_mutexattr_init (attr)

pthread_mutexattr_destroy (attr)

Travando e Destravando Mutex

pthread_mutex_lock (mutex)

pthread_mutex_trylock (mutex)

pthread_mutex_unlock (mutex)Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 29: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

PThreads

hello

hello arg1

join

mutex

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 30: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

OpenMP

http://www.openmp.org

Biblioteca de mais alto nıvel para programac~aoparalela

Suporta memoria compartilhada

C/C++ e Fortran (requer suporte do compilador)

Programador possui controle total sobre aexecuc~ao paralela

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 31: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

OpenMP

Caracterısticas

Biblioteca para paralelizacao de codigo

Usa #pragma para definir as regioes paralelas

Detecta automaticamente o numero de processadores

Restricoes

Programador necessita fornecer os #pragmas

Nao existe deteccao de conflitos

Exige compilador - nao e apenas uma biblioteca

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 32: Programação Multicore: Como sobreviver a esta revolução?

MPIPThreadsOpenMP

OpenMP

openmp hello

ImageMagick

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 33: Programação Multicore: Como sobreviver a esta revolução?

Desempenho da aplicacaoConfiabilidade de Software

Tempo de desenvolvimento

Parte III

20 questoes a fazer quando ir para multicore

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 34: Programação Multicore: Como sobreviver a esta revolução?

Desempenho da aplicacaoConfiabilidade de Software

Tempo de desenvolvimento

6 Desempenho da aplicacao

7 Confiabilidade de Software

8 Tempo de desenvolvimento

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 35: Programação Multicore: Como sobreviver a esta revolução?

Desempenho da aplicacaoConfiabilidade de Software

Tempo de desenvolvimento

20 questoes a fazer quando ir para multicore

Questoes sugeridas por Leiserson e Mirman para ajudar adeterminar a melhor plataforma de concorrencia de acordo com asnecessidades do projeto.Divididas de acordo com as tres arestas do triangulo do softwaremulticore: desempenho da aplicacao, confiabilidade de software etempo de desenvolvimento.

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 36: Programação Multicore: Como sobreviver a esta revolução?

Desempenho da aplicacaoConfiabilidade de Software

Tempo de desenvolvimento

20 questoes a fazer quando ir para multicore

1 A plataforma de concorrencia me permite medir o paralelismoexposto na minha aplicacao?

2 A plataforma de concorrencia indica o gargalo do tempo deresposta, ou somente oferece mais capaciadade?

3 O desempenho da aplicacao aumenta linearmente a medidaque mais cores sao adicionados, ou does it quickly reachdiminishing returns?

4 Meu codigo multicore sera mais rapido que meu codigo serialoriginal quando executado em um processador unico?

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 37: Programação Multicore: Como sobreviver a esta revolução?

Desempenho da aplicacaoConfiabilidade de Software

Tempo de desenvolvimento

20 questoes a fazer quando ir para multicore

5 Sera que o scheduler da plataforma de concorrenciabalanceara cargas (aplicacoes) irregulares de forma eficientepara alcancar plena utilizacao?

6 Minha aplicacao executara legal com outros jobs do sistema,ou jobs multiplos causarao problemas de recursos?

7 Quais ferramentas estao disponıveis para detectar gargalos dedesempenho multicore?

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 38: Programação Multicore: Como sobreviver a esta revolução?

Desempenho da aplicacaoConfiabilidade de Software

Tempo de desenvolvimento

20 questoes a fazer quando ir para multicore

8 Quao difıcil e depurar minha aplicacao multicore em relacao aaplicacao original?

9 Posso usar as ferramentas de depuracao que ja conheco?

10 Existem ferramentas de depuracao eficazes para identificar elocalizar erros em programacao paralela, como bugs de ”datarace”?

11 Devo usar um depurador paralelo mesmo se eu fizer um errode programacao serial ordinario?

12 Que mudancas devo fazer nos processos de lanamento paraassegurar que meu software entregue e confiavel?

13 Posso usar os testes unitarios e testes de regressao existentes?

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 39: Programação Multicore: Como sobreviver a esta revolução?

Desempenho da aplicacaoConfiabilidade de Software

Tempo de desenvolvimento

20 questoes para fazer quando ir para multicore

14 Para transformar minha aplicaaao em multicore, quanto dere-estruturacao logica precisso fazer?

15 Posso treinar facilmente programadores a usarem plataformasde concorrencia?

16 Posso manter somente uma base de codigo, ou devo manteruma versao serial e outra paralela?

17 Posso evitar de reescrever a minha aplicacao toda vez que umanova geracao de processadores aumenta o numero de cores?

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 40: Programação Multicore: Como sobreviver a esta revolução?

Desempenho da aplicacaoConfiabilidade de Software

Tempo de desenvolvimento

20 questoes a fazer quando ir para multicore

18 Posso facilmente habilitar codigo multicore mau-estruturada eirregular, ou a plataforma de concorrencia e limitada aosdados de aplicacoes paralelas?

19 As plataformas de concorrencia suportam modernasparadgmas de programacao, como objetos, templates eexceptions?

20 O que fazer para lidar com variaveis globais na minhaaplicacao?

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 41: Programação Multicore: Como sobreviver a esta revolução?

Referencias

Amdahl, G.; The validity of the single processor approach toachieving largescale computing capabilities, Proceedings of theAFIPS Spring Joint Computer Conference, 1967

Leiserson, C. E. and Mirman, I, B.; How to Survive theMulticore Software Revolution (or at Least Survive the Hype),e-Book, 2008http://www.cilk.com/multicore-e-book/

Landman, J.; MPI in Thirty Minutes, Linux Magazine, 2008http://www.linux-mag.com/id/5759/

Barney, B; Tutorial PThreads, Livermore Computing, 2008https://computing.llnl.gov/tutorials/pthreads/

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 42: Programação Multicore: Como sobreviver a esta revolução?

Referencias

Butenhof, D. R.; Programming with POSIX(R) Threads,Addison Wesley, 1997

Chapman, B., Jost, G., Pas, R.; Using OpenMP: PortableShared Memory Parallel Programming, MIT Press, 2007

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 43: Programação Multicore: Como sobreviver a esta revolução?

IBM Linux Technology Center

LTC e o braco armado da iniciativa IBM para com o softwarelivre

Desenvolvedores trabalham em cooperacao com a comunidadeOpen Source

E o centro de competencia tecnica para Linux na IBM

+640 pessoas e 38 localidades no mundo

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 44: Programação Multicore: Como sobreviver a esta revolução?

IBM Linux Technology Center

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 45: Programação Multicore: Como sobreviver a esta revolução?

Agradecimentos

Ao colega Higor Alves, pelo emprestimo de um laptop multicore :-D

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre

Page 46: Programação Multicore: Como sobreviver a esta revolução?

Perguntas?

Paulo Ricardo Paz Vital{pvital, vital}@br.ibm.comhttp://www.pvital.org

Paulo Ricardo Paz Vital CONISLI 2008 - Congresso Internacional de Software Livre