You are on page 1of 61

DCC-IM/NCE UFRJ Ps-Graduao em Informtica

Microarquiteturas de Alto Desempenho Hierarquia de Memria


Gabriel P. Silva

Microarquiteturas de Alto Desempenho

Introduo
Os programadores sempre ambicionaram ter quantidades ilimitadas de memria rpida. Contudo, as memrias rpidas so de alto custo e, normalmente, de pequena capacidade tambm. Uma soluo a organizao do sistema de memria em uma hierarquia, com diversos nveis, onde memrias cada vez mais rpidas, menores e com um custo por byte maior, so colocadas nos nveis mais altos.
Microarquiteturas de Alto Desempenho

Introduo
O objetivo fornecer um sistema de memria com um custo prximo daquele do nvel mais baixo da hierarquia, e velocidade prxima daquela do nvel mais alto. Os nveis de hierarquia mais altos normalmente so um subconjunto dos nveis mais baixos. medida que a informao vai sendo utilizada, ela vai sendo copiada para os nveis mais altos da hierarquia de memria.
Microarquiteturas de Alto Desempenho

Hierarquia de Memria
TEMPO DE ACESSO/ CAPACIDADE

REGISTRADORES MEMRIA CACHE MEMRIA PRINCIPAL

+
CUSTO
Microarquiteturas de Alto Desempenho

MEMRIA SECUNDRIA

Hierarquia de Memria

0,3 ns 3 ns 30 ns 3 ms

B
REG.

KB MB GB

REG.- COMPILADOR LINHAS - HW

CACHE MEMRIA PRINCIPAL MEMRIA SECUNDRIA

PGINAS S.O

Microarquiteturas de Alto Desempenho

Hierarquia de Memria
Note que a cada nvel que se sobe na hierarquia, endereos de uma memria maior so mapeados para uma memria menor. Junto com esse mapeamento est associadoa uma funo de proteo, evitando que dados de um usurio sejam modificados por outro. A importncia da hierarquia de memria aumentou nos ltimos anos devido ao aumento no desempenho dos processadores.
Microarquiteturas de Alto Desempenho

Velocidade dos Processadores x Memrias


140 120 100 80 60 40 20 0

Processadores Memrias

1985

1990

2000

2005

Microarquiteturas de Alto Desempenho

Conceitos de Localidade
O funcionamento da hierarquia de memria est fundamentado em duas caractersticas encontradas nos programas. Existe uma grande probabilidade de o processador executar os mesmos trechos de cdigo e utilizar repetidamente dados prximos A essa qualidade dos programas denominamos: Localidade Temporal Localidade Espacial
Microarquiteturas de Alto Desempenho

Conceitos de Localidade
Localidade temporal: posies de memria, uma vez referenciadas (lidas ou escritas) , tendem a ser referenciadas novamente dentro de um curto espao de tempo.
Usualmente encontrada em laos de instrues e acessos a pilhas de dados e variveis

Localidade espacial: se uma posio de memria referenciada, posies de memria cujos endereos sejam prximos da primeira tendem a ser logo referenciados.
A informao manipulada em blocos no sistema de hierarquia de memria para fazer uso da localidade espacial.
Microarquiteturas de Alto Desempenho

Hierarquia de Memria
No incio dos tempos o nico nvel que possui informao vlida o mais inferior de toda a hierarquia, composto de dispositivos de armazenamento no volteis. Na medida em que a informao vai sendo utilizada, ela copiada para os nveis mais altos da hierarquia. Quando fazemos um acesso a um nvel da hierarquia e encontramos a informao desejada, dizemos que houve um acerto, em caso contrrio dizemos que houve uma falha. Microarquiteturas de Alto Desempenho

Hierarquia de Memria
Acessos que resultam em acertos nos nveis mais altos da hierarquia podem ser processados mais rapidamente. Os acessos que geram falhas, obrigando a buscar a informao nos nveis mais baixos da hierarquia, levam mais tempo para serem atendidos. Para um dado nvel da hierarquia possa ser considerado eficiente desejvel que o nmero de acertos seja bem maior do que o nmero de falhas.
Microarquiteturas de Alto Desempenho

Hierarquia de Memria
Define-se como taxa de acertos (h) a relao entre o nmero de acertos e o nmero total de acessos para um dado nvel da hierarquia de memria. h = nmero acertos / total de acessos O total de acessos inclui tanto os acessos de leitura como os de escrita.

