Executando programas em cache e registradores

0

Na minha classe de sistemas operacionais, foi mostrada uma imagem representando uma hierarquia de memória, começando pelo mais caro e mais rápido no topo e o menos caro e mais lento na parte inferior. No topo estava registrado e embaixo estava o cache. O professor disse que o melhor lugar para executar programas é em cache. Eu queria saber por que programas não podem ser executados em registros? Além disso, como um programa pode se carregar no cache? O cache não é algo controlado pela CPU e funciona automaticamente sem controle de software?

    
por tony_sid 03.09.2010 / 20:34

4 respostas

3

Esta é uma questão muito complicada, espere algumas respostas, pois as pessoas melhoram as respostas dos outros:)

The professor said that the best place to run programs is in cache.

Lembre-se de que o cache é MUITO vezes mais caro que a RAM normal. Quando um computador "grande" tinha 8MB (não gigabytes, megabytes), era possível encontrar máquinas todas "cache" (tecnicamente, um tipo especial de RAM chamado SRAM), mas elas eram mais caras. Agora, você tem máquinas domésticas com 4GB de memória, 4GB de SRAM com fio para o chip seria muito caro. Além disso, você tem muitas pessoas inteligentes brincando com programas e compiladores para fazer o melhor uso do cache. Com o algoritmo de cache correto, você obtém 95% do benefício do cache, com uma pequena porcentagem do custo. É claro que os palpites nem sempre estão certos. Previsão de filial do Google para mais informações.

I was wondering why programs can't be run in registers?

Os registros são o que realmente carregam e armazenam dados e endereços. Pense neles como táxis. Eles podem entregar as coisas de um lado para o outro, o que eles entregam são os dados e endereços do seu programa. Cada parte do seu programa que é "executado" passa por um registro.

Estou assumindo que você está perguntando por que você não pode simplesmente executar completamente a partir de registros. Um motivo - há tão poucos deles. Os registros clássicos da Intel x86 são contados em bytes, mas os programas estão em Megabytes, Gigabytes. Você seria uma pessoa muito rica para ter um chip que poderia executar o MS-Word fora dos registros.

Also, how can a program load itself into cache?

O programa não. O sistema operacional executa o programa e usa o chip da unidade de gerenciamento de memória para carregar as áreas do programa da RAM normal. Enquanto isso acontece, a MMU é inteligente e coloca parte da memória também em cache, com a ideia de que eu acabei de usá-la, talvez precise usá-la novamente em breve.

Isn't the cache something that's controlled by the CPU and works automatically without software control?

Sim, tecnicamente o chip de gerenciamento de memória não é a CPU. Isso costumava ser um chip separado, mas agora faz parte do bloco da CPU, para tornar a comunicação mais rápida.

    
por 03.09.2010 / 21:04
2

Seus programas agora estão revezando-se usando os registradores e os caches, provavelmente sob a direção do seu kernel do SO.

Se tudo o que você quer que seu programa faça é pegar um número e adicionar um a ele repetidamente, você provavelmente poderia fazer tudo isso nos registros. Os registradores são muito pequenos, armazenando um número cada, e o processador x86 comum tem 16 deles (8 inteiros e 8 pontos flutuantes).

Da mesma forma, se você tiver um pequeno programa que caiba no cache (e o sistema operacional não precisar alterná-lo intermitentemente para fazer outras coisas), ele será executado a partir do cache.

A maioria dos programas atualmente é muito maior que o cache. E você está solicitando ao seu computador que trabalhe em muitas coisas ao mesmo tempo, como atualizar o relógio e manter sua unidade indexada ou desenhar essa página da Web. Isso significa que, muitas vezes por segundo, ele precisa trocar a próxima coisa para trabalhar no cache, para que possa trabalhar um pouco (conhecido como contextos de alternância).

Você pode ler mais sobre caches e registra .

    
por 03.09.2010 / 20:54
1

