Instituto de Matemática e Estatística - USP MAC Organização de Computadores. EP1 - Experimentos com o cache

Tamanho: px
Começar a partir da página:

Download "Instituto de Matemática e Estatística - USP MAC Organização de Computadores. EP1 - Experimentos com o cache"

Transcrição

1 Instituto de Matemática e Estatística - USP MAC Organização de Computadores Relatório EP1 - Experimentos com o cache Ana Luiza Domingues Fernandez Basalo de setembro de 2010

2 Sumário 1 Introdução 1 2 Visão geral - cache Motivação Organização/Arquitetura Funcionamento Testes Sistema em que foram feitos os testes teste1.c Testes com o código-fonte original Testes com o código alterado Por que percorrer matrizes por linhas ou por colunas faz tanta diferença? Com que tamanhos de matrizes essa diferença começa a ser perceptível? Qual a relação deste valor com o tamanho do cache? teste2.c O que acontece quando percorremos vetores com deslocamentos? Para quais deslocamentos o desempenho fica pior? Você sabe explicar por que este valor causa tal queda no desempenho? teste3.c Por que o programa teste3.c demora tanto para rodar? Você tem alguma solução melhor para este problema? Programas adicionais EP2 de MAC Segundo Semestre de teste teste4.c teste4-mod.c Conclusão e Considerações finais 22 i

3 1 Introdução O presente documento é o Relatório exigido pelo Exercício-Programa 1 da disciplina MAC Organização de Computadores. O Relatório está organizado da seguinte forma: primeiro é apresentada uma visão geral do cache (o que é, como funciona e sua relação com a performance de programas). A seguir, o documento fornece resultados e análises de testes feitos com os programas do arquivo Arquivos do EP1 (EP1.tar.gz) do PACA da disciplina. Ainda no que concerne a testes, serão mostrados mais alguns realizados sobre programas adicionas (não presentes no supracitado arquivo). Finalmente, o Relatório apresenta uma conclusão sintetizando os conceitos e resultados obtidos. 2 Visão geral - cache O cache da CPU é um cache usado pela Unidade Central de Processamento para reduzir o tempo médio de acesso a memória. O cache é um tipo de memória mais rápido e menor, que armazena cópias dos dados das posições mais acessadas da memória principal. Se a maioria dos acessos à memória forem acessos ao cache, então a latência média de acessos será mais próxima à latência do cache do que à latência da memória principal. Quando o processador precisa fazer uma operação de leitura ou escrita na memória principal, ele primeiro checa se uma cópia do dado está no cache. Se for esse o caso, o processador imediatamente lê ou escreve no cache, o que é muito mais rápido do que ler ou escrever direto na memória principal. A maioria das CPUs atuais possui pelo menos três caches independentes: um cache de instruções para acelerar a busca de instruções, um cache de dados para acelerar a busca e o armazenamento de dados e um buffer de tradução usado para acelerar a tradução (virtual para física) de endereços de instruções e dados. Daqui para a frente, iremos nos referir ao cache da CPU como cache indistintamente. 2.1 Motivação CPUs hoje são muito mais sofisticadas do que eram há 25 anos, quando a frequência do core da CPU era de um nível equivalente ao do barramento de memória: os acessos à memória eram apenas um pouco mais lentos do que os acessos aos registradores. Mas isso mudou drasticamente nos anos 90, quando os designers de CPU aumentaram a frequência do core da CPU mas a frequência do barramento de memória e das memórias RAM não aumentou proporcionalmente. Isso não ocorreu porque memórias RAM mais rápidas não podiam ser construídas. Na verdade, teoricamente, era possível desenvolver memórias RAM tão rápidas quanto o core da CPU, o problema é que, na prática, tais memórias não eram economicamente viáveis. Essa diferença entre as frequências da CPU e da memória RAM levava a uma queda considerável no desempenho das aplicações. Os caches surgiram então como uma solução para esse problema: um tipo de memória mais próximo ao core da CPU, que seria, portanto, mais rápido de ser acessado que a memória principal. Observando os acessos à memória, percebeu-se que tanto o código como os dados de um programa em execução tem uma localização (temporal e espacial). Isso significa que, durante curtos intervalos de tempo, há uma boa chance de que o mesmo código ou dado seja usado novamente. Para código, isso significa, idealmente, que há um laço, e, portanto, a mesma porção de código será executada muitas vezes consecutivas. No caso dos dados, idealmente, os acessos estão restritos a regiões pequenas da memória, logo, há uma grande chance de que os mesmos dados sejam usados novamente dentro de um intervalo de tempo não muito longo. Essas observações são a chave do funcionamento dos caches de CPUs atuais: a ideia, simplificadamente, é manter nos caches os dados e instruções que são usados com mais frequência, evitando ter de acessá-los 1

4 na memória principal, o que causaria prejuízos à performance dos programas. Um cálculo simples pode mostrar o quanto os caches podem ser úteis. Considere a seguinte situação hipotética: suponha que o acesso à memória principal leva 200 ciclos e o acesso à memória cache leva 15 ciclos. Então um código que use 100 elementos de dados 100 vezes cada levará ciclos em operações com memória se não houver cache e apenas ciclos se todos os dados puderem ser armazenados no cache. Isso significa uma melhora de 91.5%. É claro que o exemplo apresentado é apenas uma situação teórica. Na prática, é impossível armazenar sempre todos os programas e seus dados inteiramente no cache. De fato, o tamanho dos caches é em torno de 1/1000 do tamanho da memória principal (atualmente, em média, 4MB de cache para 4GB de RAM). O tamanho relativamente limitado dos caches requer estratégias para determinar o que deve ser armazenado no cache num dado momento. É claro que o próprio programador pode construir programas que aumentem o uso do cache. Falaremos sobre isso nas seções subsequentes. 2.2 Organização/Arquitetura Antes de abordarmos detalhes do funcionamento dos caches, apresentamos uma breve explicação da arquitetura (organização) de um sistema de caches. Cache: Configuração mínima A figura acima apresenta, de maneira simplista, a configuração mínima de um sistema que usa cache: corresponde à arquitetura dos primeiros sistemas que começaram a usar cache. Após a introdução do cache, o sistema logo começou a tornar-se mais complexo. A diferença de velocidade entre o acesso ao cache e o acesso à memória aumentou novamente, ao ponto de um outro nível de cache precisar ser adicionado (um nível com maior espaço de armazenamento, mas um pouco mais lento que o primeiro nível). Isso porque aumentar o tamanho do primeiro nível de cache não era algo economicamente viável. Atualmente, há sistemas com três níveis de cache. Cache: níveis L1i = cache L1 de instruções L1d = cache L1 de dados Note que o diagrama acima é apenas ilustrativo de um sistema com três níveis de cache: o fluxo dos dados, na realidade, não precisa passar para níveis superiores de cache para ir até a memória principal. 2

5 Além disso, atualmente, temos processadores com múltiplos cores, cada qual rodando múltiplas threads: Múltiplos processadores, múltiplos cores e múltiplas threads Neste esquema, há dois processadores, cada um com dois cores, cada qual rodando duas threads. As threads compartilham os caches L1. Os cores (em cinza escuro) possuem caches L1 individuais. Todos os cores da CPU compartilham caches de níveis superiores. Os dois processadores (em cinza claro) não compartilham caches. É claro que nem todo sistema funciona assim, é apenas um esquema ilustrativo para facilitar o entendimento. 2.3 Funcionamento Sabemos que (uma parte do) o conteúdo da memória principal é copiado para o cache, para que o processador possa acessar os dados e instruções de que necessita de maneira mais rápida. As perguntas mais naturais quanto a esse processo seriam: como são carregados os dados da memória principal para o cache? Quando um certo dado não está no cache quais são os procedimentos? Como é decidido quais são os dados e instruções que deverão permanecer no cache? Esta seção aborda as respostas para essas questões num nível mais ou menos abstrato. Seguindo os princípios da localização (espacial e temporal) discutidos na apresentação da motivação, é fácil de entender porque os caches são tipicamente organizados de modo que, quando um certo dado ou instrução é carregado, os objetos próximos a ele na memória são carregados também: quando a primeira instrução de um laço é carregada no cache, um tempo razoável será economizado se as posições vizinhas da memória forem carregadas ao mesmo tempo. Dessa forma, o processador não terá que ir até a memória principal em busca das instruções seguintes. Por esse motivo, quando o cache carrega um certo dado ou código, o bloco dos itens vizinhos é também carregado. Cada bloco carregado no cache é identificado com um número chamado tag, que pode ser usado para determinar o endereço original dos dados ou instruções na memória principal. Desse modo, quando o processador está procurando por um dado ou código (chamados de word daqui em diante), ele precisa apenas conferir as tags para descobrir se a word está no cache. Quando o processador precisa de uma word, ele então checa o cache, como descrito no parágrafo anterior. Se a word for encontrada no cache, então dizemos que houve um cache hit. Caso contrário, dizemos que ocorreu um cache miss. Neste último caso, a word requisitada é carregada numa linha (o bloco de words vizinhas mais tag correspondente) no cache e a word é então enviada ao processador. Dependendo do design da interface do cache/processador, a word é carregada primeiro no cache e depois enviada ao processador ou carregada e enviada simultaneamente. Se o cache já estiver cheio e for preciso carregar um novo bloco da memória principal, é necessário decidir quais blocos do cache serão descartados. Existem várias formas de tomar tal decisão, baseadas em algoritmos chamados de algoritmos de substituição: ˆ Least Recently Used (LRU) Esse método substitui o bloco que não foi lido pelo processador há mais tempo. 3