Microarquiteturas de Alto Desempenho

Hierarquia de Memria
O tempo de acesso com acerto o tempo necessrio para buscar a informao em um dado nvel de hierarquia, que inclui o tempo necessrio para determinar se o acesso informao vai gerar um acerto ou uma falha. A penalidade por falha ou tempo acesso com falha o tempo necessrio para buscar a informao nos nveis inferiores da hierarquia, armazen-la no nvel atual e envi-la para o nvel superior.
Microarquiteturas de Alto Desempenho

Taxa de Acerto
Taxa de Acerto h: probabilidade de que uma posio referenciada seja encontrada em dado nvel da hieraquia de memria. Ta Tf Tma = tempo de acesso com acerto = tempo de acesso com falha = tempo mdio de acesso

Tma = h*Ta +(1 h)*Tf


Se Ta = 10 ns Tf = 80 ns h = 0,85 h=1 ento Tma = 20,5 ns ento Tma = Ta
Microarquiteturas de Alto Desempenho

Se

Componentes da Hierarquia
Os elementos mais importantes da uma hierarquia de memria so: Registradores Memria Cache Memria Principal Memria Secundria

Microarquiteturas de Alto Desempenho

Registradores
Os registradores esto localizados no ncleo do processador. So caracterizados por um tempo de acesso menor que um ciclo de relgio e sua capacidade da ordem de centenas de bytes. O controle de qual informao deve estar nos registradores feita explicitamente pelo compilador, que determina quais variveis sero colocadas no registrador. o nico nvel da hierarquia que permite movimentaes iguais apenas ao tamanho da informao desejada.
Microarquiteturas de Alto Desempenho

Memria Cache
Processador Cache

Memria Principal
Memria Cache: Elemento de memria intermedirio entre o Processador e a Memria Principal
Microarquiteturas de Alto Desempenho

Funcionamento da Cache
O processador inicia a busca a instruo ou dados na memria cache. Se os dados ou a instruo estiverem na cache (denomina-se acerto), a informao transferida para o processador. Se os dados ou a instruo no estiverem na memria cache (chama-se falha), ento o processador aguarda, enquanto a instruo/dados desejados so transferidos da memria principal para a cache e tambm para o processador.
Microarquiteturas de Alto Desempenho

Funcionamento da Cache
Durante a busca da palavra que est faltando na cache, trazido um bloco (ou linha) inteiro da memria principal, ao invs de apenas uma palavra. O objetivo minimizar a taxa de falhas nos prximos acessos, seguindo o princpio da localidade espacial. O tamanho de um bloco um parmetro de projeto na memrias caches, tamanhos usuais so 32, 64 e 128 bytes.

Microarquiteturas de Alto Desempenho

Funcionamento da Cache
necessrio guardar o endereo do bloco, ou parte dele, para permitir a identificao dos blocos que esto armazenados na cache. No momento em que for feita uma leitura de dados ou instruo pelo processador, os endereos armazenados na cache so comparados com o endereo fornecido pelo processador, para saber se houve um acerto ou falha. Caso haja acerto, a informao armazenada na memria cache fornecida para o processador, evitando a ida memria principal.
Microarquiteturas de Alto Desempenho

Memria Cache
As clulas de memria da cache so elaboradas com tecnologia que permite um tempo de acesso menor que o memria principal. Normalmente so clulas de memria esttica (SRAM), com menor capacidade, porm maior custo e maior velocidade. Associado a essas memrias est um controlador, normalmente uma mquina de estados, que faz o controle da transferncia dos blocos de/para a memria principal.
Microarquiteturas de Alto Desempenho

Memria Principal
A memria principal constituda por clulas de memria dinmica (DRAM). As memrias DRAM tem grande capacidade de armazenamento, mas so mais lentas que as memrias estticas. As memrias DRAM possuem tambm tempos de acesso distintos para leitura e escrita, e necessitam de uma lgica de restaurao (refresh), quer embutida ou fora da pastilha, que afetam o tempo mdio de acesso.
Microarquiteturas de Alto Desempenho

Memria Secundria
A memria secundria o ltimo nvel da hierarquia de memria. composta pelos dispositivos de armazenamento de massa, normalmente discos rgidos, de grande capacidade e menor custo por byte armazenado. Os programas e arquivos so armazenados integralmente na memria secundria, que so dispositivos de memria no voltil.

