1<br />Programação com OpenMP:O paralelismo ao alcance de todos<br />Prof. Dr. Gerson Geraldo H. Cavalheiro<br />
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />2<br />Sumário<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />3<br />Introdução...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />4<br />Objetivos ...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />5<br />Objetivos ...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />6<br />Arquitetur...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />7<br />Arquitetur...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />8<br />Arquitetur...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />9<br />Arquitetur...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />10<br />Arquitetu...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />11<br />Programaç...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />12<br />Programaç...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />13<br />Motivação...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />14<br />Sumário<b...
Arquiteturas multi-core</li></ul>Programação multithread<br />OpenMP<br />Prática de programação<br />Considerações finais...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />15<br />Arquitetu...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />16<br />Estado<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />17<br />Arquitetu...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />18<br />Estado<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />19<br />O multi-c...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />20<br />O multi-c...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />21<br />Ilustraçã...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />22<br />Sumário<b...
Arquiteturas multi-core
Programação multithread</li></ul>Ferramentas de programação<br />Prática de programação<br />Considerações finais<br />
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />23<br />Sumário<b...
Arquiteturas multi-core</li></ul>Programação multithread<br />OpenMP<br />Prática de programação<br />Considerações finais...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />24<br />Programaç...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />25<br />Programaç...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />26<br />Programaç...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />27<br />Programaç...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />28<br />Efeito da...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />29<br />Programaç...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />30<br />Programaç...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />31<br />Programaç...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />32<br />Programaç...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />33<br />Modelo<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />34<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />35<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />36<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />37<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />38<br />A()<br />...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />39<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />40<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />41<br />Memória<b...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />42<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />43<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />44<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />45<br />SMP<br />...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />46<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />47<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />48<br />Thread<br...
 ...</li></ul>Porém...<br />Escalonamento<br />Escalonamento<br />
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />49<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />50<br />Thread<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />51<br />Thread<br...
Acesso simultâneo a um dado por dois (ou mais) threads</li></ul>Postergação indefinida<br />Deadlock<br />Erro:<br />Não s...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />52<br />Caso de e...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />53<br />Sumário<b...
Arquiteturas multi-core
Programação multithread
OpenMP</li></ul>Prática de programação<br />Considerações finais<br />
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />54<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />55<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />56<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />57<br />API para ...
Variáveis de ambiente</li></ul>OMP_NOME<br /><ul><li>Identifica o número de atividades que serão executadas em paralelo</l...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />58<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />59<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />60<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />61<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />62<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />63<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />64<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />65<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />66<br />OpenMP<br...
Fork
Join
Cópia de dados privado ao thread
Seção paralela
Identificação do thread master</li></li></ul><li>Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<b...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />68<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />69<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />70<br />Dado comp...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />71<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />72<br />Novo núme...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />73<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />74<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />75<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />76<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />77<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />78<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />79<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />80<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />81<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />82<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />83<br />OpenMP<br...
Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />84<br />OpenMP<br...
Upcoming SlideShare
Loading in …5
×

XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª feira]