6 ˆ ˆ First In First Out (FIFO) - Esse método substitui o bloco que está no cache há mais tempo. Least Frequently Used (LFU) - Esse método substitui o bloco que foi menos acessado desde que carregado no cache. ˆ Aleatório - Substitui um bloco selecionado aleatoriamente. 3 Testes 3.1 Sistema em que foram feitos os testes Todos os testes foram executados numa plataforma com a seguinte configuração: ˆ ˆ ˆ Processador Intel Core2Duo E4500, 2.20GHz, 64KB L1, 2MB L2 (shared); 2GB de RAM; Fedora 13 - Linux ( fc13.i686); ˆ GCC 4.4.4; ˆ Valgrind É importante salientar que os testes foram rodados em condições semelhantes (mesma quantidade de processos rodando etc.), para garantir resultados mais precisos. 3.2 teste1.c Esta subseção apresenta alguns resultados de testes feitos sobre teste1.c. O arquivo teste1.c mostra um exemplo simples, no qual uma matriz grande é alocada e, em seguida, preenchida com zeros. A questão está na forma como percorremos a matriz. Quando nenhum argumento é passado na linha de comando, a matriz é percorrida por linhas, caso contrário, ela é percorrida por colunas Testes com o código-fonte original O código teste1.c foi compilado usando o seguinte comando: $ gcc teste1.c -o teste1 A seguir, o programa teste1 foi executado de duas maneiras: Sem passar nenhum argumento pela linha de comando (a matriz foi percorrida por linhas): $ time./teste1 real user sys 0m0.684s 0m0.302s 0m0.237s $ time./teste1 real user sys 0m0.699s 0m0.296s 0m0.245s Passando um argumento pela linha de comando (a matriz foi percorrida por colunas): 4

7 $ time./teste1 argumento real user sys 0m1.998s 0m1.547s 0m0.360s $ time./teste1 argumento real user sys 0m2.274s 0m1.687s 0m0.400s Agora compilando com otimização: $ gcc -O2 teste1.c -o teste1 A seguir, novamente, o programa teste1 foi executado de duas maneiras: Sem passar nenhum argumento pela linha de comando (a matriz foi percorrida por linhas): $./teste1 real user sys 0m0.374s 0m0.073s 0m0.342s $./teste1 real user sys 0m0.371s 0m0.072s 0m0.364s Passando um argumento pela linha de comando (a matriz foi percorrida por colunas): $ time./teste1 argumento real user sys 0m1.871s 0m1.413s 0m0.393s $ time./teste1 argumento real user sys 0m1.867s 0m1.437s 0m0.388s Claramente, o programa foi consideravelmente mais rápido ao percorrer a matriz por linha. A seguir, o programa (compilado sem otimização), foi executado com o programa Valgrind, para que o comportamento em relação ao cache pudesse ser observado. Primeiro, execução sem argumentos (percorrendo por linhas): $ valgrind --tool=cachegrind./teste1 ==2187== Cachegrind, a cache and branch-prediction profiler ==2187== Copyright (C) , and GNU GPL d, by Nicholas Nethercote et al. ==2187== Using Valgrind and LibVEX; rerun with -h for copyright info ==2187== Command:./teste1 5

8 ==2187== ==2187== ==2187== I refs: 1,104,752,462 ==2187== I1 misses: 716 ==2187== L2i misses: 712 ==2187== I1 miss rate: 0.00% ==2187== ==2187== ==2187== D refs: 702,490,091 (601,646,842 rd + 100,843,249 wr) ==2187== D1 misses: 6,276,635 ( 13,519 rd + 6,263,116 wr) ==2187== L2d misses: 6,276,345 ( 13,271 rd + 6,263,074 wr) ==2187== D1 miss rate: 0.8% ( 0.0% + 6.2% ) ==2187== L2d miss rate: 0.8% ( 0.0% + 6.2% ) ==2187== ==2187== L2 refs: 6,277,351 ( 14,235 rd + 6,263,116 wr) ==2187== L2 misses: 6,277,057 ( 13,983 rd + 6,263,074 wr) ==2187== L2 miss rate: 0.3% ( 0.0% + 6.2% ) Depois, execução com argumento (percorrendo por colunas): $ valgrind --tool=cachegrind./teste1 argumento ==2197== Cachegrind, a cache and branch-prediction profiler ==2197== Copyright (C) , and GNU GPL d, by Nicholas Nethercote et al. ==2197== Using Valgrind and LibVEX; rerun with -h for copyright info ==2197== Command:./teste1 argumento ==2197== ==2197== ==2197== I refs: 1,104,752,471 ==2197== I1 misses: 716 ==2197== L2i misses: 712 ==2197== I1 miss rate: 0.00% ==2197== ==2197== ==2197== D refs: 702,490,096 (601,646,845 rd + 100,843,251 wr) ==2197== D1 misses: 106,284,463 ( 6,272,892 rd + 100,011,571 wr) ==2197== L2d misses: 98,399,552 ( 94,246 rd + 98,305,306 wr) ==2197== D1 miss rate: 15.1% ( 1.0% % ) ==2197== L2d miss rate: 14.0% ( 0.0% % ) ==2197== ==2197== L2 refs: 106,285,179 ( 6,273,608 rd + 100,011,571 wr) ==2197== L2 misses: 98,400,264 ( 94,958 rd + 98,305,306 wr) ==2197== L2 miss rate: 5.4% ( 0.0% % ) A quantidade de falhas de cache é mais elevada quando a matriz é percorrida por colunas Testes com o código alterado O código-fonte de teste1.c foi alterado (anexado com o nome de teste1-mod.c) para que pudesse apresentar o seguinte comportamento: teste1-mod é chamado com mais três argumentos na linha de comando, a saber, um inteiro que representa o número de linhas da matriz a ser alocada, um inteiro que representa o número de colunas da supracitada matriz e uma flag, que, quando assume o valor 0, percorre a matriz por linha e, quando assume outro valor, percorre a matriz por colunas. $./teste1-mod [número de linhas] [número de colunas] [flag] 6

9 O programa teste1-mod interpreta os argumentos fornecidos, aloca uma matriz com as dimensões especificadas e, de acordo com a flag - se esta for 0, preenche a matriz com zeros percorrendo-a por linhas; caso contrário, preenche a matriz com zeros percorrendo-a por colunas. A ideia é testar o programa com várias dimensões de matrizes, observando os resultados para as diferentes formas de percorrer a matriz. Foram usados alguns scripts para realizar os testes e exibir os resultados. O programa foi executado com várias dimensões de matrizes, ora por linha, ora por coluna, para comparar os tempos de execução. Em seguida, o programa foi executado com o Valgrind, para analisar falhas de cache. Os resultados destes testes vem a seguir. A tabela seguinte apresenta os tempos de execuções de teste1-mod para determinados números de linhas e de colunas, tanto para varredura da matriz por linha como por coluna. Dimensões da matriz Tempo de execução (ms) Elementos Linhas Colunas Orientada a linha Orientada a coluna m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.001s 0m0.001s m0.003s 0m0.003s m0.002s 0m0.003s m0.002s 0m0.002s m0.002s 0m0.002s m0.003s 0m0.003s m0.004s 0m0.004s m0.015s 0m0.010s m0.008s 0m0.013s m0.009s 0m0.014s m0.009s 0m0.009s m0.009s 0m0.015s m0.010s 0m0.015s m0.017s 0m0.037s m0.096s 0m0.096s m0.077s 0m0.104s m0.077s 0m0.138s m0.078s 0m0.122s m0.078s 0m0.170s m0.081s 0m0.147s m0.093s 0m0.392s m0.164s 0m0.367s m0.935s 0m0.936s 7

10 m0.761s 0m1.045s m0.759s 0m1.402s m0.757s 0m1.190s m0.762s 0m3.948s m0.762s 0m1.878s m0.792s 0m3.890s m0.915s 0m3.866s m1.612s 0m3.638s m57.955s 1m10.623s Apresentamos os tempos referentes às execuções para algumas matrizes em um gráfico, para melhor visualização: Observando os resultados, percebe-se que, para matrizes de até elementos não há diferença substancial entre os tempos de execução para a varredura orientada a linha e para a varredura orientada a coluna. Quando consideramos matrizes com número de elementos maior ou igual a , podemos observar que as execuções orientadas a linha foram, à medida que o número de elementos aumentava, progressivamente mais rápidas. É preciso fazer uma observação com relação a um caso: o caso da matriz x1 ( linhas por 1 coluna) foi o único caso em que o programa orientado a coluna foi mais rápido que o orientado a linha. A tabela seguinte apresenta as falhas de cache de teste1-mod para determinados números de linhas e de colunas, tanto para varredura da matriz por linha como por coluna. Dimensões da matriz Falhas de cache Elementos Linhas Colunas Orientada a linha Orientada a coluna I1 miss rate: 0.38% I1 miss rate: 0.38% L2i miss rate: 0.37% L2i miss rate: 0.37% D1 miss rate: 1.7% D1 miss rate: 1.7% L2d miss rate: 1.4% L2d miss rate: 1.4% L2 miss rate: 0.7% L2 miss rate: 0.7% 8

