Aula 1 - Estudando o problema a ser resolvido
Upcoming SlideShare
Loading in...5
×
 

Aula 1 - Estudando o problema a ser resolvido

on

  • 371 views

Sobre a importância de se otimizar o máximo possível antes de se partir para a estratégia do Sistema Distribuído.

Sobre a importância de se otimizar o máximo possível antes de se partir para a estratégia do Sistema Distribuído.

Statistics

Views

Total Views
371
Views on SlideShare
371
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Aula 1 - Estudando o problema a ser resolvido Aula 1 - Estudando o problema a ser resolvido Presentation Transcript

  • Introdução a Sistemas DistribuídosEstudando o Problema a ser ResolvidoEduardo de Lucena Falcão
  • Introdução● Na maioria das vezes, qual a nossa atitude quando nosdeparamos com um problema de programação?
  • Otimização do ProgramaEm ordem de importância:1. O algoritmo: estruturas de dados e técnicas de algoritmosmais adequadas ao problema;2. Software: Linguagens de Programação e APIs;3. Hardware: frequência do processador, e capacidade dememória.*1 única instância de processamento
  • Otimização do Programa● Preciso melhorar ainda mais meu tempo de execução!● Tornar distribuído o algoritmo que já era paralelo.– Ex.: Map-Reduce
  • Objetivo da Aula● Exemplo Prático de um problema simples– Multiplicação de Cadeias de Matrizes● Multiplicação de Matrizes● Tornar evidente em números, o que a análise e estudo doproblema pode nos proporcionar (tempo de execução).● Efeito bola de neve! (quando não tiramos maior proveito denosso algoritmo)
  • O Problema da Multiplicação deCadeias de Matrizes● Entrada: cadeia com n matrizes● Saída: matriz resultante do produto das n matrizes● O problema em sua essência é trivial, pois se multiplicarmossequencialmente as n matrizes obteremos facilmente oresultado esperado. O maior desafio que reside nesteproblema é otimizar o desempenho do programa que oresolve. Para tal, podemos explorar técnicas de programaçãoaplicadas ao problema específico, além de buscar sempreexplorar o processamento máximo do computador de maneirainteligente.
  • Lembrando...● Multiplicação de matrizes:– A[m,n] X B[n,o] = C[m,o]A[3,2]1 42 53 6B[2,4]7 9 11 138 10 12 14C[3,4]
  • Lembrando...A[3,2]1 42 53 6B[2,4]7 9 11 138 10 12 14C[3,4]1*7 + 4*82*7 + 5*83*7 + 6*8● Multiplicação de matrizes:– A[m,n] X B[n,o] = C[m,o]
  • Lembrando...● Multiplicação de matrizes:– A[m,n] X B[n,o] = C[m,o]A[3,2]1 42 53 6B[2,4]7 9 11 138 10 12 14C[3,4]39 49 59 6954 68 82 9669 87 105 123
  • Abordagem Sequencial● Multiplicam-se sequencialmente as n matrizespara obter seu produto.● Ex.: para uma cadeia com quatro matrizes a ordem demultiplicação seria: .● Complexidade:– , sendo n o tamanho (linha de A, coluna de A, colunade B)das matrizes.for(inti= 0;i< a.length;i+ + ){for(intj= 0;j< b[0].length;j+ + ){c[i][j]= 0;for(intk= 0;k< a[0].length;k+ + )c[i][j]+ = a[i][k]* b[k][j];}}
  • E o problema do Cache Miss?● Acontece quando o processador necessita de um dado,e este não está na memória cache. Tal fato obriga oprocessador a buscar um bloco de dados –um númerofixo de palavras - diretamente na memória RAM,trazendo-os para a memória cache e em seguidafornecendo a palavra requerida ao processador.● Em razão do fenômeno da localidade espacial, quandoum bloco de dados é trazido para a memória cache parasatisfazer uma dada referência à memória, é provávelque futuras referências sejam feitas para outras palavrasdesse bloco. [Stallings 2010]
  • E o problema do Cache Miss?● Soma de todos os elementos de uma matrizquadrada de tamanho 10000 (Java):– Percorrendo as linhas: 53 ms;– Percorrendo as colunas: 2886 ms.● Speedup superior a 50 vezes.
  • E o que o Cache Miss interfere emnosso problema?● Onde há matrizes *pode* haver cache miss;● Sempre devemos ficar atentos quando estivermostrabalhando com matrizes, objetivando o cache hit;● É natural que ocorra o cache miss para o problema demultiplicação de matrizes, pois é inerente a seualgoritmo;● Mas é possível *tentar* burlar o cache miss para esteproblema de algumas maneiras.
  • Abordagem com Minimização deCache Miss● Que tal multiplicar a primeira matriz pela matriz transposta da segunda?Pode-se perceber que para isto seria necessário mudar o código relativo àmultiplicação das matrizes: ao invés de multiplicar linhas da primeiramatriz por colunas da segunda, multiplicar-se-iam linhas da primeiramatriz por linhas da segunda, o que implicaria numa reduçãosignificativa do cache miss. Para evitar um custo adicional para o cálculoda transposta da segunda matriz, poderia apenas ser alterado o métodode criação das mesmas, para já criá-las como sendo suas própriastranspostas.
  • Quanto às *Cadeias* de Matrizes?● Quanto às cadeias: o que podemos fazer para otimizarnosso programa?– Resp.: utilizar a Programação Dinâmica● Analisando mais cuidadosamente o código damultiplicação de matrizes, pode-se perceber que onúmero de multiplicações escalares relacionadas àmultiplicação de duas matrizes respeita o seguintecálculo:
  • Abordagem com Programação Dinâmica● O referente à multiplicação pode ser descrito demaneira mais detalhada por:● Sendo assim, pode-se observar que a ordem com que asmatrizes são multiplicadas pode tornar o programa maiseficiente, ou seja, reduzir o número de multiplicações.● Por ex., para multiplicar uma cadeia de matrizes contendotrês matrizes existem duas parentizações possíveis.– Ex.: Ordem de mult. Nº de mult. escalares1 750002 7500
  • Abordagem com Programação Dinâmica● Speedup de 10x. É interessante perceber que para oexemplo anterior a abordagem sequencial é a mais rápida.Mas, deve ser ressaltado que isso foi apenas umacoincidência, e que a probabilidade da abordagem sequencialser a mais rápida torna-se bastante remota quando o númerode matrizes da cadeia aumenta, o que proporciona um ganhoexpressivo quando se utiliza a abordagem com aparentização otimizada.Ordem de mult. Nº de mult. escalares1 750002 7500
  • Abordagem com Programação Dinâmica● Mas como proceder para encontrar a parentização otimizada?● Através da força bruta, o nº de soluções seria exponencial em n ( ), sendo no número de multiplicações, tornando essa verificação inviável [Cormen et al2002]. Uma alternativa viável para este problema é a utilização da estratégia deProgramação Dinâmica.● A Programação Dinâmica (PD) geralmente é aplicada a problemas de otimização,ou seja, problemas que possuem várias soluções, mas deseja-se encontrar umasolução ótima, como é o caso do corrente problema. Para aplicar a PD aoproblema da multiplicação de cadeias de matrizes são necessárias quatro etapas:caracterizar a estrutura de uma solução ótima, que nesse caso é a estrutura deuma colocação ótima dos parênteses; definir recursivamente o valor de umasolução ótima para o problema; calcular o valor de uma parentização ótima;construir a solução ótima a partir das informações coletadas. Mais detalhes sobredescrição e implementação desse problema através da PD são fornecidos em[Cormen et al 2002].
  • Abordagem Paralela com Threads● A abordagem paralela utilizando threads visa explorar apotencialidade máxima dos processadores atuais, quegeralmente possuem mais de um núcleo físico e/ou lógico.Contudo, a abordagem paralela com threads apresentadaaqui não caracteriza uma solução ótima, apesar de explorar acapacidade máxima do hardware.● A estratégia utilizada para esta abordagem divide a cadeiapelo número de threads a serem criadas. Dessemodo, cada thread fica encarregada de realizar amultiplicação de uma sub-cadeia, e ao final, quando todasterminarem sua execução, a thread principal realizará amultiplicação das matrizes resultantes.
  • Abordagem Paralela com Threads● Como exemplo, considere uma cadeia com doze matrizesutilizando a abordagem distribuída com duasthreads. Esta cadeia seria quebrada ao meio em duassub-cadeias e , e depoispassaria pelo processo de se encontrar a parentização ótimaatravés da estratégia de PD. Porém, é fácil perceber que aparentização ótima para a cadeia muitodificilmente será alcançada com a divisão da cadeia. Paraalcançarmos tanto a parentização ótima e ainda explorar acapacidade máxima do processador outra estratégia deve serutilizada, como por exemplo, a abordagem paralela utilizando abiblioteca OpenMP.
  • Abordagem Paralela com OpenMP● A abordagem paralela utilizando a biblioteca OpenMP (OpenMulti-Processing) não divide a cadeia de matrizes emsub-cadeias, e portanto, mantém a parentização otimizadaencontrada através da abordagem por PD. Ao invés disso,utilizam-se diretivas em trechos de código que sãointerpretadas pelo compilador, e que ao executar o programa,ativam as threads dos processadores de acordo com asmesmas. Portanto, o trecho de código que se pretendedistribuir deve ser minuciosamente estudado para quenenhuma violação lógica ou física seja cometida.
  • Abordagem Paralela com OpenMP● Para o problema da multiplicação de matrizes, foipercebido que os elementos da matriz resultante nãopossuem interdependências, o que possibilita aparalelização desse trecho de código, maisespecificamente do loop for da linha 1.# pragm a om p parallelforfor(inti= 0;i< a.length;i+ + ){for(intj= 0;j< b[0].length;j+ + ){c[i][j]= 0;for(intk= 0;k< a[0].length;k+ + )c[i][j]+ = a[i][k]* b[k][j];}}
  • Abordagem Paralela com OpenMP● A biblioteca OpenMP usa o modelo de paralelismo fork-and-join, que ramifica athread principal em threads paralelas, e quando estas terminam de executar, athread principal reassume o controle do programa [Chandra et al 2001]. Existemdiversas diretivas da biblioteca OpenMP que permitem os programadores tornaremseus programas distribuídos. A diretiva que foi utilizada atua de forma simples, elasubdivide a quantidade total de iterações no loop for pelo número de threads aserem utilizadas, e cada thread executará uma parte das iterações que antes eramexecutadas por apenas uma thread. No problema da multiplicação de matrizes, sea matriz resultante tiver 10 linhas, e for especificado que o processador devetrabalhar com duas threads, a primeira computará o produto das 5 primeiras linhasda matriz resultante, e a segunda computará as linhas restantes.
  • Resultados● Para tais experimentos, foi utilizado um notebook DellVostro 3450, Sistema Operacional Windows 7 ProfessionalService Pack 1 de 64 Bits, 4 GB de memória RAM,processador Intel® Core™ i5-250M de 2.5 GHz.● A cadeia de matrizes escolhida para os experimentos foi aseguinte:<7000,50,30,5000,32,40,5000,80,20,4000,20,10,1000,50>, oque equivale às matrizes
  • Resultados● Linguagem de Programação Java:a) Abordagem sequencial;b) Utilizando técnicas de PD;c) Utilizando técnicas de PD, minimizando o cache miss;d) Utilizando técnicas de PD, minimizando o cache miss, além de tornar a lógica do algoritmoparalela em 2 Threads;e) Utilizando técnicas de PD, minimizando o cache miss, além de tornar a lógica do algoritmoparalela em 4 Threads.0510152025303540 36,710,96,2 6,6 6,4
  • Qual o Aprendizado?● O objetivo dessa aula foi mostrar a importância de dominar técnicasrelacionadas a projeto de algoritmos, e também conceitos de arquiteturade computadores para obter melhor desempenho do software ehardware. Ao utilizar a técnica de PD aliada à minimização de cachemiss, obteve-se um speedup de 6x em relação ao desempenho dasolução mais simples (sequencial). É interessante perceber que todos osalgoritmos estão na mesma ordem de complexidade de tempo ( ), emesmo assim foram obtidos ganhos de desempenho.● Destes resultados, pode-se colher como aprendizado, que ao receber umproblema é necessário estudá-lo, visualizá-lo de diferentes perspectivaspara adotar a estratégia de solução mais eficiente. Para tal, devem seranalisados os algoritmos pertinentes, ferramentas (APIs, bibliotecas, etc.)e LPs a serem utilizadas, além de conceitos sobre funcionamento desoftware/hardware, de sistemas operacionais e da arquitetura docomputador de uma forma generalizada.
  • Qual a aplicação disso em nosso curso?● Devemos sempre tentar fazer o mesmo antes de partirpara a estratégia Distribuída!● Caso contrário, todos esses segundos ou milissegundosque se acumularam, se tornarão uma bola de nevequando milhares de requisições forem feitas a seusistemas.● E isso lhe custará dinheiro, muito dinheiro!!
  • Referências● Koomey, J. G., Berard, S., Sanchez, M., Wong, H. (2009) “Assessing Trends in the ElectricalEfficiency”. Final report to Microsoft Corporation and Intel Corporation.● Schaller, R. R. “Moores law: past, present and future”. (1997) IEEE Spectrum, Vol 34, pp.52-59.● Alted, F. “Why Modern CPUs are Starving and what can be done about it”. (2010)Computing in Science & Engineering, pp. 68–71.● Stallings, W. “Arquitetura e Organização de Computadores”. (2010) Editora Prentice Hall,pp. 122-144.● Cormen, T. H., Leiserson, C. E., Rivest, R. L., Stein, C. “Algoritmos: Teoria e Prática”. (2002)Editora Campus, pp. 259-295.● Chandra, R., Dagum, L., Kohr, D., Maydan, D., McDonald, J., Menon, R. “ParallelProgramming in OpenMP”. (2001) Editora Morgan Kaufmann.● Robinson, S. “Toward an Optimal Algorithm for Matrix Multiplication”. (2005) Society forIndustrial and Applied Mathematics. Vol. 38, Nº 9.
  • Dúvidas