Como o cache da CPU se encaixa nisso?

1

Então eu entendo um pouco como tudo está conectado. As instruções são armazenadas em Registros e os pontos EIP / RIP para Opcode que manipulam esses registros (código do programa).

No entanto, não consigo entender a relação do cache grande com os registros de tamanho finito que estão disponíveis.

    
por Nocturnal 10.01.2014 / 14:06

2 respostas

3

Bem ... quando você solicita algo da memória principal, a CPU procurará primeiro no cache. Se encontrá-lo lá (acerto do cache), é legal e rápido. Se não (falta de cache), tem que ir para a RAM lenta. E, em seguida, pode adicioná-lo ao cache, no processo de chutar outra coisa, para acelerar futuros acessos.

As CPUs modernas podem ter caches por núcleo, caches compartilhados entre dois núcleos e caches para toda a CPU. Geralmente, os caches menores e mais específicos são muito mais rápidos - mas caros e / ou ocupam muito espaço, então você acaba com vários níveis de cache, cada nível mais lento e maior, e a RAM principal muito grande e muito lenta. Os registradores são os mais rápidos, mas eles têm uma pequena quantidade de espaço, então você não pode armazenar tudo isso neles - necessitando de RAM e caches para isso.

Essa é uma visão de alto nível. Talvez não seja baixo o suficiente para julgar pelo resto da sua pergunta.

    
por 10.01.2014 / 14:09
2

So I understand a little bit on how it's all wired together. Instructions are stored in Registers

Não, as instruções são armazenadas na memória.

and the EIP/RIP points to Opcode that manipulates those registers (program code)

EIP / RIP aponta para o local da memória onde a CPU vai buscar a próxima instrução. Ele incrementa em 1 ou mais quando a instrução é recuperada e pode mudar completamente em uma ramificação, salto ou interrupção.

Os opcodes são a parte da instrução que realmente informa a CPU sobre o que fazer. Muitas instruções (não todas) consistem em um código de operação (novamente, a instrução real ou "comando") e os dados necessários pelo opcode (um "operando").

Alguns opcodes manipulam registros diretamente (isto é, MOV AX, imediato), muitos manipulam indiretamente os registros como efeitos colaterais (a maioria das instruções matemáticas afeta os FLAGS sob certas condições), e alguns não manipulam registros (não muitos) além de o ponteiro de instrução.

Cache é uma camada transparente entre a CPU e a RAM. A CPU verifica primeiro o cache - ao executar uma instrução que lê a memória - já que é muito mais rápida e tenta mantê-la carregada com dados usados com frequência. Em um programa assembly, você não precisa usar instruções especiais para que isso aconteça.

O registro de acessos não tem nada a ver com o cache. Os registradores podem estar envolvidos em uma operação que calcula qual localização de memória acessar, isto é, registradores podem ser usados como ponteiros e índices (endereçamento "indexado" ou "indireto"), mas endereços também podem ser especificados diretamente em instruções em linguagem assembly (este é o modo de endereçamento "absoluto"). Agora, as CPUs x86 têm um recurso transparente de "renomeação de registro" que é usado para suportar a execução fora de ordem, mas não está vinculado ao cache on-chip.

No x86, há algumas instruções que limpam o cache, e algumas CPUs permitem que você configure o cache como "cache-as-RAM" - onde a CPU usa apenas o cache e não acessa a RAM. Isso é útil se o código precisar ser executado antes que a RAM seja inicializada, como quando um firmware do sistema ou SO for iniciado ou sem perturbar a RAM, como um manipulador de falhas do sistema operacional.

    
por 10.01.2014 / 15:09

Tags