11 I1 miss rate: 0.38% I1 miss rate: 0.38% L2i miss rate: 0.37% L2i miss rate: 0.37% D1 miss rate: 1.7% D1 miss rate: 1.7% L2d miss rate: 1.4% L2d miss rate: 1.4% L2 miss rate: 0.7% L2 miss rate: 0.7% I1 miss rate: 0.37% I1 miss rate: 0.37% L2i miss rate: 0.37% L2i miss rate: 0.37% D1 miss rate: 1.7% D1 miss rate: 1.7% L2d miss rate: 1.4% L2d miss rate: 1.4% L2 miss rate: 0.7% L2 miss rate: 0.7% I1 miss rate: 0.38% I1 miss rate: 0.38% L2i miss rate: 0.38% L2i miss rate: 0.38% D1 miss rate: 1.7% D1 miss rate: 1.7% L2d miss rate: 1.4% L2d miss rate: 1.4% L2 miss rate: 0.7% L2 miss rate: 0.7% I1 miss rate: 0.37% I1 miss rate: 0.37% L2i miss rate: 0.37% L2i miss rate: 0.36% D1 miss rate: 1.7% D1 miss rate: 1.7% L2d miss rate: 1.4% L2d miss rate: 1.4% L2 miss rate: 0.7% L2 miss rate: 0.7% I1 miss rate: 0.31% I1 miss rate: 0.32% L2i miss rate: 0.31% L2i miss rate: 0.32% D1 miss rate: 1.7% D1 miss rate: 1.5% L2d miss rate: 1.4% L2d miss rate: 1.2% L2 miss rate: 0.6% L2 miss rate: 0.6% I1 miss rate: 0.36% I1 miss rate: 0.34% L2i miss rate: 0.36% L2i miss rate: 0.34% D1 miss rate: 1.6% D1 miss rate: 1.5% L2d miss rate: 1.3% L2d miss rate: 1.3% L2 miss rate: 0.7% L2 miss rate: 0.6% I1 miss rate: 0.35% I1 miss rate: 0.35% L2i miss rate: 0.35% L2i miss rate: 0.35% D1 miss rate: 1.6% D1 miss rate: 1.6% L2d miss rate: 1.3% L2d miss rate: 1.3% L2 miss rate: 0.6% L2 miss rate: 0.6% I1 miss rate: 0.30% I1 miss rate: 0.30% L2i miss rate: 0.30% L2i miss rate: 0.30% D1 miss rate: 1.4% D1 miss rate: 1.4% L2d miss rate: 1.2% L2d miss rate: 1.2% L2 miss rate: 0.6% L2 miss rate: 0.6% I1 miss rate: 0.13% I1 miss rate: 0.13% L2i miss rate: 0.13% L2i miss rate: 0.13% D1 miss rate: 0.7% D1 miss rate: 0.8% L2d miss rate: 0.6% L2d miss rate: 0.7% L2 miss rate: 0.2% L2 miss rate: 0.3% I1 miss rate: 0.23% I1 miss rate: 0.18% L2i miss rate: 0.23% L2i miss rate: 0.18% D1 miss rate: 1.3% D1 miss rate: 0.9% L2d miss rate: 1.1% L2d miss rate: 0.8% L2 miss rate: 0.5% L2 miss rate: 0.4% I1 miss rate: 0.22% I1 miss rate: 0.22% L2i miss rate: 0.22% L2i miss rate: 0.22% 9

12 D1 miss rate: 1.4% D1 miss rate: 1.4% L2d miss rate: 1.2% L2d miss rate: 1.2% L2 miss rate: 0.5% L2 miss rate: 0.5% I1 miss rate: 0.20% I1 miss rate: 0.20% L2i miss rate: 0.20% L2i miss rate: 0.20% D1 miss rate: 1.2% D1 miss rate: 1.2% L2d miss rate: 1.0% L2d miss rate: 1.0% L2 miss rate: 0.5% L2 miss rate: 0.5% I1 miss rate: 0.10% I1 miss rate: 0.10% L2i miss rate: 0.10% L2i miss rate: 0.10% D1 miss rate: 1.2% D1 miss rate: 3.4% L2d miss rate: 0.6% L2d miss rate: 0.7% L2 miss rate: 0.2% L2 miss rate: 0.3% I1 miss rate: 0.01% I1 miss rate: 0.01% L2i miss rate: 0.01% L2i miss rate: 0.01% D1 miss rate: 0.6% D1 miss rate: 0.6% L2d miss rate: 0.2% L2d miss rate: 0.2% L2 miss rate: 0.0% L2 miss rate: 0.0% I1 miss rate: 0.05% I1 miss rate: 0.03% L2i miss rate: 0.05% L2i miss rate: 0.03% D1 miss rate: 0.8% D1 miss rate: 0.5% L2d miss rate: 0.8% L2d miss rate: 0.5% L2 miss rate: 0.3% L2 miss rate: 0.2% I1 miss rate: 0.05% I1 miss rate: 0.04% L2i miss rate: 0.05% L2i miss rate: 0.04% D1 miss rate: 0.8% D1 miss rate: 0.8% L2d miss rate: 0.8% L2d miss rate: 0.7% L2 miss rate: 0.3% L2 miss rate: 0.3% I1 miss rate: 0.05% I1 miss rate: 0.04% L2i miss rate: 0.04% L2i miss rate: 0.04% D1 miss rate: 0.8% D1 miss rate: 0.8% L2d miss rate: 0.8% L2d miss rate: 0.8% L2 miss rate: 0.3% L2 miss rate: 0.3% I1 miss rate: 0.04% I1 miss rate: 0.04% L2i miss rate: 0.03% L2i miss rate: 0.04% D1 miss rate: 0.9% D1 miss rate: 10.0% L2d miss rate: 0.7% L2d miss rate: 0.7% L2 miss rate: 0.2% L2 miss rate: 0.2% I1 miss rate: 0.01% I1 miss rate: 0.01% L2i miss rate: 0.01% L2i miss rate: 0.01% D1 miss rate: 1.0% D1 miss rate: 3.9% L2d miss rate: 0.3% L2d miss rate: 0.3% L2 miss rate: 0.1% L2 miss rate: 0.1% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.5% D1 miss rate: 0.5% L2d miss rate: 0.1% L2d miss rate: 0.1% L2 miss rate: 0.0% L2 miss rate: 0.0% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 0.4% L2d miss rate: 0.7% L2d miss rate: 0.4% 10

13 L2 miss rate: 0.3% L2 miss rate: 0.1% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 11.5% L2d miss rate: 0.7% L2d miss rate: 0.7% L2 miss rate: 0.3% L2 miss rate: 0.2% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7 D1 miss rate: 0.7% L2d miss rate: 0.7% L2d miss rate: 0.7% L2 miss rate: 0.3% L2 miss rate: 0.3% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.8% D1 miss rate: 12.8% L2d miss rate: 0.7% L2d miss rate: 0.7% L2 miss rate: 0.3% L2 miss rate: 0.3% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.8% D1 miss rate: 10.7% L2d miss rate: 0.7% L2d miss rate: 0.8% L2 miss rate: 0.3% L2 miss rate: 0.3% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.9% D1 miss rate: 3.9% L2d miss rate: 0.9% L2d miss rate: 3.9% L2 miss rate: 0.3% L2 miss rate: 1.3% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.5% D1 miss rate: 0.5% L2d miss rate: 0.5% L2d miss rate: 0.5% L2 miss rate: 0.1% L2 miss rate: 0.1% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 0.4% L2d miss rate: 0.7% L2d miss rate: 0.4% L2 miss rate: 0.3% L2 miss rate: 0.1% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 11.6% L2d miss rate: 0.7% L2d miss rate: 0.7% L2 miss rate: 0.3% L2 miss rate: 0.2% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 12.4% L2d miss rate: 0.7% L2d miss rate: 0.7% L2 miss rate: 0.3% L2 miss rate: 0.3% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 11.3% L2d miss rate: 0.7% L2d miss rate: 10.0% L2 miss rate: 0.3% L2 miss rate: 4.0% I1 miss rate: 0.00% I1 miss rate: 0.00% 11

14 D1 miss rate: 0.7% D1 miss rate: 12.9% L2d miss rate: 0.7% L2d miss rate: 10.0% L2 miss rate: 0.3% L2 miss rate: 4.0% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.8% D1 miss rate: 10.8% L2d miss rate: 0.8% L2d miss rate: 10.0% L2 miss rate: 0.3% L2 miss rate: 3.8% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.9% D1 miss rate: 3.9% L2d miss rate: 0.9% L2d miss rate: 3.9% L2 miss rate: 0.3% L2 miss rate: 1.3% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.5% D1 miss rate: 0.5% L2d miss rate: 0.5% L2d miss rate: 0.5% L2 miss rate: 0.1% L2 miss rate: 0.1% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 0.4% L2d miss rate: 0.7% L2d miss rate: 0.4% L2 miss rate: 0.3% L2 miss rate: 0.1% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 11.6% L2d miss rate: 0.7% L2d miss rate: 0.7% L2 miss rate: 0.3% L2 miss rate: 0.2% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 12.4% L2d miss rate: 0.7% L2d miss rate: 0.7% L2 miss rate: 0.3% L2 miss rate: 0.3% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 12.4% L2d miss rate: 0.7% L2d miss rate: 10.5% L2 miss rate: 0.3% L2 miss rate: 4.2% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 13.2% L2d miss rate: 0.7% L2d miss rate: 12.2% L2 miss rate: 0.3% L2 miss rate: 4.9% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.7% D1 miss rate: 12.9% L2d miss rate: 0.7% L2d miss rate: 12.0% L2 miss rate: 0.3% L2 miss rate: 4.8% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.8% D1 miss rate: 10.5% 12

