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
formatação; ortografia; cat |
|||
Linha 1:
----
[[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 ===
▲=== 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 [
=== 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
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
=== 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.
Para fazer isso, a microarquitetura Core possui aprimoramentos em recursos já existentes em processadores anteriores da Intel e alguns novos ▼
▲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:
* 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:
=== 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
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:
A microarquiteturaCore possui também 2 unidades independentes de pré carregamento de instruções:
As unidades
▲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.▼
▲
▲
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 problema é que para diferenciar os dois casos, é necessário saber os endereços de memória onde o STORE está salvando os dados. Este
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.
▲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
=== Intel Advanced Digital Media Boost ===
==Referências==
▲Notes: <references/>
[[Categoria:Programação paralela em arquiteturas multicore|{{SUBPAGENAME}}]]
|