Microarquiteturas de Alto Desempenho

Memria Virtual
O controle de qual informao deve permanecer na memria principal ou na memria secundria feito pela Memria Virtual. A memria virtual um conjunto de hardware e de rotinas do sistema operacional. Alm do controle da hierarquia entre a memria principal e a memria secundria, ela realiza a proteo, evitando que um programa modifique informaes que pertenam a algum outro.
Microarquiteturas de Alto Desempenho

Memria Virtual
Finalmente, a memria virtual tambm faz a translao de endereos virtuais em endereos reais, j que os programas normalmente enxergam um espao de endereamento maior que a memria fsica. As translaes mais freqentes ficam armazenadas em uma pequena memria associativa chamada TLB. O mtodo mais usual utilizado pela memria virtual a diviso do espao de endereamento em pginas de tamanho fixo, que so a unidade de transferncia entre o disco e a memria principal.
Microarquiteturas de Alto Desempenho

Aspectos Operacionais Comuns


Apesar de muitos aspectos dos componentes da hierarquia de memria diferirem quantitativamente, muitas das polticas e das caractersticas so semelhantes em termos qualitativos:
Onde se colocar uma linha ou pgina? Qual o tamanho de uma linha ou pgina? Como encontrar uma linha ou pgina? Qual das linhas/pginas deve ser substituda quando ocorrer uma falha e no houver espao? O que acontece em uma escrita?
Microarquiteturas de Alto Desempenho

Onde Colocar um Bloco?


Esta questo afeta apenas a memria cache, j que o mtodo utilizado pela memria virtual o mapeamento totalmente associativo. Ou seja, no caso da memria virtual uma pgina do programa pode ser colocada em qualquer posio da memria fsica. Em nosso estudos, consideramos que a capacidade da memria cache ser sempre dada em mltiplo inteiro de linhas / blocos. Existem trs maneira possveis de tratar este problema, chamadas de mapeamentos:
Mapeamento Totalmente Associativo Mapeamento Direto Mapeamento Associativo por Conjunto
Microarquiteturas de Alto Desempenho

Onde Colocar um Bloco?


Mapeamento completamente associativo
Um bloco da memria principal pode ser armazenado em qualquer linha da memria cache.

Mapeamento direto
Cada bloco da memria principal s pode ser mapeado em uma nica linha da memria cache. Normalmente utilizam-se os bits menos significativos do endereo do bloco para definir qual ser esta linha.

Mapeamento associativo por conjunto


Cada bloco da memria principal pode ser armazenado apenas em um determinado conjunto de linhas da cache.

Microarquiteturas de Alto Desempenho

Mapeamento Direto

Microarquiteturas de Alto Desempenho

Hennessy & Patterson

Onde Colocar um Bloco?


Mapeamento Totalmente Associativo
Todos os blocos da memria principal podem ser armazenados em qualquer linha na cache; Existe 1 nico conjunto na memria cache; O nmero de linhas por conjunto igual a capacidade total de linhas da cache.

Caractersticas
Demorado para descobrir se um bloco reside ou no na cache; A substituio de uma linha s necessria quando a cache est totalmente cheia; O endereo do bloco deve ser totalmente armazenado junto com a linha;
Microarquiteturas de Alto Desempenho

Onde Colocar um Bloco?


Mapeamento Direto
Cada bloco s pode ocupar uma determinada linha na cache, definida pelo seu ndice, que so os bits mais baixos do endereo de memria do bloco; Existem tantos conjuntos quantos forem as linhas da cache; Existe apenas 1 linha em cada conjunto.

Caractersticas
Rpido para descobrir se um bloco est presente na cache; Pode ocorrer que dois blocos freqentemente referenciados estejam mapeados na mesma linha da cache; Apenas parte do endereo precisa ser armazenada precisa ser armazenada junto com o bloco na cache.

Microarquiteturas de Alto Desempenho

Mapeamento Direto

Microarquiteturas de Alto Desempenho

Hennessy & Patterson

Onde Colocar um Bloco?


Mapeamento Associativo por Conjunto
Cada bloco pode ser armazenado em um determinado conjunto de linhas da cache. O nmero de linhas que existem em cada conjunto definido como a associatividade (normalmente de 2 a 8) da cache. O nmero de conjuntos dado pela frmula: Nmero de linhas na cache / associatividade