Seus programas são executados a partir de registros! Eles também estão sendo executados no cache. Todas essas coisas ajudam a tornar seu computador mais rápido. O maior fator limitante é o tamanho. Existem registros de CPU muito limitados. A típica máquina x86 tem apenas 8 registradores de 32 bits que a CPU usa para armazenar os dados em que está trabalhando. Como você sabe, o acesso ao registro é muito rápido, mas devido ao tamanho limitado, poucos dados podem ser armazenados nos registros.

O cache é semelhante, pois é limitado em tamanho. Caches menores (L1, por exemplo) são primeiro verificados pela CPU em busca de dados, se os dados não forem encontrados naquele cache, eles verificam os caches subsequentes (L2, L3, etc). Cada nível de cache fica progressivamente maior e mais lento para acessar. Se até o final da verificação de todos os caches os dados ainda não forem encontrados, a CPU deve extrair os dados da RAM.

Os aplicativos de software normalmente não têm controle explícito sobre o que é colocado nos registradores ou no cache, a menos que o aplicativo seja um driver de baixo nível ou um aplicativo semelhante.

    
por 03.09.2010 / 20:58
1

I was wondering why programs can't be run in registers?

A maioria das arquiteturas de conjuntos de instruções (ISAs) não suportam a indireção nos registradores. Ou seja, os endereços de registro são codificados como constantes na instrução. (Essa limitação simplifica significativamente o pipelining).

Os caches também têm a vantagem de serem recursos de microarquitetura - ou seja, o tamanho e outras características são visíveis apenas para o software em termos de desempenho. Isto permite diferentes implementações de um ISA para usar diferentes tamanhos et al. sem perda de compatibilidade binária, por exemplo, para diferentes metas de desempenho ou aplicação ou para ajustar as alterações no equilíbrio de compensações de alterações na tecnologia de fabricação.

Além disso, à medida que o número de registradores visíveis de software aumenta, o benefício do gerenciamento de compiladores tende a diminuir em relação ao custo na complexidade e no tempo de compilação do compilador, especialmente para programas com fluxo de controle complexo. Se vários níveis de registros forem usados (como no Cray-1) para permitir um pequeno grupo de registros rápido, a complexidade da alocação de registros do compilador é aumentada.

Além disso, o tamanho de um registrador de propósito geral é tipicamente definido pelo tamanho do espaço de endereçamento, enquanto o tamanho de uma linha de cache (o item comparável para caches) envolve compensações de overhead de tag, localidade espacial de referência esperada (maior as linhas de cache podem pré-buscar com eficiência os dados próximos, mas a largura de banda e o armazenamento são desperdiçados se os dados não forem usados enquanto estão no cache), considerações de largura de banda (maior duração da largura de banda são mais atraentes e cache o tráfego de coerência é influenciado pelo tamanho da linha), compartilhamento falso (onde um processador grava em um local próximo a um local que outro processador irá ler; grandes linhas de cache introduzem dependências de comunicação falsas), etc.

Also, how can a program load itself into cache? Isn't the cache something that's controlled by the CPU and works automatically without software control?

O cache é controlado pela CPU, mas o software pode pré-procurar itens no cache de forma explícita (e o Itanium ISA suporta dicas non-temporal-at-cache-level_N para ajudar o hardware a gerenciar melhor a alocação e a substituição do cache). Os acessos ordinários à memória carregarão no cache L1 o item solicitado e os itens dentro da linha de cache naturalmente alinhada e essa linha de cache normalmente - excluindo invalidações de coerência, por exemplo - permanecem presentes até que a CPU opte por substituí-la por outra linha de cache dados solicitados por outro - possivelmente especulativo - acesso à memória ou pré-busca de hardware; então, o software tem alguma capacidade de gerenciar o conteúdo do cache.

O software também pode explorar o conhecimento de características específicas de um sistema de cache (algoritmos e estruturas de dados preocupados com cache) ou as características gerais compartilhadas pela maioria dos sistemas de cache ( algoritmos de cache-oblivious ) para reduzir a frequência de falhas de cache (onde os itens precisam ser recuperados da memória ou um nível de cache mais próximo da memória).

    
por 17.12.2012 / 03:29