15 L2d miss rate: 0.8% L2d miss rate: 10.5% L2 miss rate: 0.3% L2 miss rate: 4.0% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.9% D1 miss rate: 3.9% L2d miss rate: 0.9% L2d miss rate: 3.9% L2 miss rate: 0.3% L2 miss rate: 1.3% I1 miss rate: 0.00% I1 miss rate: 0.00% D1 miss rate: 0.5% D1 miss rate: 0.5% L2d miss rate: 0.5% L2d miss rate: 0.5% L2 miss rate: 0.1% L2 miss rate: 0.1% Assim como no caso do tempo de execução, percebe-se que, para matrizes de até elementos não há diferença substancial entre as taxas de falhas de cache para a varredura orientada a linha e para a varredura orientada a coluna. Quando consideramos matrizes com número de elementos maior ou igual a , podemos observar que as execuções orientadas a linha tiveram menos falhas que as orientadas a coluna (ou, em alguns poucos casos, porcentagens de falhas similares) Por que percorrer matrizes por linhas ou por colunas faz tanta diferença? Os resultados dos testes mostram que é melhor percorrer matrizes por linhas (quando usando a linguagem C). Em C, matrizes são armazenadas na memória como se as linhas fossem concatenadas umas após as outras. Em outras palavras, C armazena vetores multidimensionais por linhas. Assim, quando a CPU necessita de um dado de uma certa posição de uma matriz (chamemos tal dado de m[i][j]), m[i][j] e os vizinhos dele estão ou serão carregados no cache (se possível). Mas os vizinhos de m[i][j] são os elementos da matriz que estão na mesma linha ou nas adjacentes (i.e. em colunas adjacentes da mesma linha ou no início ou no final de uma linha adjacente) - são os elementos m[i][j+1], etc., ou mesmo m[i+1][0] ou m[i-1][k] - onde k é o número de colunas subtraído de um. Assim sendo, se o programa for tal que o próximo dado necessário após m[i][j] segue uma varredura por linha, é grande a chance de que ele já 13

16 esteja no cache (i.e. o programa necessita de m[i][j+1], etc). Se, ao contrário, a varredura for feita por colunas, então seria necessário um dado de uma mesma coluna mas de outra linha (m[i+1][j]). Mas, nesse caso, seria maior a chance do dado não estar no cache, e portanto, provavelmente seria necessário ir até a memória principal, o que é mais custoso. Daí as maiores taxas de falhas de cache e tempos de execução mais longos para os programas que percorrem a matriz por colunas Com que tamanhos de matrizes essa diferença começa a ser perceptível? Os resultados dos testes mostram que uma diferença substancial só apareceu quando as matrizes tinham número de elementos da ordem de Mais alguns testes, para tentar detectar um ponto em que as diferenças começam a ser perceptíveis: Dimensões da matriz Tempo de execução Elementos Linhas Colunas Orientada a linha Orientada a coluna m0.004s 0m0.004s m0.005s 0m0.006s m0.006s 0m0.009s m0.006s 0m0.011s m0.008s 0m0.012s m0.009s 0m0.014s m0.009s 0m0.015s Há uma diferença sutil para elementos. As diferenças mais substanciais começaram a aparecer com matrizes de tamanho entre e elementos Qual a relação deste valor com o tamanho do cache? A partir dos resultados, podemos afirmar que a diferença começa a ser perceptível quando o tamanho da matriz é em torno de 0.7 do tamanho do cache (L2). 3.3 teste2.c Esta subseção apresenta alguns resultados de testes feitos sobre teste2.c. O arquivo teste2.c mostra um programa que aloca três vetores, inicializa os dois primeiros, depois soma os dois posição a posição, guardando a resposta no terceiro. Porém, se um número é passado na linha de comando, o programa pula este número de posições a cada soma. O programa foi compilado com o seguinte comando: $ gcc teste2.c -o teste2 A tabela seguinte apresenta os tempos de execuções de teste2 para cada deslocamento. Deslocamento Tempo de execução 1 0m0.673s 2 0m0.697s 4 0m0.747s 8 0m0.888s 16 0m1.157s 32 0m1.290s 14

17 64 0m1.331s 128 0m1.288s 256 0m1.295s 512 0m1.381s m1.566s m1.541s m1.548s m1.560s m1.585s m1.555s m1.223s m1.008s m0.959s m0.951s m0.934s m0.754s m0.744s m0.692s O gráfico a seguir sumariza os dados da tabela: Os resultados dos testes mostram que a execução foi mais rápida quando o vetor foi percorrido sequencialmente. Os tempos de execução foram crescendo à medida que o deslocamento aumentava. Porém, a partir de 32768, os tempos de execução começaram a diminuir. Agora as falhas de cache: Deslocamento Falhas de cache 1 I1 miss rate: 0.00% D1 miss rate: 0.2% L2d miss rate: 0.2% L2 miss rate: 0.0% 2 I1 miss rate: 0.00% 15

18 D1 miss rate: 0.3% L2d miss rate: 0.3% L2 miss rate: 0.1% 4 I1 miss rate: 0.00% D1 miss rate: 0.6% L2d miss rate: 0.6% L2 miss rate: 0.2% 8 I1 miss rate: 0.00% D1 miss rate: 1.2% L2d miss rate: 1.2% L2 miss rate: 0.4% 16 I1 miss rate: 0.00% 32 I1 miss rate: 0.00% 64 I1 miss rate: 0.00% 128 I1 miss rate: 0.00% 256 I1 miss rate: 0.00% 512 I1 miss rate: 0.00% 1024 I1 miss rate: 0.00% 2048 I1 miss rate: 0.00% 16

19 4096 I1 miss rate: 0.00% 8192 I1 miss rate: 0.00% I1 miss rate: 0.00% I1 miss rate: 0.00% I1 miss rate: 0.00% I1 miss rate: 0.00% I1 miss rate: 0.00% I1 miss rate: 0.00% I1 miss rate: 0.00% I1 miss rate: 0.00% L2d miss rate: 0.2% L2 miss rate: 0.0% I1 miss rate: 0.00% 17

20 D1 miss rate: 1.2% L2d miss rate: 0.2% L2 miss rate: 0.0% I1 miss rate: 0.00% D1 miss rate: 0.2% L2d miss rate: 0.2% L2 miss rate: 0.0% O que acontece quando percorremos vetores com deslocamentos? Como mostraram os testes, o desempenho é pior ao percorrermos vetores com deslocamentos ao invés de sequencialmente Para quais deslocamentos o desempenho fica pior? A partir dos testes, observa-se que o desempenho é pior do intervalo de 1024 a deslocamentos Você sabe explicar por que este valor causa tal queda no desempenho? Percorrer vetores sequencialmente é a melhor ideia porque os elementos contíguos do vetor são armazenados em posições contíguas da memória. O intervalo de pior desempenho pode ser interpretado como se estivéssemos percorrendo uma matriz por colunas (já que matrizes podem ser vistas como concatenações de suas linhas). A explicação para os valores maiores e menores possuírem o mesmo desempenho reside no fato deles poderem ser considerados equivalentes. Considere o exemplo simples a seguir: seja v um vetor com 10 elementos (v[0], v[1],...). Um deslocamento de dois em dois (v[0], v[2], v[4], v[6], v[8], v[1], v[3], v[5], v[7], v[9]) é equivalente a um deslocamento de oito em oito - só que para a esquerda (v[0], v[9], v[7], v[5], v[3], v[1], v[8], v[6], v[4], v[2]) 3.4 teste3.c O arquivo teste3.c é um programa que se divide em dois processos que compartilham uma estrutura com duas variáveis, sendo que cada processo altera uma destas variáveis. Compilado com o seguinte comando: $ gcc teste3.c -o teste3 Ao ser executado, teste3 apresentou o seguinte tempo de execução: $ time./teste3 real user sys 0m1.363s 0m1.215s 0m0.004s Por que o programa teste3.c demora tanto para rodar? Pelo número de operações que faz (200000), podemos dizer que o programa teste3 demora para rodar. Essa demora deve-se a falhas de cache que ocorrem porque os dois cores tentam modificar simultaneamente a mesma estrutura de dados compartilhada (de 8 bytes) que está numa mesma linha do cache. 18