Caractersticas
Reduz as chances de conflito. rpido para descobrir se um bloco est armazenado na cache.
Microarquiteturas de Alto Desempenho

Onde Colocar um Bloco?


A vantagem de se aumentar o grau de associatividade a conseqente queda na taxa de falhas. Isso se deve a uma menor competio pela mesma posio na memria cache. Essa melhora to mais significativa quanto menor for a capacidade da memria cache. As desvantagens de se aumentar a associatividade so um ligeiro aumento no custo e no tempo de acesso.
Microarquiteturas de Alto Desempenho

Qual o Tamanho um Bloco?


Tamanhos de bloco/pginas maiores tendem a fazer uso melhor da localidade espacial, aumentando a taxa de acerto. Contudo, o uso de bloco maiores nas memrias caches tende a aumentar a penalidade por falha. Tamanhos tpicos de blocos situam-se entre 16 e 128 bytes. Uso de pginas maiores tende a diminuir o tamanho da tabela de pginas, melhorando a penalidade por falha das TLBs. Tamanhos tpicos de pginas situam-se entre 1K a 16 Kbytes.
Microarquiteturas de Alto Desempenho

Como Encontrar um Bloco?


A forma de localizao de um bloco depende do esquema de mapeamento utilizado. No caso do mapeamento direto necesrio apenas uma comparao. No caso do mapeamento associativo, so necessrias tantas comparaes quanto forem os blocos/linhas em cada conjunto. No caso das memrias totalmente associativas, necessrio que todas as posies da memria cache sejam comparadas. Normalmente essas comparaes so realizadas em paralelo por vrios circuitos. Microarquiteturas de Alto Desempenho

Como Encontrar um Bloco?


Nos sistemas de memria virtual, mantm-se uma tabela de mapeamento, chamada de tabela de pginas, para indexar a memria principal. Esta tabela contm todas as translaes de endereos virtuais para endereos fsicos de todas as pginas em uso. Caso a pgina no esteja carregada na memria, a posio correspondente na memria principal marcada como invlida.
Microarquiteturas de Alto Desempenho

Como Encontrar um Bloco?


Para cada acesso seria necessrio um acesso extra memria para consulta tabela de pginas. Para solucionar este problema, utiliza-se uma pequena memria totalmente associativa (TLB), localizada junto ao processador, que guarda as translaes realizadas mais freqentemente. Uma vez feito o primeiro acesso, a translao armazenada e todos os demais acessos a essa pgina podem ser feitos sem atrasos adicionais relativos translao.
Microarquiteturas de Alto Desempenho

Esquema de Memria Virtual Paginada


Endereo Virtual Faz Acesso Memria

Forma o Endereo Real Endereo da Pgina est no TLB ?

SIM
Atualiza a TLB

Page Miss

NO
Busca Endereo na Tabela de Pginas na Memria Atualiza a Tabela de Pginas

Page Fault

A pgina est presente na memria?

SIM

Busca Pgina no Disco

NO
Microarquiteturas de Alto Desempenho

Qual Bloco deve ser Substitudo?


Em uma cache de mapeamento direto h apenas 1 bloco por conjunto. Quando ocorre uma falha este o bloco que vai ser substitudo. Nas caches associativas, caso todas as posies do conjunto estejam ocupadas, necessrio escolher qual dos blocos do conjunto vai ser substitudo, segundo uma das polticas:
Aleatria LRU FIFO
Microarquiteturas de Alto Desempenho

Algoritmos de Substituio
Algoritmo de Substituio Aleatrio (randmico)
Um bloco escolhido aleatoriamente para ser substitudo. uma poltica de fcil implementao, mas gera problemas de desempenho em esquemas totalmente associativos.

Substituio por Fila FIFO (first-in first-out)


O bloco que est h mais tempo na cache removido. Menos simples de implementar e pode diminuir a taxa de acerto quando o bloco mais antigo ainda estiver sendo muito utilizado.

Substituio LRU (Least Recently Used)


O bloco a ser substitudo aquele que no referenciado h mais tempo. o esquema de melhor desempenho, mas cuja implementao a mais complexa.
Microarquiteturas de Alto Desempenho