826 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
826
On SlideShare
0
From Embeds
0
Number of Embeds
97
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª feira]

  1. 1. 1<br />Programação com OpenMP:O paralelismo ao alcance de todos<br />Prof. Dr. Gerson Geraldo H. Cavalheiro<br />
  2. 2. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />2<br />Sumário<br /><ul><li>Introdução</li></ul>Arquiteturas multi-core<br />Programação multithread<br />OpenMP<br />Prática de programação<br />Considerações finais<br />
  3. 3. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />3<br />Introdução<br />Objetivos da apresentação<br />Arquitetura de von Neumann<br />Lei de Moore<br />Arquiteturas paralelas<br />Programação concorrente<br />Motivação da programação em multi-core<br />
  4. 4. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />4<br />Objetivos da apresentação<br />Desenvolver as habilidades de programação concorrente em arquiteturas multi-core.<br />Discutir os benefícios da utilização de arquiteturas multi-core no desenvolvimento de programas concorrentes.<br />Apresentar OpenMP, uma ferramenta para programação concorrente.<br />Abrir possibilidades de interação entre os cursos de Computação e de Meteorologia<br />
  5. 5. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />5<br />Objetivos da apresentação<br />Conceitos da arquitetura multi-core<br />Evolução<br />Arquitetura básica<br />Produtos de mercado<br />Programação concorrente<br />Conceitos e princípios<br />Programação concorrente e paralela<br />Componentes de um programa concorrente<br />Multiprogramação leve<br />
  6. 6. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />6<br />Arquitetura de von Neumann<br />Memória<br />Processador<br />Entrada<br />Saída<br />Unidade<br />de<br />controle<br />Unidade lógica<br />e aritmética<br />Banco de<br />registradores<br />Modelo de von Neumann(von Neumann, 1945)<br />Execução seqüencial<br />Memória para dados e programas<br />Efeito colateral<br />
  7. 7. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />7<br />Arquiteturas paralelas<br />Classificação de Flynn (Flynn, 1972)<br />Segundo fluxos de controle e de dados<br />Dados<br />Controle<br />
  8. 8. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />8<br />Arquiteturas paralelas<br />MIMD<br />Fracamente acoplado<br />Espaço de endereçamento múltiplo<br />Fortemente acoplado<br />Espaço de endereçamento único<br />UMA<br />Uniform Memory Access<br />NORMA<br />NOn-Remote Memory Access<br />NUMA<br />Non Uniform Memory Access<br />Classificação de Flynn (Flynn, 1972)<br />Classificação por compartilhamento de memória<br />Extensão a classificação de Flynn para a classe MIMD considerando a apresentação da memória<br />
  9. 9. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />9<br />Arquiteturas paralelas<br />UMA: Uniform Memory Access<br />Multiprocessador<br />Memória global a todos os processadores<br />Tempo de acesso idêntico a qualquer endereço de memória<br />P1<br />P2<br />Pp<br />. . .<br />Meio de<br />comunicação<br />. . .<br />M1<br />Mm<br />Configuração de uma máquina UMA com<br />p processadores e m módulos de memória<br />
  10. 10. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />10<br />Arquiteturas paralelas<br />UMA: Uniform Memory Access<br />SMP: Symmetric MultiProcessor<br />Os processadores são idênticos e operam como definido pela arquitetura von Neumann<br />O acesso a memória é compartilhado<br />P1<br />P2<br />Pp<br />. . .<br />Barramento ou crossbar<br />Memória<br />
  11. 11. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />11<br />Programação concorrente<br />Concorrência<br />Possibilidade de execução simultânea de dois ou mais fluxos de execução, não impedindo disputa por recursos<br />Importante: a definição inclui a idéia de disputa por recursos mas não é restrita à ela!<br />A concorrência incorpora a idéia de que existe uma convergência dos fluxos para um ponto comum<br />Uma eventual sincronização<br />A produção do resultado final<br />E também para idéia de ação colaborativa<br />
  12. 12. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />12<br />Programação concorrente<br />Concorrência<br />Indica independência temporal<br />O número de atividades concorrentes pode ser maior que a quantidade de recursos de processamento disponíveis<br />Paralelismo<br />Indica execução simultânea<br />A quantidade de recursos de processamento disponível permite que duas ou mais atividades sejam executadas simultaneamente<br />É usual utilizar a expressão programação paralela para o tipo de programação focada em desempenho<br />Na nossa terminologia, programação paralela e programação concorrente são utilizadas com o mesmo significado<br />
  13. 13. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />13<br />Motivação da programação em multi-core<br />Tendência<br />Limites tecnológicos para aumento de desempenho com foco no aumento da freqüência de clock<br />Arquiteturas com menor consumo de energia<br />Grande problema da sociedade moderna<br />Ainda mais cores no futuro próximo<br />Facilidade de exploração<br />Reflete naturalmente o modelo de programação multithread<br />Suportado pelos SOs atuais<br />Oportunidade<br />Migração das maioria das aplicações desenvolvidas para mono-core<br />Aumento de desempenho<br />Execução paralela de aplicações em HW de baixo custo<br />
  14. 14. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />14<br />Sumário<br /><ul><li>Introdução
  15. 15. Arquiteturas multi-core</li></ul>Programação multithread<br />OpenMP<br />Prática de programação<br />Considerações finais<br />
  16. 16. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />15<br />Arquiteturas multi-core<br />Arquitetura SMP<br />Multiprocessamento em um chip<br />O multi-core<br />Produtos comerciais<br />
  17. 17. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />16<br />Estado<br />Estado<br />Estado<br />Interrupção<br />Interrupção<br />Interrupção<br />ULA<br />ULA<br />ULA<br />Memória<br />Arquitetura SMP<br />Symmetric MultiProcessor<br />Arquitetura paralela dotada de um conjunto de processadores idênticos (simétricos) compartilhando acesso a uma área de memória comum<br />CPUs<br />
  18. 18. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />17<br />Arquitetura SMP<br />Symmetric MultiProcessor<br />Arquitetura paralela dotada de um conjunto de processadores idênticos (simétricos) compartilhando acesso a uma área de memória comum<br />SO único responsável pelo escalonamento de atividades (fluxos de execução) entre os processadores<br />Cada CPU replica todo conjunto de recursos necessários à execução de um fluxo.<br />Fator limitante de desempenho: contenção no acesso à memória<br />
  19. 19. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />18<br />Estado<br />Estado<br />Estado<br />Interrupção<br />Interrupção<br />Interrupção<br />ULA<br />ULA<br />ULA<br />O multi-core<br />Tecnologia em hardware na qual múltiplos cores são integrados em um único chip<br />Multiplicação total dos recursos de processamento<br />CPUs<br />(cores)<br />Processador<br />(chip)<br />Cache<br />Cache<br />Cache<br />Cache<br />Memória<br />
  20. 20. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />19<br />O multi-core<br />Tecnologia em hardware na qual múltiplos cores são integrados em um único chip<br />Multiplicação total dos recursos de processamento<br />Grande vantagem: compatível com os códigos existentes!<br />
  21. 21. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />20<br />O multi-core<br />Estado<br />Estado<br />Interrupção<br />Interrupção<br />Estado<br />Estado<br />Estado<br />Interrupção<br />Interrupção<br />Interrupção<br />ULA<br />ULA<br />ULA<br />ULA<br />Cache<br />Memória<br />Cache<br />Cache<br />Cache<br />Processador HyperThreading<br />Memória<br />Estado<br />Estado<br />Estado<br />Multiprocessador SMP<br />Interrupção<br />Interrupção<br />Interrupção<br />ULA<br />ULA<br />ULA<br />Cache<br />Memória<br />Processador multi-core<br />Comparativo – visão macro<br />
  22. 22. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />21<br />Ilustração<br />Multi-corearchitecture<br />http://cache-www.intel.com/cd/00/00/24/49/244978_244978.swf<br />Fonte: intel.com<br />Explore a dual core OpteronTM<br />http://www.amd.com/us-en/assets/content_type/Additional/33635BDual-CoreDiagramFIN.swf<br />Fonte: amd.com<br />Imagem ilustrativa<br />
  23. 23. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />22<br />Sumário<br /><ul><li>Introdução
  24. 24. Arquiteturas multi-core
  25. 25. Programação multithread</li></ul>Ferramentas de programação<br />Prática de programação<br />Considerações finais<br />
  26. 26. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />23<br />Sumário<br /><ul><li>Introdução
  27. 27. Arquiteturas multi-core</li></ul>Programação multithread<br />OpenMP<br />Prática de programação<br />Considerações finais<br />
  28. 28. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />24<br />Programação multithread<br />Programação concorrente<br />Thread<br />Casos de estudo<br />Paralelismo de tarefas<br />Paralelismo de dados<br />
  29. 29. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />25<br />Programação concorrente<br />Programação concorrente<br />Voltada às questões da aplicação<br />Programação paralela<br />Voltada às questões do hardware disponível<br />Execução concorrente<br />Competição no acesso a recursos de hardware<br />Execução paralela<br />Replicação de recursos de hw permite simultaneidade<br />
  30. 30. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />26<br />Programação concorrente<br />Programação concorrente, pois<br />A programação concorrente inclui a programação paralela<br />Permite focar nas questões da aplicação<br />Ou seja, não requer do programador conhecimentos sobre o hardware paralelo disponível<br />Idealmente: alto grau de portabilidade<br />Considerando que a ferramenta de programação possui um modelo de execução eficiente<br />
  31. 31. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />27<br />Programação concorrente<br />Programação concorrente<br />Extensão ao paradigma Imperativo<br />Contexto de trabalho no curso<br />Execução segundo a arquitetura de von Neumann<br />Programa seqüencial é composto por:<br />Uma seqüência de instruções <br />Um conjunto de dados<br />Execução seqüencial<br />Instruções modificam estados de memória<br />Efeito colateral<br />A execução de uma instrução implica na alteração de um estado (posição de memória)<br />
  32. 32. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />28<br />Efeito da execução de<br />uma instrução:<br />Escrita em memória<br />Comunicação<br />Programação concorrente<br />Programação concorrente<br />Extensão ao paradigma Imperativo<br />Execução segundo a arquitetura de von Neumann<br />Execução seqüencial:<br />I1: MOV DX, 0<br />I2: MOV AX, [313]<br />I3: ADD DX, AX<br />I4: DEC AX<br />I5: CMP AX, 0<br />I6: JNE I3<br />I7: MOV AX, [313]<br />I8: CALL RotinaImpressão<br />
  33. 33. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />29<br />Programação concorrente<br />Programação concorrente<br />Extensão ao paradigma Imperativo<br />Execução segundo a arquitetura de von Neumann<br />Execução seqüencial:<br />I1: MOV DX, 0<br />I2: MOV AX, [313]<br />I3: ADD DX, AX<br />I4: DEC AX<br />I5: CMP AX, 0<br />I6: JNE I3<br />I7: MOV AX, [313]<br />I8: CALL RotinaImpressão<br />I1<br />I2<br />I7<br />I8<br />I3<br />I4<br />I5<br />I6<br />
  34. 34. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />30<br />Programação concorrente<br />Programação concorrente<br />Extensão ao paradigma Imperativo<br />Execução segundo a arquitetura de von Neumann<br />Execução seqüencial:<br />Unidade execução: a instrução<br />Comunicação: alteração de um estado de memória<br />Sincronização: implícita, pois uma instrução não é executada antes que a anterior termine<br />Execução concorrente deve, igualmente, definir:<br />A unidade de execução elementar<br />O mecanismo de comunicação utilizado<br />A coordenação da execução para controle do acesso aos dados<br />
  35. 35. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />31<br />Programação concorrente<br />Programação concorrente<br />Extensão ao paradigma Imperativo<br />Execução segundo a arquitetura de von Neumann<br />Ferramentas de programação multithread oferecem recurso para:<br />Definir unidades de execução em termos de conjuntos de instruções ou procedimentos<br />Identificar regiões de memória (dados) compartilhados entre as unidades de execução<br />Controlar acesso aos dados compartilhados<br />
  36. 36. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />32<br />Programação concorrente<br />Modelos de Decomposição Paralela<br />Paralelismo de tarefas<br />O paralelismo é definido em termos de atividades independentes, processando sobre conjunto de dados distintos.<br />Sincronização no início e no fim da execução concorrente e, eventualmente, durante a execução.<br />Paralelismo de dados<br />O paralelismo é definido em termos de dados que podem sofrer a execução da mesma operação de forma independente.<br />Sincronização no início e no final da execução concorrente.<br />
  37. 37. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />33<br />Modelo<br />Arquitetura<br />Ferramenta de programação<br />Programação concorrente<br />Modelos de programação<br />Oferecem “níveis de abstração” dos recursos oferecidos pelas arquiteturas e pelas ferramentas<br />Ferramentas oferecem recursos para programação de arquiteturas reais<br />É possível que uma ferramenta permita a exploração de mais de um tipo de paralelismo ou a utilização de diferentes modelos de concorrência. No entanto, cada ferramenta é mais conveniente para um determinado esquema<br />
  38. 38. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />34<br />Thread<br />Processo leve<br />Noção de processo<br />Um programa define uma seqüência de instruções e um conjunto de dados<br />Um processo representa uma instância de um programa em execução. A seqüência de instruções do programa define um fluxo de execução a ser seguido e o espaço de endereçamento utilizado. O processo também possui associado o registro de recursos que utiliza e é manipulado pelo sistema operacional.<br />
  39. 39. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />35<br />Thread<br />Processo leve<br />Noção de processo<br />Memória<br />Pilha<br />programa.exe<br />Reg<br />$> programa.exe<br />PCB<br />
  40. 40. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />36<br />Thread<br />Processo leve<br />Noção de processo<br />Informações no PCB (Process Control Block)<br />Process ID<br />User and User Grup ID<br />Diretório de trabalho<br />Descritor de arquivos<br />Manipuladores de sinais<br />Bibliotecas de compartilhadas<br />Ferramentas de comunicação (pipes, semáforos etc)<br />
  41. 41. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />37<br />Thread<br />Processo leve<br />Noção de processo<br />Processo multithread<br />Um programa define várias seqüência de instruções e um conjunto de dados<br />Uma thread representa uma instância de uma seqüência de instruções em execução. Cada seqüência de instruções do programa define um fluxo de execução a ser seguido e os dados o espaço de endereçamento utilizado. As threads compartilham o registro de recursos que utilizados pelo processo.<br />
  42. 42. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />38<br />A()<br />A()<br />E()<br /> A()<br /> D()<br />Programa fonte<br /> B()<br /> E()<br /> C()<br /> F()<br />Thread<br />Processo leve<br />Noção de processo<br />Processo multithread<br />Memória<br />Processo com múltiplas threads<br />
  43. 43. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />39<br />Thread<br />Processo leve<br />Noção de processo<br />Processo multithread<br />Os fluxos são independentes<br />Competição pelos recursos da arquitetura<br />Trocas de dados através de leituras e escritas em memória<br />Competição pelos aos dados na memória compartilhada<br />
  44. 44. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />40<br />Thread<br />Processo leve<br />Noção de processo<br />Processo multithread<br />Memória<br />Pilha<br />Pilha<br />Pilha<br />Reg<br />Reg<br />Reg<br />PCB<br />
  45. 45. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />41<br />Memória<br />Thread<br />Processo leve<br />Noção de processo<br />Processo multithread<br />Acesso ao dado compartilhado através de operações de leitura e escrita convencionais<br />Escrita:<br />Dado = valor<br />Leitura:<br />variável = Dado<br />
  46. 46. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />42<br />Thread<br />Processo leve<br />Noção de processo<br />Processo multithread<br />Acesso ao dado compartilhado através de operações de leitura e escrita convencionais<br />O programador é responsável por introduzir instruções para sincronização entre fluxos<br />Memória<br />
  47. 47. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />43<br />Thread<br />Processo leve<br />Noção de processo<br />Processo multithread<br />Acesso a dado<br />Instruções de sincronização<br />Seção crítica: trecho de código com instruções que manipulam dado compartilhado entre fluxos de execução distintos<br />Memória<br />
  48. 48. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />44<br />Thread<br />Processo leve<br />Thread: custo de manipulação reduzido em relação ao processo<br />Chaveamento de contexto em tempo menor<br />Comunicação entre threads via memória compartilhada<br />Criação/Destruição de threads mais eficiente que de processos<br />Informações de cada thread<br />Pilha<br />Registradores<br />Propriedades de escalonamento (prioridade, política)<br />Sinais pendentes ou bloqueados<br />Dados específicos do thread (errno)<br />
  49. 49. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />45<br />SMP<br />Mais leves<br />Compromisso<br />Thread<br />1 : 1<br />N : 1<br />M : N<br />Implementações<br />Thread sistema<br />Thread usuário<br />Misto<br />
  50. 50. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />46<br />Thread<br />Modelos de Threads - N : M<br />Memória<br />Modelo misto<br />gerenciamento tanto no<br />espaço usuário quanto<br />pelo sistema operacional<br />Escalonamento<br />Escalonamento<br />
  51. 51. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />47<br />Thread<br />Modelos de Threads - N : M<br />Memória<br /><ul><li> Separação entre a</li></ul> descrição da concorrência<br /> existente na aplicação do<br /> paralelismo real existente<br /> na arquitetura<br />Vantagens<br />Escalonamento<br />Escalonamento<br />
  52. 52. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />48<br />Thread<br />Modelos de Threads - N : M<br />Memória<br /><ul><li> Custo de implementação ?
  53. 53. ...</li></ul>Porém...<br />Escalonamento<br />Escalonamento<br />
  54. 54. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />49<br />Thread<br />Erros comuns na programação<br />Considerar uma ordem de execução dos threads<br />Erro:<br />Introduzir no algoritmo uma premissa que considere a ordem de execução dos threads<br />Conseqüência:<br />Aordem de execução é dada pela heurística de escalonamento, sendo estabelecida em tempo de execução. Normalmente esta heurística também considera fatores que são externos ao programa. Qualquer premissa no algoritmo que considere a ordem de execução fatalmente irá produzir um programa incorreto<br />Solução:<br />Caso seja necessário definir uma ordem de execução para os threads devem ser utilizadas as primitivas específicas de sincronização disponibilizadas pela ferramenta utilizada<br />
  55. 55. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />50<br />Thread<br />Erros comuns na programação<br /><ul><li>Considerar uma ordem de execução dos threads</li></ul>Acesso simultâneo a um dado por dois (ou mais) threads<br />Data-race<br />Erro:<br />Não controlar o acesso ao espaço de endereçamento compartilhado pelos threads<br />Conseqüência:<br />Incoerência do estado da execução pela manipulação simultânea e não controlada dos dados<br />Solução:<br />Identificar os dados passíveis de acesso simultâneo por dois (ou mais) threads e proteger sua manipulação pelo uso de mecanismos de sincronização<br />
  56. 56. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />51<br />Thread<br />Erros comuns na programação<br /><ul><li>Considerar uma ordem de execução dos threads
  57. 57. Acesso simultâneo a um dado por dois (ou mais) threads</li></ul>Postergação indefinida<br />Deadlock<br />Erro:<br />Não sinalizar uma condição de saída de uma sincronização<br />Conseqüência:<br />Um (ou mais) thread(s) permanecem bloqueados aguardando uma sincronização<br />Solução:<br />Garantir que todos as condições de saída de sincronizações sejam efetuadas<br />
  58. 58. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />52<br />Caso de estudo: OpenMP<br />Paralelismo explícito<br />O programador deve introduzir diretivas para gerar e controlar a execução paralela do programa<br />Diferentes níveis de abstração<br />Paralelismo de dados<br />Paralelismo de tarefa<br />OpenMP<br />Diretivas de compilação / Biblioteca de serviços<br />Paralelismo aninhado<br />
  59. 59. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />53<br />Sumário<br /><ul><li>Introdução
  60. 60. Arquiteturas multi-core
  61. 61. Programação multithread
  62. 62. OpenMP</li></ul>Prática de programação<br />Considerações finais<br />
  63. 63. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />54<br />OpenMP<br />Execução<br />Compilação<br />Ligação<br />+<br />+<br />=<br />+<br />=<br />Fonte<br />Objeto<br />Executável<br />Variáveis de ambiente<br />Diretivas OpenMP<br />Biblioteca de serviços<br />Interface de programação aplicativa (API) para desenvolvimento de aplicações multithread em C/C++ e Fortran<br />Define<br />Diretivas de compilação<br />Biblioteca de serviços<br />Variáveis de ambiente<br />
  64. 64. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />55<br />OpenMP<br />Interface de programação aplicativa (API) para desenvolvimento de aplicações multithread em C/C++ e Fortran<br />Define<br />Diretivas de compilação<br />Biblioteca de serviços<br />Variáveis de ambiente<br />Busca estabelecer um padrão<br />AINSI X3H5 como primeira tentativa<br />Esforço iniciado de um grupo de fabricantes de hardware e desenvolvedores de software (Fujitsu, HP, IBM, Intel, Sun, DoE ASC, Compunity, EPCC, KSL, NASA Ames, NEC, SGI, ST Micro/PG, ST Micro/Portland Group, entre outros)<br />
  65. 65. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />56<br />OpenMP<br />API para C/C++<br />Variáveis de ambiente<br />OMP_NOME<br />Diretivas de compilação<br />#pragma omp diretiva [cláusula]<br />Biblioteca de serviços<br />omp_serviço( ... );<br />
  66. 66. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />57<br />API para C/C++<br />Variáveis de ambiente<br />OMP_NOME<br />Identifica o número de atividades que serão executadas em paralelo<br />OMP_NUM_THREADS<br />Indica se o número de atividades a serem executadas em paralelo deve ou não ser ajustado dinamicamente<br />OMP_DYNAMIC<br />Indica se deve ser contemplado ativação de paralelismo aninhado<br />OMP_NESTED<br />Define esquema de escalonamento das atividades paralelas <br />OMP_SCHEDULE<br /><ul><li>API para C/C++
  67. 67. Variáveis de ambiente</li></ul>OMP_NOME<br /><ul><li>Identifica o número de atividades que serão executadas em paralelo</li></ul>OMP_NUM_THREADS (default: número de processadores)<br /><ul><li>Indica se o número de atividades a serem executadas em paralelo deve ou não ser ajustado dinamicamente</li></ul>OMP_DYNAMIC (default: FALSE)<br /><ul><li>Indica se deve ser contemplado ativação de paralelismo aninhado</li></ul>OMP_NESTED (default: FALSE)<br /><ul><li>Define esquema de escalonamento das atividades paralelas </li></ul>OMP_SCHEDULE (default: estático)<br />OpenMP<br />
  68. 68. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />58<br />OpenMP<br />Opcionais aceitos pela diretiva OpenMP<br />Determinação da diretiva OpenMP<br />Sentinela de uma diretiva OpenMP (C/C++)<br />API para C/C++<br />Diretivas<br />Formato:<br />#pragma omp diretiva [cláusula]<br />Exemplo:<br />#pragma omp parallel default(shared) private(x,y)<br />
  69. 69. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />59<br />OpenMP<br />API para C/C++<br />Biblioteca de serviços<br />Permitem controlar e interagir com o ambiente de execução.<br />Formato:<br />retorno omp_serviço( [parâmetros] );<br />Exemplos:<br />void omp_set_num_threads( 10 );<br />int omp_get_num_threads(); <br />void omp_set_nested( 1 );<br />int omp_get_num_procs();<br />
  70. 70. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />60<br />OpenMP<br />Modelo M:N<br />Devem ser indicadas as atividades concorrentes da aplicação<br />Regiões paralelas<br />Deve ser informado o paralelismo da arquitetura<br />Time<br />Deve ser informado o esquema de escalonamento das atividades paralelas nos threads que compõem o time<br />Estratégia de escalonamento<br />
  71. 71. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />61<br />OpenMP<br />Modelo M:N<br />Devem ser indicadas as atividades concorrentes da aplicação<br />Regiões paralelas<br />Deve ser informado o paralelismo da arquitetura<br />Time<br />Deve ser informado o esquema de escalonamento das atividades paralelas nos threads que compõem o time<br />Estratégia de escalonamento<br />Diretivas na programação<br />OMP_NUM_THREADS: inicial<br />OMP_DYNAMIC: ajuste dinâmico<br />OMP_NESTED: criação de novos times<br />static<br />dynamic<br />guided<br />
  72. 72. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />62<br />OpenMP<br />fork<br />thread master<br />concorrência<br />da aplicação<br />join<br />Modelo básico de execução<br />Fork / Join<br />O programador descreve a concorrência de sua aplicação<br />.............<br />
  73. 73. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />63<br />OpenMP<br />Modelo básico de execução<br />Fork / Join<br />O programador descreve a concorrência de sua aplicação<br />A execução se da por um time de threads<br />concorrência<br />da aplicação<br />Escalonamento<br />time de threads<br />de execução<br />
  74. 74. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />64<br />OpenMP<br /> fork<br />..............<br />join<br />Primeiro programa<br />#include <omp.h><br />main ( ) {<br /> // Código seqüencial (master)<br />#pragmaompparallel<br />{ // Início do código concorrente<br />// Código paralelo<br />} // Fim do código concorrente<br /> // Código seqüencial (master)<br />}<br />São executadas tantas instâncias do código paralelo quanto forem o número de threads no time.<br />
  75. 75. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />65<br />OpenMP<br />tcsh<br />$> icpc –openmp primeiro.c<br />$> setenv OMP_NUM_THREADS 4<br />$> ./a.out<br />$><br />Primeiro programa<br />Primeira sessão (Linux)<br />
  76. 76. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />66<br />OpenMP<br />Programa mais elaborado<br />#include <omp.h><br />main () {<br />int nthreads, tid;<br />#pragma omp parallel private(tid)<br /> {<br /> tid = omp_get_thread_num();<br /> printf("Oi mundo, sou o thread %dn", tid);<br /> if( tid == 0 ) {<br /> nthreads = omp_get_num_threads();<br /> printf("Total de threads: %dn", nthreads);<br /> }<br /> }<br />}<br />Lendo o programa:<br /><ul><li>Dados globais
  77. 77. Fork
  78. 78. Join
  79. 79. Cópia de dados privado ao thread
  80. 80. Seção paralela
  81. 81. Identificação do thread master</li></li></ul><li>Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />67<br />OpenMP<br />tcsh<br />tcsh<br />$> setenv OMP_NUM_THREADS 4<br />$> ./a.out<br />Oi mundo, sou o thread 3<br />Oi mundo, sou o thread 0<br />Total de Threads: 4<br />Oi mundo, sou o thread 1<br />Oi mundo, sou o thread 2<br />$><br />$> setenv OMP_NUM_THREADS 4<br />$> ./a.out<br />Oi mundo, sou o thread 3<br />Oi mundo, sou o thread 0<br />Total de Threads: 4<br />Oi mundo, sou o thread 1<br />Oi mundo, sou o thread 2<br />$><br />$> setenv OMP_NUM_THREADS 5<br />$> ./a.out<br />Oi mundo, sou o thread 0<br />Oi mundo, sou o thread 1<br />Oi mundo, sou o thread 4<br />Total de Threads: 5<br />Oi mundo, sou o thread 3<br />Oi mundo, sou o thread 2<br />Programa mais elaborado<br />#include <omp.h><br />main () {<br />int nthreads, tid;<br />#pragma omp parallel private(tid)<br /> {<br /> tid = omp_get_thread_num();<br /> printf("Oi mundo, sou o thread %dn", tid);<br /> if( tid == 0 ) {<br /> nthreads = omp_get_num_threads();<br /> printf("Total de threads: %dn", nthreads);<br /> }<br /> }<br />}<br />
  82. 82. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />68<br />OpenMP<br />Dado compartilhado<br />Região paralela<br />Programação<br />Diretiva: sections<br />main () {<br />int x;<br />#pragma omp sections<br /> {<br /> #pragma omp section<br /> {<br /> foo(x);<br /> }<br /> #pragma omp section<br /> {<br /> bar(x);<br /> }<br /> }<br />}<br />
  83. 83. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />69<br />OpenMP<br />Programação<br />Diretiva: sections<br />Cláusulas aceitas<br />private<br />firstprivate<br />lastprivate<br />reduction<br />nowait<br />
  84. 84. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />70<br />Dado compartilhado<br />Região paralela<br />Número de instâncias<br />==<br />Número de threads no time<br />Cada execução manipula uma instância do dado.<br />As cópias locais não são inicializadas!<br />OpenMP<br />Programação<br />Diretiva: parallel Cláusula private<br />main () {<br />int x, y;<br />#pragma omp parallel private(y)<br /> {<br /> y = x + 1;<br /> }<br />}<br />
  85. 85. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />71<br />OpenMP<br />Pode ser last e first ao<br />mesmo tempo!<br />Programação<br />Diretiva: parallel Cláusula private<br />Cláusulas alternativas:<br />firstprivate<br />Cada cópia local é inicializada com o valor que o dado possui no escopo do thread master<br />lastprivate<br />O dado no escopo do thread master é atualizado com o valor da última avaliação da região paralela<br />Exemplo<br />#pragma omp parallel lastprivate(y) firstprivate(y)<br />
  86. 86. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />72<br />Novo número de threads<br />no time<br />OpenMP<br />Programação<br />Diretiva: parallel Serviçoomp_set_num_threads<br />main () {<br />int x, y;<br />omp_set_num_threads( 5 );<br />#pragma omp parallel private(y)<br /> {<br /> y = x + 1;<br /> }<br />}<br />
  87. 87. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />73<br />OpenMP<br />int soma = 100;<br />omp_set_num_threads( 4 );<br />#pragma omp parallel reduction( + : soma )<br /> {<br /> soma += 1;<br /> }<br />// No retorno ao master: soma = 104<br />Exemplo:<br />Programação<br />Diretiva: parallel Cláusula reduction<br />Cada execução pode manipular sua cópia, como em private<br />O valor local inicial é definido pela operação de redução<br />No final uma operação de redução atualiza o dado no thread master<br />
  88. 88. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />74<br />OpenMP<br />Operações<br />de redução:<br />Operador<br />+<br />-<br />*<br />&<br />&&<br />|<br />||<br />^<br />Operação<br />Soma<br />Subtração<br />Multiplicação<br />E aritmético<br />E lógico<br />OU artitmético<br />OU lógico<br />XOR aritmético<br />Valor inicial<br />0<br />0<br />1<br />-1<br />1<br />0<br />0<br />0<br />Programação<br />Diretiva: parallel Cláusula reduction<br />Cada execução pode manipular sua cópia, como em private<br />O valor local inicial é definido pela operação de redução<br />No final uma operação de redução atualiza o dado no thread master<br />
  89. 89. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />75<br />OpenMP<br />Programação<br />Diretiva: parallel<br />Cláusulas aceitas<br />reduction<br />private<br />firstprivate<br />shared<br />default<br />copyin<br />if<br />num_threads<br />
  90. 90. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />76<br />OpenMP<br />Programação<br />Diretiva: for / parallel for<br />Permite que os grupos de instruções definidas em um loop sejam paralelizadas<br />Note: for e paralell for não é exatamente igual<br />for: restringe o número de cláusulas aceitas<br />parallel for: aceita todas as cláusulas do for e do parallel<br />
  91. 91. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />77<br />OpenMP<br />Programação<br />Diretiva: for / parallel for<br />Permite que os grupos de instruções definidas em um loop sejam paralelizadas<br />Exemplo:<br />intvet[100], i, soma = 0;<br />#pragmaompparallel for private(i)<br /> for( i = 0 ; i < 100 ; i++ ) vet[i] = i;<br />#pragma omp parallel for private(i) reduction(+:soma)<br /> for( i = 0 ; i < 100 ; i++ ) soma = soma + vet[i];<br />printf( "Somatorio: %dn", soma );<br />
  92. 92. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />78<br />OpenMP<br />Programação<br />Diretiva: for / parallel for<br />Permite que os grupos de instruções definidas em um loop sejam paralelizadas<br />Exemplo:<br />intmat[TAM][TAM], aux[TAM][TAM], i, j;<br />inicializa(mat);<br />copia(mat, aux);<br />while( não estabilizou os resultados ) {<br /> #pragmaompparallel for<br /> for( i = 0 ; i < TAM ; i++ )<br /> #pragmaompparallel for<br />for( j = 0 ; j < TAM ; j++ )<br />mat[i][j] = func(aux, i, j, ...);<br /> copia(mat,aux);<br />}<br />
  93. 93. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />79<br />OpenMP<br />Programação<br />Diretiva: for / parallel for<br />Permite que os grupos de instruções definidas em um loop sejam paralelizadas<br />Regras:<br />A variável de iteração é tornada local implicitamente no momento em que um loop é paralelizado<br />A variável de iteração e o valor de teste necessitam ser inteiros e com sinal<br />A variável de iteração deve ser incrementa ou decrementada, não são permitidas outras operações<br />Os testes são: <, >, <=, >=<br />Não é permitido: for( i = 0 ; i < 100 ; vet[i++] = 0 );<br />#pragma omp parallel for private(i)<br /> for( i = 0 ; i < 100 ; i++ ) vet[i] = i;<br />
  94. 94. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />80<br />OpenMP<br />Programação<br />Diretiva: critical[(nome)]<br />Permite que trechos de código sejam executados em regime de exclusão mútua<br />É possível associar nomes aos trechos<br />int x, y;<br />intprox_x, prox_y;<br />#pragmaompparallelshared(x, y) private(prox_x, prox_y)<br /> {<br />#pragmaompcritical(eixox)<br />prox_x = dequeue( x );<br />trataFoo( prox_x, x );<br />#pragmaompcritical(eixoy)<br />prox_y = dequeue( y );<br />trataFoo( prox_y, y );<br />}<br />
  95. 95. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />81<br />OpenMP<br />Programação<br />Diretiva: single [nowait]<br />Indica, em uma região paralela, um trecho de código que deve ser executado apenas por um único thread<br />Representa uma barreira<br />Com nowait a barreira pode ser relaxada<br />#pragma omp parallel<br /> {<br />#pragma omp single<br /> printf("Serao %d threadsn", omp_get_num_threads() );<br /> foo(); <br />#pragma omp single nowait<br /> printf("O threads %d terminoun", omp_get_thread_num() );<br />}<br />
  96. 96. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />82<br />OpenMP<br />Programação<br />Diretiva: master [nowait]<br />Indica, em uma região paralela, um trecho de código que deve ser executado apenas thread master<br />Representa uma barreira<br />Com nowait a barreira pode ser relaxada<br />#pragma omp parallel<br /> {<br />#pragma omp master<br /> printf("Serao %d threadsn", omp_get_num_threads() );<br /> foo(); <br />#pragma omp master nowait<br /> printf("O thread master terminoun" );<br />}<br />
  97. 97. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />83<br />OpenMP<br />Programação<br />Diretiva: flush [(dados)]<br />Força a atualização dos dados compartilhados entre os threads em memória<br />Representa uma barreira, garantindo que todas as operações realizadas por todos os threads até o momento do flush foram realizadas<br />
  98. 98. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />84<br />OpenMP<br />Programação<br />Cláusula: schedule(static|dynamic|guided)<br />Indica qual estratégia deve ser utilizada para distribuir trabalho entre os threads do time<br />static<br />Implica na divisão do trabalho por igual entre cada thread<br />Indicado quando a quantidade de trabalho em cada grupo de instruções (como em cada iteração em um for) é a a mesma<br />dynamic<br />Cada thread busca uma nova quantidade de trabalho quando terminar uma etapa de processamento<br />Indicado quando a quantidade de trabalho em cada grupo de instruções (como em cada iteração em um for) não for a mesma<br />guided<br />Semelhante ao dynamic, mas com divisão não uniforme na divisão das tarefas<br />Indicado quando existe execução assíncrona (cláusula nowait anterior) <br />
  99. 99. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />85<br />Sumário<br /><ul><li>Introdução
  100. 100. Arquiteturas multi-core
  101. 101. Programação multithread
  102. 102. Ferramentas de programação
  103. 103. Prática de programação</li></ul>Modelagem da concorrência<br />Multithreading e bibliotecas de serviço<br />Hierarquia de memória<br />Afinidade de processador<br />Redução de contenção<br />Considerações finais<br />
  104. 104. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />86<br />Modelagem da concorrência<br />Na implementação<br />Traduzir as atividades concorrentes em termos de unidades de execução previstas pela ferramenta utilizada<br />Preocupar-se com a granularidade de execução<br />Relação entre a quantidade de cálculo efetuada a cada atividade independente e o número de interações entre estas atividades<br />Reflete o overhead de execução da implementação:<br />Quanto mais freqüente forem as interações, mais o ambiente de execução deverá se fazer presente, ocupando tempo de processamento<br />
  105. 105. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />87<br />Modelagem da concorrência<br />Na implementação<br />Tratar a questão da portabilidade<br />de código<br />de desempenho<br /><ul><li>Na implementação
  106. 106. Tratar a questão da portabilidade
  107. 107. de código
  108. 108. Envolve a seleção da ferramenta através de critérios que facilitem a reutilização do código em diferentes ambientes
  109. 109. OpenMP: busca por um padrão de programação simples e abrangente. Processo acompanhado por várias empresas de software e hardware. Disponibilizado em diversos compiladores</li></li></ul><li>Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />88<br />Modelagem da concorrência<br />Na implementação<br />Tratar a questão da portabilidade<br /><ul><li>de código</li></ul>de desempenho<br />Relacionado com a escalabilidade da implementação realizada<br />Deve ser considerada a grande variedade de arquiteturas paralelas disponíveis e a expectativa da ainda maior variedade de número de cores em processadores multi-core<br />Dissociação da descrição da concorrência da aplicação da implementação paralela realizada<br />Modelos M:N nativos os introduzidos através de estratégias de programação<br />
  110. 110. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />89<br />Multithreading e bibliotecas de serviço<br />Uso de bibliotecas de serviço em programas multithread<br />Thread safe<br />Garante a correção da execução dos serviços da biblioteca, pois sua implementação considera a possibilidade de que dois ou mais serviços podem estar ativos ao mesmo tempo<br />Thread aware<br />A biblioteca foi implementada de tal forma que não exista a possibilidade de alguma thread do programa aplicativo ser interrompida por necessidade de sincronização interna à biblioteca – ou, alternativamente, que a contenção seja a menor possível<br />
  111. 111. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />90<br />Hierarquia de memória<br />Exploração da memória cache para minimizar o efeito do Gargalo de von Neumann<br />Alinhamento de dados em memória<br />Diz respeito a alocação de dados na memória<br />Um dado de n bytes é dito alinhado se n = 2X e o endereço e de armazenamento seja n = k xn<br />Um dado char é alinhado em qualquer posição de memória<br />Um dado int é alinhado em um endereço múltiplo de 4<br />O alinhamento é especificado de forma a obter o melhor desempenho da arquitetura<br />Como utilização do barramento de dados<br />É possível alterar o comportamento padrão de alinhamento<br />O ônus é perder o desempenho ótimo da arquitetura<br />A a aposta é reduzir a quantidade de memória utilizada, aumentando virtualmente a capacidade do cache<br />
  112. 112. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />91<br />Sumário<br /><ul><li>Introdução
  113. 113. Arquiteturas multi-core
  114. 114. Programação multithread
  115. 115. OpenMP
  116. 116. Prática de programação
  117. 117. Considerações finais</li></li></ul><li>Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />92<br />Novas questões no desenvolvimento de software<br />Technical Report No. UCB/EECS-2006-183http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-183.html<br />
  118. 118. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />93<br />Inovações tecnológicas<br />A indústria de software sempre contou com o avanço da tecnologia CMOS para melhora de desempenho<br />O software não tem acompanhado o avanço do hardware no que diz respeito a multi-core<br />Os efeitos em termos de desempenho da disponibilidade de vários cores (>4) não serão percebidos pelo usuário sem uma modificação drástica no software desenvolvido<br />O aumento de desempenho somente pode ser obtido com interferência direta dos recursos de programação utilizados<br />
  119. 119. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />94<br />Reação das empresas de hardware<br />http://sev.prnewswire.com/computer-electronics/20070626/NYTU01926062007-1.html<br /> NEW DELHI, India, June 26, 2007 /PRNewswire/ -- Intel and NIIT today announced the launch of a Multi-Core training curriculum that has been developed jointly and will be deployed by NIIT globally. As industry transitions from single- core processors to Multi-Core, software developers will need a new set of skills to design and develop software that harnesses the full potential of these processors.<br /> According to industry estimates, the global software developer population is expected to grow by 34% to 17.1 million, by 2009. NIIT, in association with its training partners, will offer the Intel Multi-Core training program to this developer community globally.<br /> Speaking at the launch event, Mr. Scott Apeland, Director, Developer Network and Web Solutions, Intel Corporation said, "The power of Multi-Core processors to increase software performance is incredible, but not automatic. The full potential of Multi-Core processors is best unleashed when software is designed to take advantage of the power of multiple cores. This evolution of processing technologies has brought the software developer and architect community to a phase where they need to re-look at their existing skill-sets.“<br />
  120. 120. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />95<br />Reação das empresas de hardware<br />http://www.hpcwire.com/hpc/1635195.html<br />DRESDEN, Germany, June 27, 2007 -- HP today introduced a program aimed at helping customers realize the full performance and cost benefits of using multi-core technology in high-performance computing (HPC) applications.<br /> The HPC market is where most disruptive technologies are created and evolved into broader commercial products. HP's new Multi-Core Optimization Program focuses on research for next-generation multi-core optimization technologies, as well as near-term developments and enhancements, in collaboration with key customers, technology partners and applications vendors. <br /> "We're entering a phase where exploiting the power of multi-core processors is critical for customers to accelerate the innovation and discovery that is directly tied to their business outcomes," said Winston Prather, vice president and general manager, High Performance Computing, HP. "HP, a leader in the HPC market, is working with its partners to help customers capitalize on a new era of high-productivity computing.“<br /> "The emergence of multi-core technology allows for HPC technology to better help solve grand challenges; we've already seen an impact on large-scale numerical simulation in many fields of applications," said Prof. Dr. V. Heuveline, board member, Steinbuch Centre for Computing, KIT .<br />
  121. 121. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />96<br />Futuro<br />Hoje arquiteturas multi-core são essencialmente SMPs e o número de cores relativamente baixo<br />A expectativa é disponibilizar processadores com grande número de cores<br />80 cores, segundo a Intel, em médio prazo<br />Existência de um número de cores tão grande que requer a utilização de um esquema de manipulação próximo a grades computacionais (G. Fox, CCGrid 2007, palestra)<br />No futuro poderão (deverão) existir arquiteturas multi-core com cores especializados, tornando-se uma arquitetura heterogênea<br />No Brasil, grupos ligados às áreas de processamento paralelo já questionam a necessidade de inserir disciplinas de programação concorrente nos primeiros semestres dos cursos de graduação<br />
  122. 122. Gerson Geraldo H. Cavalheiro<br />XVII Semana Acadêmica da Meteorologia<br />1o de dezembro de 2010<br />97<br />E aqui?<br />Diversos artigos técnicos: OpenMP e ...<br />Weather forecast<br />Google: 13.000<br />Scholar Google: 1.100<br />Forecast models<br />Google: 12.200<br />Scholar: 2.600<br />Modelos Meteorológicos<br />Google: 1.920<br />Scholar: 71<br />
  123. 123. 98<br />Programação com OpenMP:O paralelismo ao alcance de todos<br />Prof. Dr. Gerson Geraldo H. Cavalheiro<br />gerson.cavalheiro@ufpel.edu.br<br />Programa de Pós-Graduação em Computação<br />Centro de Desenvolvimento Tecnológico<br />Universidade Federal de Pelotas<br />

×