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)
Alymenbr (discussão | contribs)
Linha 107:
 
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 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
Linha 129 ⟶ 130:
 
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ço só fica disponível alguns ciclos após o início da execução do STORE. Como consequê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.