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)
formatação; ortografia; cat
Linha 1:
== Arquitetura Intel Core e Core 2 ==
 
----
[[Imagem:Attention_niels_epting.svg|right|25px]]
Linha 7 ⟶ 5:
'''Este capítulo se encontra em construção'''    -  
Previsão de Conclusão: ''28/12''  
<tt>Progresso:</tt> [[Image:00%.png]]
</center>
 
----
 
=== Prefácio ===
----
----
 
=== IntroducaoIntroducão ===
 
Comentários do Meira:
 
- ha um grande numero de conceitos que sao assumidos, e que poderiam ser objeto de um glossario ou de uma referencia externa.
 
colocar links para wikipedia, quando fo ro caso
----------------------
 
eu nao sei se o capitulo esta incompleto, mas ha uma coisa no minimo curiosa aqui. ele e fundamentalmente diferente do capitulo do cell. esse e o segundo desafio. tentar tornar os capitulos irmaos mais parecidos. ou seja, olhando os capitulos sobre arquitetura, voces melhoram os capitulos de forma que o leitor consiga ter uma base comum.
 
----------------------
 
uma outra coisa que tambem seria interessante na visao geral e explicar a logica do capitulo.
 
os capitulos estao longe de estar completos, mas seria legal ter algo que funcionasse como prefacio, indicando o que as secoes tem como objetivo, para orientar o leitor.
 
isso vale inclusive para aqueles casos das secoes que voces colocaram mas nao tem conteudo. algo foi pensado quando a secao foi inserida. o que foi?
 
------------------------
 
 
- uma outra critica a esse capitulo e que ele esta muito raso, ou seja, ha uma serie de conteudos mas ele nao estao bem relacionados.
 
Alysson: Acho que deveria haver uma seção pai chamada "arquitetura", assim como no capítulo do Cell
 
=== Introducao ===
 
==== Desempenho ====
 
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 51 ⟶ 20:
</center>
 