Qual Pgina deve ser Substituda?


No sistema de memria virtual, utilizam-se os mesmos algoritmos para decidir qual a pgina que deve ser removida da memria. Um bit de modificado na tabela de pginas indica se a pgina removida deve ser atualizada em disco. Nos modernos sistemas operacionais, para cada processo, apenas um subconjunto de suas pginas mantido em memria. Ele denominado de conjunto de trabalho. O universo das pginas candidatas substituio pode ser local (do mesmo conjunto de trabalho) ou global (todas as pginas de todos os processos na memria so analisadas).

Microarquiteturas de Alto Desempenho

O que Acontece na Escrita?


Ao ser escrever em um bloco, temos duas polticas bsicas em caso de acerto:
Write-through (Cache) Escreve-se o dado no nvel da hierarquia atual e no inferior Write-back (Memria Virtual e Cache) Escreve-se o dado apenas no nvel de hierarquia atual e, quando o bloco ou pgina for substitudo, ele atualizado no nvel inferior.

Microarquiteturas de Alto Desempenho

Write-through
As falhas so mais simples de tratar, pois nunca h necessidade de escreverse todo o bloco no nvel mais inferior da hierarquia, apenas a palavra sendo atualizada. Essa tcnica mais simples de se implementar. Quando existe mais de uma cache no mesmo barramento, permite a implementao fcil de tcnicas de snooping para a manuteno da coerncia entre as caches.
Microarquiteturas de Alto Desempenho

Write-back
As palavras podem ser escritas na velocidade da cache, ao invs da memria principal; Vrias escritas para o mesmo bloco so atualizadas em uma nica operao no nvel mais inferior da hierarquia; Uso de transferncias em rajada para atualizao do bloco no nvel de hierarquia inferior; Quando houver mais de uma cache no barramento, h a necessidade de se adotar protocolos mais complexos para a manuteno da coerncia das caches.
Microarquiteturas de Alto Desempenho

Write-back
Esses protocolos visam forar a colocao no barramento de informaes sobre operaes de escrita sempre que necessrio, pois a memria principal nem sempre possui uma cpia vlida do bloco que est sendo solicitado. Esses protocolos definem a responsabilidade sobre quem deve fornecer um bloco de dados quando uma operao de leitura com falhas ocorre. No caso de memria virtual, o algoritmo utilizado para atualizao das pginas em disco sempre o write-back.
Microarquiteturas de Alto Desempenho

O que Acontece na Escrita?


Se houver uma falha, duas estratgias so possveis de se utilizadas:
Write Allocate O bloco onde vai ser feita a operao de escrita trazido primeiramente para a memria cache e a operao de escrita ento realizada. No Write Allocate O bloco a ser escrito no trazido para a memria cache e, portanto, a operao de escrita sempre se realiza apenas na memria principal. Usualmente a poltica write allocate adotada com o modo write back e a poltica no write allocate com o modo write through.
Microarquiteturas de Alto Desempenho

Cache Virtual
Endereos virtuais dos blocos de memria so armazenados na cache. A leitura do bloco na cache pode ser feita em paralelo com a converso do endereo virtual em fsico pela gerncia de memria. Existe a possibilidade de ocorrncia de aliasing: dois ou mais endereos virtuais idnticos gerados por processos diferentes, que se referem a endereos fsicos distintos precisa ser realizado um flush a cada troca de processo. De uso difcil em ambientes com mltiplos processadores.
Microarquiteturas de Alto Desempenho

Cache Fsico
Os endereos fsicos dos blocos de memria so armazenados na cache. O tempo de acesso mais lento porque o acesso cache deve ocorrer aps a converso do endereo virtual em fsico. Mais simples de implementar e usar em ambientes com mltiplos processadores.

Microarquiteturas de Alto Desempenho

Caches de Dados e Instrues


PROCESSADOR Unidade de Busca de Instrues Unidade de Acesso Memria

Instrues Cache de Instrues Cache de Dados

Dados

Memria Principal
Microarquiteturas de Alto Desempenho

Caches de Dados e Instrues


Dados e instrues: cache unificada x caches separadas. Vantagens das caches separadas: poltica de escrita s precisa ser aplicada cache de dados; caminhos separados entre memria principal e cada cache, permitindo transferncias simultneas (p.ex. quando o processador possui um pipeline); Estratgias diferentes para cada cache: tamanho total, tamanho de linha, organizao. Caches separadas so usadas, p.ex., no Pentium e no 68040.
Microarquiteturas de Alto Desempenho