21 3.4.2 Você tem alguma solução melhor para este problema? Uma solução para este problema pode ser facilmente desenvolvida alterando ligeiramente a estrutura compartilhada (em anexo segue teste3-mod.c que contém tais modificações): struct shared_data_struct { unsigned int data1; char block[60]; unsigned int data2; }; A inclusão do vetor block na estrutura garante que data1 e data2 serão armazenados cada um em uma linha diferente do cache (o tamanho 60 escolhido para block é ideal porque o alinhamento do cache da CPU na qual foram rodados os testes é 64). A seguir, o tempo de execução para o programa com a estrutura modificada como acima: $ time./teste3-mod real user sys 0m0.600s 0m0.558s 0m0.004s Reiterando que o tamanho de block foi escolhido de acordo com a arquitetura do processador em que foram realizados os testes (mais informações: 3.1). 4 Programas adicionais Esta seção apresenta alguns programas adicionais, sendo que, para cada um, há uma versão cache-friendly (i.e. que usa bem o cache) e uma versão equivalente que impede otimizações de cache. 4.1 EP2 de MAC Segundo Semestre de 2009 Segue anexado o EP2 de MAC0300 (Métodos Numéricos da Álgebra Linear) do Semestre de Ele resolve sistemas lineares usando uma série de algoritmos vistos na supracitada 2º disciplina (Cholesky, LU, etc.). Tais algoritmos foram implementados orientados a linha e orientados a coluna, sendo que os do primeiro caso foram mais rápidos que os do segundo. Este programa foi incluído porque é um exemplo real (um programa que faz algo útil). 4.2 teste4 Com vistas a realizar um programa que não usasse bem o cache, foi criado o programa teste teste4.c Esta versão não usa bem o cache. Vamos analisar o que o programa faz: Macros usadas no programa: #include <stdlib.h> #define SIZE #define MAX 80 19

22 Estrutura usada no programa (é uma lista encadeada). Note como a estrutura foi declarada (os campos da estrutura). Funções. typedef struct node *link; struct node { int ind; int n; int seq[max]; link next; int square[max]; }; void square(int n, int a[]) { int i; for(i = 0; i < n; i++) a[i] = i*i; } void seq(int n, int a[]) { int i; for(i = 0; i < n; i++) a[i] = i; } Função principal do programa: Inicialização: int main() { int i, x; link head, p; head = (link)malloc(sizeof(struct node)); head->next = NULL; } for(i = 0; i < SIZE; i++) { p = (link)malloc(sizeof(struct node)); p->ind = i; p->n = rand()%max; p->next = head->next; head->next = p; srand( ); Neste loop ocorrerão as falhas de cache. for(i = 0; i < MAX*10; i++) { x = rand()%size; for(p = head->next; p!= NULL; p = p->next) { if(x == p->ind) { seq(p->n, p->seq); 20

23 } } } square(p->n, p->square); } return 0; Note que o programa gera um número aleatório x entre 0 e SIZE-1. O programa varre a lista à procura de um elemento que possua ind igual a x. Quando um elemento desejado é encontrado, são necessários os campos n, seq e square - sendo os dois últimos em sequência. Isso sugere que esses dados deveriam estar próximos na estrutura, mas não estão. Daí as falhas de cache. Tempo de execução: $ time./teste4 real user sys 0m55.597s 0m54.291s 0m0.841s Falhas de cache $ valgrind --tool=cachegrind./teste4 ==6172== Cachegrind, a cache and branch-prediction profiler ==6172== Copyright (C) , and GNU GPL d, by Nicholas Nethercote et al. ==6172== Using Valgrind and LibVEX; rerun with -h for copyright info ==6172== Command:./teste4 ==6172== ==6172== ==6172== I refs: 7,515,139,769 ==6172== I1 misses: 718 ==6172== L2i misses: 714 ==6172== I1 miss rate: 0.00% ==6172== ==6172== ==6172== D refs: 5,771,731,742 (4,907,562,768 rd + 864,168,974 wr) ==6172== D1 misses: 1,602,018,589 (1,600,010,559 rd + 2,008,030 wr) ==6172== L2d misses: 1,599,100,113 (1,597,093,371 rd + 2,006,742 wr) ==6172== D1 miss rate: 27.7% ( 32.6% + 0.2% ) ==6172== L2d miss rate: 27.7% ( 32.5% + 0.2% ) ==6172== ==6172== L2 refs: 1,602,019,307 (1,600,011,277 rd + 2,008,030 wr) ==6172== L2 misses: 1,599,100,827 (1,597,094,085 rd + 2,006,742 wr) ==6172== L2 miss rate: 12.0% ( 12.8% + 0.2% ) É necessário salientar que o programa teste4 foi projetado de modo a promover muitas falhas de cache para a arquitetura especificada (3.1) teste4-mod.c O arquivo teste4-mod.c apresenta uma versão equivalente ao programa teste4, porém, tenta fazer melhor uso do cache. Para que isso fosse possível, a estrutura usada teve de ser alterada - a ideia aqui é manter próximos dados que serão usados juntos: 21

24 typedef struct node *link; struct node { int ind; int n; int seq[max]; int square[max]; link next; }; O programa não sofreu alterações, apenas essa na estrutura mesmo. O loop principal do programa é o mesmo: os campos seq e square serão usados em sequência. A ordem de declaração dos campos da estrutura de lista encadeada fez com que o cache fosse melhor utilizado. Tempo de execução: $ time./teste4-mod real user sys 0m34.146s 0m33.106s 0m0.659s Falhas de cache $ valgrind --tool=cachegrind./teste4-mod ==6197== Cachegrind, a cache and branch-prediction profiler ==6197== Copyright (C) , and GNU GPL d, by Nicholas Nethercote et al. ==6197== Using Valgrind and LibVEX; rerun with -h for copyright info ==6197== Command:./teste4-mod ==6197== ==6197== ==6197== I refs: 7,515,139,782 ==6197== I1 misses: 718 ==6197== L2i misses: 714 ==6197== I1 miss rate: 0.00% ==6197== ==6197== ==6197== D refs: 5,771,731,743 (4,907,562,769 rd + 864,168,974 wr) ==6197== D1 misses: 801,513,515 ( 800,505,563 rd + 1,007,952 wr) ==6197== L2d misses: 796,255,992 ( 795,250,099 rd + 1,005,893 wr) ==6197== D1 miss rate: 13.8% ( 16.3% + 0.1% ) ==6197== L2d miss rate: 13.7% ( 16.2% + 0.1% ) ==6197== ==6197== L2 refs: 801,514,233 ( 800,506,281 rd + 1,007,952 wr) ==6197== L2 misses: 796,256,706 ( 795,250,813 rd + 1,005,893 wr) ==6197== L2 miss rate: 5.9% ( 6.4% + 0.1% ) 5 Conclusão e Considerações finais CPUs são rápidas e estão ficando mais e mais rápidas. Memória, por outro lado, é algo lento. Diante desse impasse, surgem os caches: memórias menores mas mais rápidas, que armazenam os conteúdos mais utilizados, evitando idas à memória principal (o que é custoso e causa prejuízos à performance dos programas). Vimos através dos testes expostos por este Relatório que a eficiência do uso do cache está relacionada com uma série de práticas em nível de programação. Em linguagem C, isto significa: 22

25 ˆ Percorrer matrizes por linhas, uma vez que matrizes em C são armazenadas por linhas na memória. (teste1.c e EP de 300) ˆ Percorrer vetores sequencialmente, em vez de percorrer por deslocamentos. (teste2.c) ˆ Num contexto de compartilhamento de memória, declarar as variáveis de modo que um processo ou uma thread não sejam impedidos inutilmente de usar uma certa variável. (teste3.c) ˆ Manter próximos os dados que serão usados juntos. (teste4.c) Em vários casos, práticas como as descritas acima podem significar diferenças favoráveis na eficiência de um programa. 23

26 Referências [1] Memory Part 2: CPU caches [LWN.net], disponível in [Setembro de 2010] [2] CPU cache - Wikipedia, the free encyclopedia disponível in CPU_cache [Setembro de 2010] [3] TARNOFF, David. COMPUTER ORGANIZATION AND DESIGN FUNDAMENTALS - Examining Computer Hardware from the Bottom to the Top, p [2007] 24

Instituto de Matemática e Estatística - USP MAC Organização de Computadores EP1. Experimentos com o cache. Tiago Andrade Togores

Instituto de Matemática e Estatística - USP MAC Organização de Computadores EP1. Experimentos com o cache. Tiago Andrade Togores Instituto de Matemática e Estatística - USP MAC0412 - Organização de Computadores EP1 Experimentos com o cache Tiago Andrade Togores - 6514230 30 de setembro de 2010 Sumário 1 Introdução 2 1.1 O que é

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Memória Cache Slide 1 Introdução Tamanho Função de Mapeamento Política de Escrita Tamanho da Linha Número de Memórias Cache Cache em Níveis Slide 2 Introdução

Leia mais

SSC0611 Arquitetura de Computadores

SSC0611 Arquitetura de Computadores SSC0611 Arquitetura de Computadores 5ª e 6ª Aulas Revisão de Hierarquia de Memória Profa. Sarita Mazzini Bruschi sarita@icmc.usp.br 1 Memória Memória Todo componente capaz de armazenar bits de informação

Leia mais

FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CONTINUAÇÃO CAPÍTULO 5. Cristina Boeres

FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CONTINUAÇÃO CAPÍTULO 5. Cristina Boeres FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CONTINUAÇÃO CAPÍTULO 5 Cristina Boeres Mapeamento Associativo por Conjunto! Tenta resolver o problema de conflito de blocos na mesma linha (mapeamento

Leia mais

Organização de Computadores

Organização de Computadores Organização de Computadores Aula 21 Memória Cache Rodrigo Hausen 21 de outubro de 2011 http://cuco.pro.br/ach2034 1/49 Apresentação 1. Bases Teóricas 2. Organização de computadores... 2.2. Execução de

Leia mais

Princípio da Localidade Apenas uma parte relativamente pequena do espaço de endereçamento dos programas é acessada em um instante qualquer Localidade

Princípio da Localidade Apenas uma parte relativamente pequena do espaço de endereçamento dos programas é acessada em um instante qualquer Localidade Memória Cache Princípio da Localidade Apenas uma parte relativamente pequena do espaço de endereçamento dos programas é acessada em um instante qualquer Localidade Temporal Um item referenciado tende a

Leia mais

Hierarquia de Memória. Sistemas de Computação André Luiz da Costa Carvalho

Hierarquia de Memória. Sistemas de Computação André Luiz da Costa Carvalho Hierarquia de Memória Sistemas de Computação André Luiz da Costa Carvalho 1 Introdução l Pode ser definida como um local para armazenamento de informações, onde as duas únicas ações possíveis são a leitura

Leia mais

Memória Cache. Memória Cache. Localidade Espacial. Conceito de Localidade. Diferença de velocidade entre Processador/MP

Memória Cache. Memória Cache. Localidade Espacial. Conceito de Localidade. Diferença de velocidade entre Processador/MP Departamento de Ciência da Computação - UFF Memória Cache Profa. Débora Christina Muchaluat Saade debora@midiacom.uff.br Memória Cache Capítulo 5 Livro do Mário Monteiro Conceituação Princípio da localidade

Leia mais

SSC0112 Organização de Computadores Digitais I

SSC0112 Organização de Computadores Digitais I SSC0112 Organização de Computadores Digitais I 20ª Aula Hierarquia de memória Profa. Sarita Mazzini Bruschi sarita@icmc.usp.br 1 Princípios básicos Definição: Tamanho da cache Tamanho do bloco Função de

Leia mais

Experimentos com o Cache Organização de Computadores

Experimentos com o Cache Organização de Computadores Experimentos com o Cache Organização de Computadores Bruno Milan Perfetto - n o USP : 6552421 Steven Koiti Tsukamoto - n o USP : 6431089 Departamento de Ciência da Computação Instituto de Matemática e

Leia mais

Capítulo 5 Livro do Mário Monteiro Conceituação. Elementos de projeto de memória cache

Capítulo 5 Livro do Mário Monteiro Conceituação. Elementos de projeto de memória cache Capítulo 5 Livro do Mário Monteiro Conceituação Princípio da localidade Funcionamento da memória cache Elementos de projeto de memória cache Mapeamento de dados MP/cache Algoritmos de substituição de dados

Leia mais

FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CAPÍTULO 5. Cristina Boeres

FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CAPÍTULO 5. Cristina Boeres FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CAPÍTULO 5 Cristina Boeres Introdução! Diferença de velocidade entre Processador e MP O processador executa uma operação rapidamente e fica em

Leia mais

Memória Cache. Aula 24

Memória Cache. Aula 24 Memória Cache Aula 24 Introdução Objetivo: oferecer o máximo de memória disponível na tecnologia mais barata, enquanto se fornece acesso na velocidade oferecida pela memória mais rápida Velocidade CPU

Leia mais

Memória virtual. Sistemas de Computação

Memória virtual. Sistemas de Computação Memória virtual Fundamentos Memória virtual separação da memória lógica do usuário da memória física somente uma parte do programa precisa estar na memória para execução espaço de endereçamento lógico

Leia mais

Níveis de memória. Diferentes velocidades de acesso. Memória Cache. Memórias Auxiliar e Auxiliar-Backup

Níveis de memória. Diferentes velocidades de acesso. Memória Cache. Memórias Auxiliar e Auxiliar-Backup Memória Níveis de memória Diferentes velocidades de acesso Pequeno Alto(a) Cache RAM Auxiliar Auxiliar-Backup Memória Cache altíssima velocidade de acesso acelerar o processo de busca de informações na

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação

Leia mais

Gerência de Memória. Paginação

Gerência de Memória. Paginação Gerência de Memória Paginação Endereçamento Virtual (1) Espaço de endereçamento dos processos não linearmente relacionado com a memória física Cada vez que são usados, os endereços virtuais são convertidos

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Aula 19: Memória Virtual: Introdução Diego Passos Última Aula Paginação Método de gerenciamento de memória mais usado hoje. Espaço de endereçamento de um processo é

Leia mais

Gerência de Memória. Endereçamento Virtual (1) Paginação. Endereçamento Virtual (2) Endereçamento Virtual (3)

Gerência de Memória. Endereçamento Virtual (1) Paginação. Endereçamento Virtual (2) Endereçamento Virtual (3) Endereçamento Virtual (1) Gerência de Memória Paginação Espaço de endereçamento dos processos não linearmente relacionado com a física Cada vez que são usados, os endereços virtuais são convertidos pela

Leia mais

Organização e Arquitetura de Computadores

Organização e Arquitetura de Computadores Organização e Arquitetura de Computadores Hierarquia de Memória: Introdução Alexandre Amory Edson Moreno Nas Aulas Anteriores Computação Organização interna de CPU Parte operativa: Lógica combinacional

Leia mais

Programação: Vetores

Programação: Vetores Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia

Leia mais

Princípios de Desenvolvimento de Algoritmos MAC122

Princípios de Desenvolvimento de Algoritmos MAC122 Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Alocação Dinâmica de Memória Motivação: Nossos programas pré-fixavam o número de variáveis a serem utilizadas. No caso

Leia mais

Organização e Arquitetura de Computadores. Ivan Saraiva Silva

Organização e Arquitetura de Computadores. Ivan Saraiva Silva Organização e Arquitetura de Computadores Hierarquia de Memória Ivan Saraiva Silva Hierarquia de Memória A Organização de Memória em um computador é feita de forma hierárquica Registradores, Cache Memória

Leia mais

Sistemas Operacionais Gerenciamento de Memória. Carlos Ferraz Jorge Cavalcanti Fonsêca

Sistemas Operacionais Gerenciamento de Memória. Carlos Ferraz Jorge Cavalcanti Fonsêca Sistemas Operacionais Gerenciamento de Memória Carlos Ferraz (cagf@cin.ufpe.br) Jorge Cavalcanti Fonsêca (jcbf@cin.ufpe.br) Memória Física vs. Memória do Programa Memória P Física Tamanho dos softwares

Leia mais

ARQUITETURA DE COMPUTADORES

ARQUITETURA DE COMPUTADORES ARQUITETURA DE COMPUTADORES É pouco provável a utilização de um micro hoje em dia sem cache de memória, um sistema que utiliza uma pequena quantidade de memória estática como intermediária no acesso à

Leia mais

Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação.

Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação. Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de Computadores I Organização e Arquitetura Básicas

Leia mais

Correção de Erros. Erros de memória de semicondutores podem ser:

Correção de Erros. Erros de memória de semicondutores podem ser: Correção de Erros Erros de memória de semicondutores podem ser: Erros graves que constitui um defeito físico permanente; Erros moderados, onde a(s) célula(s) não são capazes de armazenar os dados ou fazem

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Slide 1 Memória Virtual os primeiros computadores (início dos anos 60) tinham memória principal muito reduzida O PDP-1 funcionava com uma memória de 4096 palavras

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais GERÊNCIA da MEMÓRIA VIRTUAL MACHADO/MAIA: CAPÍTULO 10 Prof. Pedro Luís Antonelli Anhanguera Educacional MEMÓRIA VIRTUAL -INTRODUÇÃO A Memória Virtual (virtual memory) é uma técnica

Leia mais

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios Parte 2

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios Parte 2 SISTEMAS OPERACIONAIS INF09344 - Sistemas Operacionais / INF02780 - Sistemas Operacionais / INF02828 - Sistemas de Programação II Prof a. Roberta Lima Gomes (soufes@gmail.com) 2ª. Lista de Exercícios Parte

Leia mais

PROGRAMAÇÃO A. Matrizes

PROGRAMAÇÃO A. Matrizes PROGRAMAÇÃO A Matrizes DEFINIÇÃO Em linguagem C, uma matriz é um vetor cujos itens são também vetores. Uma matriz pode ter qualquer número de dimensões, mas as matrizes bidimensionais são as mais usadas.

Leia mais

Gerenciamento de memória

Gerenciamento de memória Gerenciamento de memória O que faz? Controla o uso dos espaços em memória Controla os modos de endereçamento dos processos Como funciona a memória? Hierarquia de memória A falta de desempenho A velocidade

Leia mais

Universidade Federal de Mato Grosso do Sul. Implementação de um Sistema Simplificado de Memória Cache

Universidade Federal de Mato Grosso do Sul. Implementação de um Sistema Simplificado de Memória Cache Universidade ederal de Mato Grosso do Sul acom - aculdade de Computação Linguagem de Programação Orientada a Objetos Prof. Me. Liana Duenha Implementação de um Sistema Simplificado de Memória Cache O objetivo

Leia mais

Aula 13: Memória Cache

Aula 13: Memória Cache Aula 13: Memória Cache Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Memória: Memória Cache FAC 1 / 53 Memória Cache Diego Passos (UFF) Memória:

Leia mais

Capítulo 6 Nível do Sistema Operacional

Capítulo 6 Nível do Sistema Operacional Capítulo 6 Nível do Sistema Operacional - Sistema Operacional: Programa que, do ponto de vista do programador, adiciona uma grande quantidade de instruções e funcionalidades bem além das disponibilizadas

Leia mais

Aula 12: Memória: Barramentos e Registradores

Aula 12: Memória: Barramentos e Registradores Aula 12: Memória: Barramentos e Registradores Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Memória: Barramentos e Registradores FAC 1 / 34

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de Computadores I Nível do Sistema Operacional (Parte

Leia mais

Estrutura de Dados. Aula 07 Alocação Dinâmica

Estrutura de Dados. Aula 07 Alocação Dinâmica Estrutura de Dados Aula 07 Alocação Dinâmica 2 ALOCAÇÃO DINÂMICA Existem três modos de reservar espaço de memória para o armazenamento de informações: 1ª - através do uso de variáveis globais (e estáticas).

Leia mais

AULA Nº 11 SISTEMAS OPERACIONAIS. Técnicas de Memória Virtual

AULA Nº 11 SISTEMAS OPERACIONAIS. Técnicas de Memória Virtual AULA Nº 11 SISTEMAS OPERACIONAIS Técnicas de Memória Virtual 1 Contextualizando Vimos Introdução ao Gerenciamento de Memória Agora Técnicas de Memória Virtual 2 O que é Memória Virtual (MV)? É uma técnica

Leia mais

Memória. Memória Cache

Memória. Memória Cache Memória Memória Cache Revisão - Memória Principal Memória que armazena os dados e programas em linguagem de máquina em execução corrente Razoavelmente barata Tempo de acesso da ordem de nano-segundos a

Leia mais

Arquitetura de Sistemas Operacionais

Arquitetura de Sistemas Operacionais Arquitetura de Sistemas Operacionais Francis Berenger Machado Luiz Paulo Maia Capítulo 10 Gerência de Memória Virtual Cap 10 Gerência de Memória Virtual 1 Sumário Introdução Espaço de Endereçamento Virtual

Leia mais

Memoria. UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática

Memoria. UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Arquitectura de Computadores II Engenharia Informática (11545) Tecnologias e Sistemas de Informação (6621) Memoria Fonte: Arquitectura de Computadores, José Delgado, IST, 2004 Nuno Pombo / Paulo Fazendeiro

Leia mais

Arquitetura de Computadores. Hierarquia de Memória. Prof. Msc. Eduardo Luzeiro Feitosa

Arquitetura de Computadores. Hierarquia de Memória. Prof. Msc. Eduardo Luzeiro Feitosa Arquitetura de Computadores Hierarquia de Memória Prof. Msc. Eduardo Luzeiro Feitosa efeitosa@dcc.ufam.edu.br 1 Introdução Conteúdo Exemplo da biblioteca Princípio da localidade Hierarquia de memória Cache

Leia mais

Memória cache (cont.) Sistemas de Computação

Memória cache (cont.) Sistemas de Computação Memória cache (cont.) Sistemas de Computação Memórias cache CPU procura por dados em L, depois em L2 e finalmente na memória principal CPU registradores barramento de cache L cache ALU barramento de sistema

Leia mais

Experimentos com a memória cache do CPU

Experimentos com a memória cache do CPU Experimentos com a memória cache do CPU Alberto Bueno Júnior & Andre Henrique Serafim Casimiro Setembro de 2010 1 Contents 1 Introdução 3 2 Desvendando o cache 3 2.1 Para que serve o cache?.....................

Leia mais

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador; 1 Microprocessador Um microprocessador é um circuito eletrônico capaz de realizar diversas tarefas conforme os comandos específicos. Para isso ele deve ler esses comandos da memória de programa (ROM) e

Leia mais

Memória cache. Sistemas de Computação

Memória cache. Sistemas de Computação cache Sistemas de Computação Princípio da localidade Programas tendem a reutilizar dados e instruções perto daqueles que foram utilizados recentemente Localidade temporal: Itens recentemente referenciados

Leia mais

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. LINGUAGEM C: FUNÇÕES Prof. André Backes FUNÇÃO Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. printf(): função que escreve na tela scanf(): função que lê o teclado

Leia mais

Aula 06. Slots para Memórias

Aula 06. Slots para Memórias Aula 06 Slots para Memórias Slot para as memórias 2 Slot para as memórias Os soquetes de memória são numerados: 1, 2 e 3. Instale memória primeiro no 1, depois no 2, depois no 3. Normalmente não é permitido

Leia mais

MEMÓRIA CACHE FELIPE G. TORRES

MEMÓRIA CACHE FELIPE G. TORRES MEMÓRIA CACHE FELIPE G. TORRES MEMÓRIA CACHE O uso da memória cache visa obter velocidade de memória próxima das memórias mais rápidas que existem e, ao mesmo tempo, disponibilizar uma memória de grande

Leia mais

LÓGICA DE PROGRAMAÇÃO (C) VETORES E MATRIZES. Professor Carlos Muniz

LÓGICA DE PROGRAMAÇÃO (C) VETORES E MATRIZES. Professor Carlos Muniz Vetores são estruturas de dados que armazenam usualmente uma quantidade fixa de dados de um certo tipo; por esta razão, também são conhecidos como estruturas homogêneas de dados. Internamente, um vetor

Leia mais

Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação.

Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação. Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de I Organização e Arquitetura Básicas B de (Parte II)

Leia mais

Arquitetura e Organização de Computadores

Arquitetura e Organização de Computadores Arquitetura e Organização de Computadores Unidade Central de Processamento (CPU) Givanaldo Rocha de Souza http://docente.ifrn.edu.br/givanaldorocha givanaldo.rocha@ifrn.edu.br Baseado nos slides do capítulo

Leia mais

Memória Cache. Walter Fetter Lages.

Memória Cache. Walter Fetter Lages. Memória Cache Walter Fetter Lages w.fetter@ieee.org Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Engenharia Elétrica Copyright (c) Walter Fetter Lages p.1 Introdução SRAM

Leia mais

Capítulo 11: Implementação de Sistemas de Arquivos. Operating System Concepts 8th Edition

Capítulo 11: Implementação de Sistemas de Arquivos. Operating System Concepts 8th Edition Capítulo 11: Implementação de Sistemas de Arquivos Sobre a apresentação (About the slides) Os slides e figuras dessa apresentação foram criados por Silberschatz, Galvin e Gagne em 2009. Esse apresentação

Leia mais

Sistemas Operacionais

Sistemas Operacionais Introdução Sistemas Operacionais Paginação por demanda ção Trabalho sob a Licença Atribuição-SemDerivações-SemDerivados 3. Brasil Creative Commons. Para visualizar uma cópia desta licença, visite http://creativecommons.org/licenses/by-nc-nd/3./br/

Leia mais

Princípios de Desenvolvimento de Algoritmos MAC122

Princípios de Desenvolvimento de Algoritmos MAC122 Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Vazamento de memória & Erros em tempo de execução Vazamento de memória Introdução: Vazamento de memória (memory leak),

Leia mais

SSC510 Arquitetura de Computadores 1ª AULA

SSC510 Arquitetura de Computadores 1ª AULA SSC510 Arquitetura de Computadores 1ª AULA REVISÃO DE ORGANIZAÇÃO DE COMPUTADORES Arquitetura X Organização Arquitetura - Atributos de um Sistema Computacional como visto pelo programador, isto é a estrutura

Leia mais

Microprocessadores. Memórias

Microprocessadores. Memórias s António M. Gonçalves Pinheiro Departamento de Física Covilhã - Portugal pinheiro@ubi.pt Arquitectura de Microcomputador Modelo de Von Neumann Barramento de Endereços µprocessador Entrada/Saída Barramento

Leia mais

SSC0640 Sistemas Operacionais I

SSC0640 Sistemas Operacionais I SSC0640 Sistemas Operacionais I 15ª Aula Gerenciamento de Memória Profa. Sarita Mazzini Bruschi sarita@icmc.usp.br Slides adaptados de Marcos José Santana / Regina H. C. Santana / Luciana A. F. Martimiano

Leia mais

Aula 17: Ponteiros e Alocação Dinâmica em C

Aula 17: Ponteiros e Alocação Dinâmica em C Aula 17: Ponteiros e Alocação Dinâmica em C Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Ponteiros e Alocação Dinâmica Programação de Computadores

Leia mais

Hierarquia de Memória

Hierarquia de Memória Hierarquia de Memória Organização da cache AC1 Hierarquia da Memória: Organização 1 Mapeamento Directo A cada endereço de memória corresponde apenas uma linha da cache. linha = resto (endereço do bloco

Leia mais

Memória Virtual. Prof. M.Sc. Bruno R. Silva CEFET-MG Campus VII

Memória Virtual. Prof. M.Sc. Bruno R. Silva CEFET-MG Campus VII Prof. M.Sc. Bruno R. Silva CEFET-MG Campus VII Permitir o compartilhamento seguro e eficiente da memória entre vários programas Remover os transtornos de programação de uma quatidade pequena e limitada

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 7 Vetores Profa. Marina Gomes marinagomes@unipampa.edu.br 19/05/2017 Engenharia de Computação - Unipampa 1 Motivação Problema: Leia as notas de uma turma de cinco estudantes

Leia mais

Arquitectura de Computadores

Arquitectura de Computadores Arquitectura de Computadores Hierarquia de Memória; Memória Cache (13.2 e 13.3) José Monteiro Licenciatura em Engenharia Informática e de Computadores Departamento de Engenharia Informática (DEI) Instituto

Leia mais

1. A pastilha do processador Intel possui uma memória cache única para dados e instruções. Esse processador tem capacidade de 8 Kbytes e é

1. A pastilha do processador Intel possui uma memória cache única para dados e instruções. Esse processador tem capacidade de 8 Kbytes e é 1. A pastilha do processador Intel 80486 possui uma memória cache única para dados e instruções. Esse processador tem capacidade de 8 Kbytes e é organizado com mapeamento associativo por conjuntos de quatro

Leia mais

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS 1/18 ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS Algoritmos 2/18 Algoritmos Algoritmo - sequência de instruções necessárias para a resolução de um problema bem formulado (passíveis de implementação em computador)

Leia mais

Computação Eletrônica. Vetores e Matrizes. Prof: Luciano Barbosa. CIn.ufpe.br

Computação Eletrônica. Vetores e Matrizes. Prof: Luciano Barbosa. CIn.ufpe.br Computação Eletrônica Vetores e Matrizes Prof: Luciano Barbosa Recapitulando: Funções 2 Recapitulando: Função Void 3 Recapitulando: Escopo das Variáveis Referência à variável global A variável de escopo

Leia mais

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais

Memória Cache endereço de memória

Memória Cache endereço de memória Memória Cache O modelo de Von Neumann estabelece que para ser executado, o programa deve estar armazenado na memória. A memória é organizada em grupos de bits chamados células (ou palavras), onde as informações

Leia mais

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I AULA 03: FUNCIONAMENTO DE UM COMPUTADOR Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação O QUE É UM COMPUTADOR?

Leia mais

Capítulo 8: Memória Principal. Operating System Concepts 8 th Edition

Capítulo 8: Memória Principal. Operating System Concepts 8 th Edition Capítulo 8: Memória Principal Silberschatz, Galvin and Gagne 2009 Objetivos Fornecer uma descrição detalhada das várias formas de organizar a memória do computador Discutir várias técnicas de gerenciamento

Leia mais

Infraestrutura de Hardware. Explorando a Hierarquia de Memória

Infraestrutura de Hardware. Explorando a Hierarquia de Memória Infraestrutura de Hardware Explorando a Hierarquia de Memória Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é entendido e executado pelo

Leia mais

Sistemas Operacionais I Memória Virtual

Sistemas Operacionais I Memória Virtual Sistemas Operacionais I Memória Virtual Antônio Augusto FröhlichGeovani Ricardo Wiedenhoft grw@lisha.ufsc.br http://www.lisha.ufsc.br/~grw May 6, 2008 1 Motivação Limitação do espaço físico Programas aumentam

Leia mais

Modulo 12: alocação dinâmica de memória

Modulo 12: alocação dinâmica de memória PROGRAMAÇÃO DE COMPUTADORES V - TCC- 00.323 Modulo 12: alocação dinâmica de memória Aura - Erick aconci@ic.uff.br, erickr@id.uff.br Roteiro porque e como utilizar a alocação dinâmica funções: malloc (

Leia mais

Memória Cache. Adriano J. Holanda. 12 e 16/5/2017

Memória Cache. Adriano J. Holanda. 12 e 16/5/2017 Memória Cache Adriano J Holanda 12 e 16/5/2017 Memória: princípios físicos Revisão: Hierarquia de memória; Memória RAM: estática, dinâmica; Memória ROM: PROM, EPROM, EEPROM; Memória flash Memória: fundamentos

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I BARRAMENTO Slide 1 Sumário Introdução Componentes de Computador Funções dos Computadores Estruturas de Interconexão Interconexão de Barramentos Slide 2 Introdução

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Aula 6 Gerenciamento de Memória Prof. Galvez Considerações Gerais Multiprogramação implica em manter-se vários processos em memória Memória necessita ser alocada de

Leia mais

Introdução à Programação

Introdução à Programação Programação de Computadores Introdução à Programação Prof. Helton Fábio de Matos hfmatos@dcc.ufmg.br Agenda Algoritmo & Programa Variáveis Declaração de tipos Comando de entrada ou de leitura Comando de

Leia mais

Alocação Dinâmica de Memória

Alocação Dinâmica de Memória Alocação Dinâmica de Memória Elerson R. S. Santos elerson@dcc.ufmg.br Algoritmos e Estruturas de DCC UFMG Variáveis Uma variável representa um nome simbólico para uma posição de memória. Cada posição de

Leia mais

Notas da Aula 20 - Fundamentos de Sistemas Operacionais

Notas da Aula 20 - Fundamentos de Sistemas Operacionais Notas da Aula 20 - Fundamentos de Sistemas Operacionais 1. Algoritmos de Substituição de Páginas Quando ocorre uma falta de páginas, o SO precisa trazer da área de swap para a memória principal a página

Leia mais

Cache. Cache. Direct Mapping Cache. Direct Mapping Cache. Internet. Bus CPU Cache Memória. Cache. Endereço Byte offset

Cache. Cache. Direct Mapping Cache. Direct Mapping Cache. Internet. Bus CPU Cache Memória. Cache. Endereço Byte offset -- Internet Bus Memória Fully Associative Direct Mapping Direct Mapping Direct Mapping 7 Endereço Byte offset Hit Tag Endereço Byte offset Index Block offset bits 8 bits bits bits V Tag Valid Tag K entries

Leia mais

Computadores e Programação (DCC/UFRJ)

Computadores e Programação (DCC/UFRJ) Computadores e Programação (DCC/UFRJ) Aula 3: 1 2 3 Abstrações do Sistema Operacional Memória virtual Abstração que dá a cada processo a ilusão de que ele possui uso exclusivo da memória principal Todo

Leia mais

Sistemas de Memória II

Sistemas de Memória II Sistemas de Memória II José Costa Introdução à Arquitetura de Computadores Departamento de Engenharia Informática (DEI) Instituto Superior Técnico 2014-11-21 José Costa (DEI/IST) Sistemas de Memória II

Leia mais

/17. Arquitetura de Computadores Subsistemas de Memória Prof. Fred Sauer

/17. Arquitetura de Computadores Subsistemas de Memória Prof. Fred Sauer /17 Arquitetura de Computadores Subsistemas de Memória Prof. Fred Sauer http://www.fredsauer.com.br fsauer@gmail.com 2/17 S U M Á R I O PRINCÍPIO DA LOCALIDADE Conceito : gap entre processador/memória

Leia mais

Sistemas Opera r cionais Gerência de Memória

Sistemas Opera r cionais Gerência de Memória Sistemas Operacionais Gerência de Memória Gerência de Memória Idealmente, o que todo programador deseja é dispor de uma memória que seja grande rápida não volátil Hierarquia de memórias pequena quantidade

Leia mais

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 024/2017 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: «Nome» INSCRIÇÃO: «Inscrição» Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome

Leia mais

Sistemas Operacionais. BC Sistemas Operacionais

Sistemas Operacionais. BC Sistemas Operacionais BC 1518 - Sistemas Operacionais Sistema de Arquivos (aula 10 Parte 2) Prof. Marcelo Z. do Nascimento 1 Estrutura do Sistema de Arquivo Gerência de espaço em disco Roteiro Cópia de segurança do sistema

Leia mais

Implementação de Diretórios (1)

Implementação de Diretórios (1) Implementação de Diretórios (1) Ao abrir um arquivo, o SO usa o caminho para localizar a entrada no diretório. A entrada no diretório fornece informações para localizar os blocos de disco. Endereço de

Leia mais

Alocação Dinâmica em C

Alocação Dinâmica em C Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Alocação Dinâmica em C Profa Rosana Braga Adaptado de material preparado pela profa Silvana Maria Affonso de Lara

Leia mais

Ponteiros. prof. Fabrício Olivetti de França

Ponteiros. prof. Fabrício Olivetti de França Ponteiros prof. Fabrício Olivetti de França Anteriormente em prog. estrut. Vimos que as variáveis representando arrays em C armazenam apenas um apontador para o endereço de memória contendo os valores

Leia mais

- Mapa de memória de um processo - Ponteiros

- Mapa de memória de um processo - Ponteiros 1 MCTA028 Programação Estruturada - Mapa de memória de um processo - Ponteiros Material preparado a partir de slides dos profs. Jesús Mena-Chalco e Fabrício Olivetti Luiz Rozante 3Q-2018 2 Alocação de

Leia mais

Ponteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Ponteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista Ponteiros SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.6. Ponteiros 3.6.1. Introdução 3.6.2. Uso

Leia mais

SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio

SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação Introdução à Para Engenharias GE4 Bio GE4Bio Grupo de Estudos em Sinais Biológicos Prof.Dr.

Leia mais

Infraestrutura de Hardware. Funcionamento de um Computador

Infraestrutura de Hardware. Funcionamento de um Computador Infraestrutura de Hardware Funcionamento de um Computador Computador: Hardware + Software Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é

Leia mais

TÉCNICAS DE PROGRAMAÇÃO. Estrutura de dados

TÉCNICAS DE PROGRAMAÇÃO. Estrutura de dados TÉCNICAS DE PROGRAMAÇÃO Estrutura de dados O que são estrutura de dados? É a forma como os armazenamos tipos de dados, vistos dia a dia, ou seja, nada mais são do que a transformação de uma forma de armazenamento

Leia mais

Linguagem C Ponteiros

Linguagem C Ponteiros Linguagem C Ponteiros Instituto Federal de Educação, Ciência e Tecnologia do Triângulo Mineiro Prof. Edwar Saliba Júnior Janeiro de 2018 Unidade 14 Linguagem C - Ponteiros 1/24 Identificadores e Endereços

Leia mais