Desta forma temos duas maneiras principais de aumentar o desempenho de um processador, aumentando a freqüência ou o [http[w://pt.wikipedia.org/wiki/Throughput throughput|throughput]]. Assim, o aumento da capacidade de processamento dependemdepende da microarquitetura do processador e do aumento doda freqüência, ambos dependentedependentes de como o processador é projetado e construidoconstruído.
 
=== Intel Wide Dynamic Execution ===
 
A Execução Dinâmica é uma combinação de técnicas como a análise do fluxo de dados, execução especulativa, execução fora de ordem e tecnologia superescalar onde se tem mais de uma unidade de execução. A primeira vez que esta tecnologia foi usada pela Intel foi na microarquitetura Intel de 6ª geração, conhecida como P6, usada nos processadores Pentium Pro, Pentium II, and Pentium III. Para a microarquitetura Intel NetBurst, foi introduzido o Advanced Dynamic Execution, um dispositivo de execução especulativa proposto para manter a continuidade da execução de instruções dentro do processador. Além disso, a NetBurst possui um algoritmo de previsão de desvio (branch-prediction) mais eficaz diminuindo o número de reconfigurações do pipeline.
 
 
Com a microarquitetura Intel Core tem-se um ganho significativo da capacidade de despachar execuções devido ao Intel Wide Dynamic Execution. Essa tecnologia possibilita uma maior entrega de instruções por ciclos de clock melhorando tanto o tempo de execução como a utilização eficaz de energia. Cada núcleo de execução é, digamos, mais largo, possibilitando que cada núcleo busque, despache, execute e retorne até quatro instruções completas simultaneamente. Anteriormente a NetBurst podia trabalhar com ate três instruções por tempo, um ganho de desempenho de 33%. Outras melhorias incluem um melhor algoritmo de previsão de desvio, buffers de instruções maiores o que possibilita mais flexibilidade na execução além de outras melhorias que reduzem o tempo de execução.
 
 
==== Macrofusion© ====
 
Macrofusion é uma nova característica da nova arquitetura que permite reduzir o tempo de execução. Nas gerações anteriores cada instrução era decodificada individualmente e então executada. Com a Macrofusion permite-se que pares de instruções comuns, por exemplo, uma comparação seguida de um desvio condicional, sejam combinadas em uma única instrução interna (micro-op) durante a decodificação. Assim duas instruções do programa podem ser executadas como um único micro-op, reduzindo o trabalho total que o processador deveria realizar. Esta propriedade aumenta o número de instruções executadas por unidade de tempo ou reduz o tempo necessário para se executar um certo conjunto de instruções. A conclusão direta é que a Macrofusion possibilita umuma melhor resposta do processador com menos gasto de energia.
 
Para facilitar a Macrofusion uma nova e aprimorada unidade lógica e aritmética (ALU) foi desenvolvida para a microarquitetura Core. Esta nova ALU executa instruções combinadas pela Macrofusion em um único ciclo de clock.
 
A microarquitetura Intel Core também aprimorou a técnica de fusão de micro-op utilizado pela primeira vez na linha Pentium M. Essa técnica visa uma melhor utilização da energia do processador. Nos modernos processadores as instruções x86 dos programas, chamadas macro-op, são desdobradas em unidades menores de execução, os micro-ops, antes de serem despachados ao pipeline para o processamento. Esta fusão de micro-op é realizada nos micro operadores que possuem o mesmo macro-op para reduzir o número de instruções que realmente serão executadas. Isso possibilita um melhor escalonamento de instruções aumentando o throughput da máquina. Alguns estudos mostram que a fusão destes operadores pode reduzir em mais de 10% o número de micro-ops manipulados pela lógica do processador.
 
=== Intel Intelligent Power Capability ===
 
Intel Intelligent Power Capability foi desenvolvido, basicamente, para reduzir o consumo de energia e temperatura do processador. Esta inovação gerencia o consumo de energia em tempo de execução nos núcleos ativos. O resultado é a uma otimização na relação desempenho/consumo em todas as esferas de computação.
inovação gerencia o consumo de energia em tempo de execução nos núcleos ativos. O resultado é a uma otimização na relação
desempenho/consumo em todas as esferas de computação.
 
Para fazer isso, a microarquitetura Core possui aprimoramentos em recursos já existentes em processadores anteriores da Intel e alguns novos
recursos;
 
Para fazer isso, a microarquitetura Core possui aprimoramentos em recursos já existentes em processadores anteriores da Intel e alguns novos recursos;
 
Recursos de famílias anteriores:
 
-* Intel Speedstep: A tecnologia Intel Speedstep permite que a frequênciafreqüência de operação (através da alteração de razão entre FSB e clock) e a tensão do núcleo de um processador sejam alterados em tempo de execução. Alguns fatores que podem levar à alteração da freqüência e tensão são a fonte de energia do sistema (bateria ou fonte), estado térmico do processador. Outro fator importante é a política de gerenciamento de energia do sistema operacional, que pode selecionar o nível de economia de energia baseando-se, por exemplo, na utilização do processador.
tensão do núcleo de um processador sejam alterados em tempo de execução. Alguns fatores que podem levar à alteração da frequência e
tensão são a fonte de energia do sistema (bateria ou fonte), estado térmico do processador. Outro fator importante é a política de
gerenciamento de energia do sistema operacional, que pode selecionar o nível de economia de energia baseando-se por exemplo na utilização
do processador.
 
-* Enhanced Intel Speedstep: Todas as vezes que ocorre uma variação na frequênciafreqüência do processador, este fica indisponível por um curto período de tempo, enquanto que a variação na tensão do núcleo do processador não ocasiona esta indisponibilidade. O enhanced Speedstep permite que a tensão varie independentemente da freqüência do processador (no Intel Speedstep a variação de tensão e freqüência sempre ocorria em conjunto). Esta alteração melhora a disponibilidade do processador ao permitir que seu consumo seja reduzido sem a necessidade de alterar sua freqüência
de tempo, enquanto que a variação na tensão do núcleo do processador não ocasiona esta indisponibilidade. O enhanced Speedstep permite
que a tensão varie independentemente da frequência do processador (no Intel Speedstep a variação de tensão e frequência sempre ocorria em
conjunto). Esta alteração melhora a disponibilidade do processador ao permitir que seu consumo seja reduzido sem a necessidade de alterar
sua frequência
 
- Enhanced Halt State (Estado C1E): O processador entra no estado C1E (estado econômico de energia) quando o sistema operacional envia
um comando HALT. Nos sistemas operacionais atuais este comando é enviado quando o sistema não encontra-se com carga máxima de
utilização. Quando está no estado C1E a frequência do processador é alterada para o mínimo (através da alteração do multiplicador) além da
tensão também ser reduzida.
 
* Enhanced Halt State (Estado C1E): O processador entra no estado C1E (estado econômico de energia) quando o sistema operacional envia um comando HALT. Nos sistemas operacionais atuais este comando é enviado quando o sistema não encontra-se com carga máxima de utilização. Quando está no estado C1E a freqüência do processador é alterada para o mínimo (através da alteração do multiplicador) além da tensão também ser reduzida.
 
Novos Recursos:
 
-* Desabilitação seletiva de subsistemas: Processadores baseados na microarquitetura Core podem desabilitar unidades internas que não estejam sendo utilizadas. Essas unidades não são o núcleo inteiro, mas subsistemas como a ALU (unidade lógico-aritmética) e barramentos internos, que agora podem ser alimentados separadamente. A grande dificuldade nas implementações anteriores desse recurso é que ao alimentar novamente as unidades é necessário aguardar um curto período de tempo até que elas estejam novamente prontas para utilização. A implementação da Intel não aumenta o tempo de resposta ao religar unidades que não estavam em uso.
estejam sendo utilizadas. Essas unidades não são o núcleo inteiro, mas subsistemas como a ALU (unidade lógico-aritmética) e barramentos
internos, que agora podem ser alimentados separadamente. A grande dificuldade nas implementações anteriores desse recurso é que ao
alimentar novamente as unidades é necessário aguardar um curto período de tempo até que elas estejam novamente prontas para utilização. A
implementação da Intel não aumenta o tempo de resposta ao religar unidades que não estavam em uso.
 
-* Medição distribuída de temperatura: Por causa do novo recurso de desabilitação seletiva de subsistemas, partes diferentes do processador poderão estar ligadas/desligadas dependendo da utilização do sistema, fazendo com que as temperaturas no processador variem de maneira não uniforme. Com essa dificuldade em se medir a temperatura do processador eficazmente, a Intel distribuiu vários sensores de temperatura pelo processador. A temperatura informada para o sistema/usuário e maior temperatura encontrada dentre as medições de todos os sensores de temperatura do processador.
poderão estar ligadas/desligadas dependendo da utilização do sistema, fazendo com que as temperaturas no processador variem de maneira
não uniforme. Com essa dificuldade em se medir a temperatura do processador eficazmente, a Intel distribuiu vários sensores de temperatura
pelo processador. A temperatura informada para o sistema/usuário e maior temperatura encontrada dentre as medições de todos os sensores
de temperatura do processador.
 
=== Intel Advanced Smart Cache ===
Linha 117 ⟶ 60:
A arquitetura Intel Core foi desenvolvida desde o começo prevendo-se o suporte a vários núcleos por processador. Diferentemente dos processadores anteriores, os processadores Intel Core com múltiplos núcleos compartilham a memória cache de nível 2 (L2).
 
A primeira vantagem da estratégia de compartilhar o cache L2 é que a quantidade de cache L2 pode ser alterada dinamicamente de acordo com a carga dos núcleos. Em um processador DualCore, quando um núcleo está inativo, o núcleo ativo fica com toda a cache L2 à sua disposição. Quando vários núcleos estão ativos a cache L2 é dividia proporcionalmente entre os núcleos de acordo com a frequênciafreqüência de requisições feitas por cada núcleo à memória.
 
A segunda vantagem é que ao utilizar uma única cache L2 não é necessário utilizar técnicas para garantir a consistência de dados entre as caches dos vários núcleos, diminuindo a utilização do barramento entre o processador e a memória do sistema.
Linha 132 ⟶ 75:
 
A microarquitetura possui 6 unidades independentes de pré-carregamento de dados:
-* 2 unidades na cache de primeiro nível (L1) do primeiro núcleo
-* 2 unidades na cache de primeiro nível (L1) do segundo núcleo
-* 2 unidades na cache de segundo nível (L2) compartilhada entre os núcleos
 
A microarquiteturaCore 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 guardaguardam informações sobre o 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.
As unidades guarda informações sobre o 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.
 
- Em um loop, os preditores de desvio <ref>Também conhecidos pelo estrangeirismo ''branch predictors''</ref> normalmente assumem que na próxima iteração a execução ocorrerá dentro do loop (a condição para saída do loop é considerada sempre como não verdadeira). Sendo assim, esse preditores de desvio sempre erram a previsão na iteração que sai do loop. A microarquitetura Core introduziu preditores queregistram em qual iteração um loop foi interrompido. Na próxima vez que o mesmo loop for executado, se o número de iterações antes de sair do loop for o mesmo, o preditor irá acertar a previsão da última iteração, prevendo-a como uma saída do loop
 
- Desvios condicionais indiretos (onde o endereço de destino é carregado de um registrador) são intrinsicamente difíceis de pré-carregar, já que a informação sobre o endereço de destino está indisponível durante o processo de predição. Quando os preditores assumem que um desvio condicional indireto será tomado, eles verificam em uma tabela se o desvio condicional indireto já foi tomado anteriormente e qual foi o seu endereço de destino naquela execução. Os preditores utilizam então esse endereço como o provável destino da execução atual.
 
 
-* Em um loop, os preditores de desvio <ref>Também conhecidos pelo estrangeirismo ''branch predictors''</ref> normalmente assumem que na próxima iteração a execução ocorrerá dentro do loop (a condição para saída do loop é considerada sempre como não verdadeira). Sendo assim, esse preditores de desvio sempre erram a previsão na iteração que sai do loop. A microarquitetura Core introduziu preditores queregistramque registram em qual iteração um loop foi interrompido. Na próxima vez que o mesmo loop for executado, se o número de iterações antes de sair do loop for o mesmo, o preditor irá acertar a previsão da última iteração, prevendo-a como uma saída do loop
 
-* Desvios condicionais indiretos (onde o endereço de destino é carregado de um registrador) são intrinsicamenteintrinsecamente difíceis de pré-carregar, já que a informação sobre o endereço de destino está indisponível durante o processo de predição. Quando os preditores assumem que um desvio condicional indireto será tomado, eles verificam em uma tabela se o desvio condicional indireto já foi tomado anteriormente e qual foi o seu endereço de destino naquela execução. Os preditores utilizam então esse endereço como o provável destino da execução atual.
 
A segunda técnica utilizada é a desambiguação de memória <ref> Também conhecido pelo estrangeirismo ''Memory disambiguation''</ref>. 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.
 
Quando ocorre uma instrução STORE seguida de um LOAD, podem acontecer duas situações:
-* O LOAD vai tentar carregar o dado que foi salvo pelo STORE, sendo assim a ordem de execução das instruções não pode ser alterada.
-* O LOAD vai carregar um dado diferente do salvo pelo STORE, sendo assim ele pode ser executado antes do STORE
 
O problema é que para diferenciar os dois casos, é necessário saber os endereços de memória onde o STORE está salvando os dados. Este endeçoendereço só fica disponível alguns ciclos após o início da execução do STORE. Como consequênciaconseqüência, o processador deve aguardar um ciclo após o início da execução do STORE para decidir se o LOAD já pode começar a ser executado (em paralelo com o STORE) ou se o seu início deve ser postergado para depois da finalização da execução do STORE.
 
Estudos<ref>S. Sethumadhavan, et al. Scalable Hardware Memory Disambiguation for High ILP Processors. In 36th Annual International Symposium on Microarchitecture, 2003.</ref> indicam que em mais de 97% dos casos não existe dependência entre os dados de STORE e LOAD consecutivos. Isso quer dizer que o LOAD poderia até ser executado antes do STORE.
 
Estudos<ref>
S. Sethumadhavan, et al. Scalable Hardware Memory Disambiguation for High ILP Processors. In 36th Annual International Symposium on Microarchitecture, 2003.</ref> indicam que em mais de 97% dos casos não existe dependência entre os dados de STORE e LOAD consecutivos. Isso quer dizer que o LOAD poderia até ser executado antes do STORE.
Como resultado, uma instrução ADD após o LOAD-STORE, por exemplo, é executada em 5 ciclos (STORE -> define endereço -> LOAD-> espera load -> ADD), enquanto poderia ter sido executada em 3 ciclos (LOAD -> STORE / espera load -> ADD).
 
Para solucionar o problema, a microarquitetura Core possui algoritmos que determinas com uma grande probabilidade se um par de instruções STORE-LOAD estãoestá operando sobre os mesmos dados, sem a necessidade de aguardar a definição dos endereços de memórias que as instruções estariam acessando.
 
=== Intel Advanced Digital Media Boost ===
 
==Referências==
----
Notes: <references/>
----
Notes: <references/>
----
----
 
--[[Usuário:Charlesfg|Charlesfg]] 14h30min de 19 de Setembro de 2007 (UTC)
 
 
-----
-----
 
[[Categoria:Programação paralela em arquiteturas multicore|{{SUBPAGENAME}}]]
<center>{{GFDL}}</center>