Cache Multinvel
Processador

Cache de Instrues

Cache de Dados

CACHE NVEL 1 CACHE NVEL 2

Cache Unificada

Memria Principal
Microarquiteturas de Alto Desempenho

Cache Multinvel
Processador

Cache Unificada

CACHE NVEL 1 CACHE NVEL 2

Cache Unificada

Memria Principal
Microarquiteturas de Alto Desempenho

Cache Multicore
Processador Processador

Cache de Instrues

Cache de Dados

Cache de Instrues

Cache de Dados

CACHE NVEL 1

Cache Unificada

Cache Unificada

CACHE NVEL 2

Memria Principal
Microarquiteturas de Alto Desempenho

Cache Multicore
Processador Processador

Cache de Instrues

Cache de Dados

Cache de Instrues

Cache de Dados

CACHE NVEL 1

CACHE

Cache Unificada

NVEL 2

Memria Principal
Microarquiteturas de Alto Desempenho

Cache Multinvel
Manter a cache de nvel 1 pequena e muito rpida, acompanhando o relgio da CPU. Utilizar um cache de nvel 2 grande, mas no to rpida, mas capaz de reduzir a penalidade das falhas.
Tm = T1hit h1 + ( 1 h1 ) (T2hit h2 + ( 1 h2 ) T2miss )

Normalmente utiliza-se a cache de nvel 1 separada para dados e instrues e a cache de nvel 2 unificada.
Microarquiteturas de Alto Desempenho

Os Trs Cs
Falhas Compulsrias: So faltas no acesso cache, causadas pelo primeiro acesso que nunca esteve na cache. Falhas devido Capacidade: So faltas que ocorrem porque a cache no pode armazenar todos os blocos necessrios execuo de um programa. Falhas por Conflitos ou Coliso: So faltas que ocorrem no acesso cache quando diversos blocos competem pelo mesmo conjunto. No ocorrem em caches totalmente associativas.
Microarquiteturas de Alto Desempenho

Comparao de Caches
PROCESSADOR Intel CELERON Intel PENTIUM III TAMANHO DA CACHE L1 (12 K op + 16KB) (int.) L2 256 KB (int.) L1 (16 KB + 16KB) L2 256 KB (int.) ou 512 KB (ext.) L1 (12 K op + 8KB) (int.) L2 512 KB (int.) L1 (64 KB + 64 KB) (int.) L2 64 KB (int.) (excl.) L1 (64 KB + 64 KB) (int.) L2 512 KB (int.)
Microarquiteturas de Alto Desempenho

Intel PENTIUM IV HT AMD DURON AMD ATHLON

Comparao entre os Diversos Nveis


TLB Tam. Bloco (bytes) Tempo de Hit (Ciclos) Penalidade Miss (Ciclos) Tamanho (bytes) Colocao dos Blocos Subst. Blocos Pol. Escrita

Cache L1 48 1 4 32 12 8 66 1 128 K Direto WT ou WB

Cache L2 32 256 6 15 30 200 256K 16M Direto/ Assoc. Conj. Aleatria WT ou WB

Mem. Virtual 4K 16K 10 100 700K 6M 16M 64G Totalmente Assoc. LRU WB

10 30 32 8K Tot. Assoc./ Assoc. Conj. Aleatria Flush

Microarquiteturas de Alto Desempenho

Exerccios
Utilize o simulador sim-cache, da verso 3.0 do SimpleScalar. Escolha um programa inteiro e outro de ponto flutuante da sute SPEC95. Faa uma variao da associatividade entre 1 e 8, e calcule a taxa de acerto para caches com capacidades de 16, 32, 64 e 128 Kbytes. Considere um tamanho de bloco com 16 bytes. Apresente um grfico e comentrios sobre os dados obtidos.

Microarquiteturas de Alto Desempenho

Referncias
2. Organizao e Projeto de Computadores A Interface Hardware/Software David A. Patterson e John L. Henessy, Editora LTC, 2ed. 3. Cache Memories Alan Jay Smith, ACM Computing Surveys, Volume 14 Issue 3, September 1982

Microarquiteturas de Alto Desempenho

You might also like