Programação Paralela em Arquiteturas Multi-Core/Arquitetura Intel Core e Core 2: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Alymenbr (discussão | contribs)
m formatação; ortografia
Linha 10:
 
 
=== IntroducãoIntrodução ===
 
Os processadores que têm sido desenvolvidos recentemente buscam em sua maioria alcançar o máximo de paralelismo possível. Essa afirmação pode ser verificada facilmente ao se analisar arquiteturas de processadores como os [http://pt.wikibooks.org/w/index.php?title=Programa%C3%A7%C3%A3o_Paralela_em_Arquiteturas_Multi[Programação Paralela em Arquiteturas Multi-Core/%C3%8DndiceÍndice/Arquitetura_Sun_Niagara_e_Niagara_II&action=editArquitetura Sun Niagara e Niagara II|Sun Niagara, Sun Niagara 2]] e o [http://pt.wikibooks.org/wiki/Programa%C3%A7%C3%A3o_Paralela_em_Arquiteturas_Multi[Programação Paralela em Arquiteturas Multi-Core/%C3%8DndiceÍndice/Arquitetura_Cell_Broadband_EngineArquitetura Cell Broadband Engine|IBM/STI Cell]].
 
Para alcançar uma maior eficiência em aplicações que exigem maior grau de paralelismo, a tendência atual é que os novos processadores contenham um número cada vez maior de unidades de processamento. Para produzir processadores com tantas unidades de processamento, é necessário diminuir a complexidade de cada unidade de forma a permitir que a produção do processador seja economicamente viável para o fabricante. Essa redução de complexidade pode afetar recursos que antes eram tidos como necessários nos processadores modernos, como a execução fora de ordem <ref>Do Estrangeirismo ''Out of order execution - OOO''</ref>, utilizada para aumentar o número de instruções realizadas em um ciclo de clock.
 
Neste contexto temos a introduçaointrodução de processadores baseados na microarquitetura Core da Intel, que busca aperfeiçoar ainda mais os complexos recursos existentes nos processadores modernos e ao mesmo tempo atacar o problema do processamento de aplicações paralelas acrescentando vários núcleos de processamento a um único processador.
 
 
==== Conceito de Desempenhodesempenho ====
 
O desempenho <ref>Também conhecido pelo estrangeirismo ''performance''</ref> de um processador não pode ser medido apenas como uma proporção direta da freqüência do relógio do processador, ou mesmo como a quantidade de instruções realizadas por ciclo do processador (''IPC''). O desempenho é dado pela simples equação:
Linha 32:
=== Arquitetura ===
 
A tendência atual dos processadores voltados para ambientes paralelos é não implementar execução de instruções fora de ordem. A execução fora de ordem permite que uma sequênciaseqüência de instruções enviadas para o processador sejam processadas internamente em uma ordem diferente da sequênciaseqüência original, que busca aumentar o número de instruções processadas de acordo com a arquitetura do processador, ordenando novamente na sequênciaseqüência original após o término da execução. Processadores que não contam com esse recurso precisam que o ordenamento das instruções seja feito antes de enviadas para o processador, através de otimizações feitas por um compilador, por exemplo.
 
A arquitetura Core foge à regra e busca aperfeiçoar as técnicas já existentes. Assim, cada núcleo de processamento é altamente eficiente e ao mesmo tempo complexo, dificultando a criação de processadores que possuam muitos núcleos. Espera-se que ganhos expressivos de poder de processamento sejam alcançados com a adição de novos núcleos de processamento aos processadores, ao contrário da estratégia anterior da Intel com a arquitetura NetBurst, onde os ganhos eram alcançados principalmente com avanço das técnicas de fabricação que permitissem que os processadores funcionassem a frequênciasfreqüências cada vez maiores.
 
 
Linha 42:
----
 
O dito popular que a Intel parece ter seguido ao desenvolve a arquitetura Core foi "Mais é Melhor". A arquitetuaarquitetura Core possui uma quantidade maior de cada unidade ou recurso que pode ser encontrada em uma unidade de processamento. A arquitetura Core possui mais lógica de decodificação, melhor reordenação de instruções, mais estações de reserva, mais hardware de execução, maiores buffer's e outros recurosrecursos encontrados nos mais de 150 milhões de transistores de cada processador baseado na arquitetura Core.
 
Apesar da adição de mais resursosrecursos à arquitetura Core, existem limites ao número de instruções que podem ser executados simultaneamente em um núcleo de processamento. Quanto maior o número de instruções a unidade de execução do núcleo pode processar simultaneamnetesimultaneamente, maior a dificuldade em manter a unidade de execução completamente ocupada, pois as instruções em execução não podem possuir dependências entre sí. Se várias instruções que possuem interdependências são enviadas à unidade de execução, apenas uma é executada enquatoenquanto as outras aguadamaguardam o término da primeira. Além disso, a latência do acesso à memória pdoepode fazer com que a unidade de execução fique ociosa aguardando instruções e dados.
 
A arquitetura Core possui várias funcionalidades e soluções que visam manter a poderosa unidade de execução ocupada. Essas funcionalidades buscam principalmente minimizar o envio simultâneo de instruções que possuam dependência para a unidade de execução e minimizam o número de acessos à memória.
Linha 106:
 
 
===== Pré-Carregamentocarregamento =====
A primeira técnica utilizada para aumentar a performance é o pré-carregamento <ref> Também conhecido pelo estrangeirismo ''prefetch'' </ref>de instruções e dados.
 
Linha 115:
 
 
A microarquiteturaCoremicroarquitetura Core possui também 2 unidades independentes de pré carregamento de instruções:
* 1 unidade na cache de primeiro nível (L1) do primeiro núcleo
* 1 unidade na cache de primeiro nível (L1) do segundo núcleo
 
 
As unidades guardam informações sobre oos padrões de acesso das unidades de execução aos dados e padrões de execução do programa. Alguns desses padrões de acesso são:
 
* Assumir se um desvio condicional <ref>Também conhecido pelo estrangeirismo ''branch''</ref> provavelmente será tomado, baseado na probabilidade da instrução de desvio condicional alterar o fluxo de execução do programa de acordo com o histórico recente dos resultados deste desvio condicional específico. Quando o processador assume que o desvio será tomado, ele encontra o endereço de destino do desvio e começa a executar as instruções do novo local.
Linha 129:
 
 
===== Desambiguação de Memóriamemória =====
 
Os processadores modernos utilizam a execução fora de ordem; uma técnica que altera a ordem em que as instruções são realizadas para permitir que um número maior de instruções esteja em execução em um determinado momento.
Linha 146:
 
 
Vamos verificar como exemplo da desambiguação de memória o que acontece para a seguinte sequênciaseqüência de isntruçõesinstruções:
* 'STORE 13 ''REF''' - Guardar o valor 13 na posição ''REF'' da memória.
* 'LOAD ''REF'' A' - Carregar o conteúdo da posição ''REF'' da memória no registrador ''A''.
Linha 160:
* Caso A: Nesse caso o LOAD vai carregar no registrador A as informações salvas na posição de memória ''vermelho'' pelo STORE, sendo assim ele fica impedido de iniciar sua execução até que o STORE seja finalizado.
 
* Caso B: Nesse caso o LOAD e o STORE estão trabalhando com posições de memória diferentes. Como esta independência só é descoberta após o ciclo de decodificação do STORE, a única alternativa possível é iniciar a execução do LOAD após o ciclo de decodificação do STORE. Este é o funcionamento das aruiteturasarquiteturas Intel anteriores à arquitetura Core.
 
* Caso C: Este caso ilustra o funcionamento da Desambiguação de Memória da arquitetura Core para a situação descrita no Caso B. O LOAD e o STORE estão trabalhando com posições de memória diferentes, mas através dos algoritmos de Desambiguação de Memória a independência é descoberta antes do STORE iniciar sua execução. sendoSendo assim, existe a alternativa de executar o LOAD antes do STORE. Nesse caso o LOAD termina sua execução mais cedo, permitindo que o ADD dependente do LOAD (ambos acessam o registrador ''A'') também seja executado antes.
 
==== Intel Advanced Digital Media Boost ====