universidade federal do mato grosso do...

42
UNIVERSIDADE FEDERAL DO MATO GROSSO DO SUL Faculdade de Computac ¸˜ ao - FACOM Curso de Bacharelado em Ciˆ encia da Computac ¸˜ ao HIERARQUIA DE MEM ´ ORIA PARA O PROCESSADOR ρ-VEX: FERRAMENTAS E PROJETO DE HARDWARE Andr´ e Luiz Diniz da Silva e Guilherme Benites Gamon Lima Rebello Orienta¸c˜ ao: Prof. Dr. Ricardo Ribeiro dos Santos Monografia apresentada ao curso de Gradua¸ ao em Bacharelado em Ciˆ encia da Computa¸c˜ ao na Universidade Federal do Mato Grosso do Sul como requisito para a obten¸c˜ ao do t´ ıtulo de Ba- charel em Ciˆ encia da Computa¸ ao. UFMS/FACOM - Campo Grande - MS - MARC ¸ O/2013

Upload: vuongkhanh

Post on 04-Oct-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERSIDADE FEDERAL DO MATO GROSSO DO SUL

Faculdade de Computacao - FACOMCurso de Bacharelado em Ciencia da Computacao

HIERARQUIA DE MEMORIA PARA O PROCESSADORρ-VEX: FERRAMENTAS E PROJETO DE HARDWARE

Andre Luiz Diniz da Silva e Guilherme Benites Gamon Lima Rebello

Orientacao: Prof. Dr. Ricardo Ribeiro dos Santos

Monografia apresentada ao curso de Graduacao em Bacharelado

em Ciencia da Computacao na Universidade Federal do Mato

Grosso do Sul como requisito para a obtencao do tıtulo de Ba-

charel em Ciencia da Computacao.

UFMS/FACOM - Campo Grande - MS - MARCO/2013

Sumario

Lista de Figuras iv

1 Introducao 2

2 Processador softcore ρ-VEX e Codificacao PBIW 4

2.1 Processador softcore ρ-VEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2 Codificacao PBIW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2.1 Juncao de Padroes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.3 Consideracoes Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3 Hierarquia de Memoria 9

3.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.2 Hierarquia de Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.3 Memorias Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.4 Memoria Virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.5 Consideracoes Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4 Desenvolvimento do Projeto 16

4.1 Desenvolvimento de Simulador de Memoria para o ρ-VEX . . . . . . . . . . . . 16

4.1.1 Arquitetura e Fluxo de Dados . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.2 Projeto e Implementacao do Gerenciador de Memoria . . . . . . . . . . . . . . . 19

4.2.1 Componente Bridge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.2.2 Componente Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.2.3 Componente SRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.3 Consideracoes Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5 Experimentos e Resultados 25

5.1 Resultados da Simulacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

5.2 Validacao atraves da Simulacao no ModelSim . . . . . . . . . . . . . . . . . . . . 30

iii

5.3 Impactos do Componente Bridge no processador ρ-VEX . . . . . . . . . . . . . . 32

5.4 Consideracoes Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

6 Consideracoes finais 35

Referencias Bibliograficas 37

iv

Lista de Figuras

2.1 Organizacao do processador ρ-VEX. . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2 Infraestrutura de software para geracao de codigo V EX e ρ-VEX. . . . . . . . . 6

2.3 Exemplos de instrucoes originais, codificadas e padrao PBIW. . . . . . . . . . . . 7

3.1 Organizacao Geral Hierarquia de Memoria de um Sistema Computacional. . . . . 10

3.2 Cache organizada na forma de mapeamento direto. . . . . . . . . . . . . . . . . . 11

3.3 Cache de mapeamento Direto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.4 Substituicao de dados na cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.5 Esquema de funcionamento da memoria virtual. . . . . . . . . . . . . . . . . . . . 14

3.6 Esquema de funcionamento da memoria virtual com TLB. . . . . . . . . . . . . . 15

4.1 Ferramentas utilizadas para simulacao de programas. . . . . . . . . . . . . . . . . 16

4.2 Exemplos de entradas para a fase de construcao de blocos basicos. . . . . . . . . 17

4.3 Exemplos de estruturas geradas na fase de construcao de blocos basicos. . . . . . 18

4.4 Fase de construcao do grafo de fluxo de controle. . . . . . . . . . . . . . . . . . . 18

4.5 Trecho de codigo do programa avl tree nao codificado. . . . . . . . . . . . . . . . 19

4.6 Exemplo de entrada do programa avl tree nao codificado para a ferramenta Dinero. 19

4.7 Diagrama de blocos do gerenciador de memoria. . . . . . . . . . . . . . . . . . . . 20

4.8 Visao detalhada do componente Bridge. . . . . . . . . . . . . . . . . . . . . . . . 21

4.9 Maquina de estados do componente Bridge. . . . . . . . . . . . . . . . . . . . . . 21

4.10 Esquema de transformacao de instrucoes de 128 bits para adaptacao a memoriada FPGA que suporta acessos de 16 bits. . . . . . . . . . . . . . . . . . . . . . . 22

4.11 Visao detalhada do componente Controller. . . . . . . . . . . . . . . . . . . . . . 22

4.12 Maquina de estados do componente Controller. . . . . . . . . . . . . . . . . . . . 23

4.13 Visao detalhada do Componente SRAM. . . . . . . . . . . . . . . . . . . . . . . . 24

5.1 Taxa de miss para Programas PBIW Versao 2.0 e Juncao de Padroes. . . . . . . 28

5.2 Total de Bytes buscados na memoria para cada programa. . . . . . . . . . . . . . 30

v

1

5.3 Simulacao ρ-VEX sem o componente Bridge. . . . . . . . . . . . . . . . . . . . . 31

5.4 Simulacao ρ-VEX com o componente Bridge. . . . . . . . . . . . . . . . . . . . . 31

5.5 Detalhes de uma instrucao na simulacao ρ-VEX sem o componente Bridge. . . . 31

5.6 Detalhes de uma instrucao na simulacao ρ-VEX com o compomente Bridge. . . . 32

5.7 Visao esquematica do ρ-VEX sem o componente Bridge. . . . . . . . . . . . . . . 33

5.8 Visao esquematica do ρ-VEX com o componente Bridge. . . . . . . . . . . . . . . 33

facom-ufms

Capıtulo 1

Introducao

Um dos desafios para o desenvolvimento de projetos tecnologicos e cientıficos ligados a area dearquitetura de computadores reside na dificuldade em utilizar ferramentas automatizadas paraa validacao, avaliacao e comparacao de tecnicas e resultados de experimentos. Essa dificuldadedeve-se, em parte, a complexidade dos projetos e a ausencia de ferramentas mais genericas eparametrizaveis.

A lacuna deixada pela ausencia de ferramentas faz com que novos projetos necessitem ser de-senvolvidos com o foco voltado para o desenvolvimento de ferramentas e tecnicas para validacaoe avaliacao de sistemas. Esse contexto pode ser aplicado no projeto descrito neste trabalho deconclusao de curso, uma vez que um dos objetivos deste trabalho e desenvolver ferramentasque auxiliem a validacao e avaliacao experimental de uma tecnica de codificacao de instrucoesde programas, denominada PBIW (Pattern Based Instruction Word) [1, 2] aplicada sobre oprocessador ρ-VEX [3]. Alem dessa atividade, este trabalho tambem atuou no projeto e desen-volvimento de modulos controladores, em hardware, para dar suporte ao uso de hierarquias dememoria para o processador ρ-VEX. Em especıfico, procurou-se aqui implementar controladoresde memoria em hardware para possibilitar que o processador ρ-VEX fizesse uso dos recursos dememoria providos pelo hardware disponibilizado por uma plataforma de prototipacao baseadaem FPGA kit DE2-115 [4].

Os resultados obtidos por meio de experimentos sobre essas atividades realizadas forneceminformacoes relevantes para que um usuario possa avaliar, com mais clareza de detalhes, osistema que esta projetando utilizando a tecnica PBIW. No tocante as atividades relacionadasa hierarquia de memoria do processador ρ-VEX nota-se que o projeto e implementacao doscontroladores de memorias flexibilizaram o projeto do processador (tornando-o, em tempo desıntese, um circuito processador e nao um ASIC) e abriram novas oportunidades para a melhoriado projeto desse processador no quanto ao uso da memoria.

Para descrever todos os passos e atividades realizadas para o desenvolvidas neste trabalho,o texto que segue esta organizado da seguinte forma:

• O Capıtulo 2 apresenta os principais conceitos da tecnica de codificacao PBIW e o pro-cessador ρ-VEX.

• Devido a intensa utilizacao dos conceitos sobre memoria e seus nıveis hierarquicos, oCapıtulo 3 foi organizado para detalhar a importancia da hierarquia de memoria em umsistema computacional e apresentar os principais conceitos sobre caches e memoria virtual.

2

Introducao 3

• O Capıtulo 4 discorre sobre todas as atividades projetadas e desenvolvidas no ambito destetrabalho.

• Todos os experimentos realizados neste trabalho foram organizados no Capıtulo 5.

• Por fim, as conclusoes e propostas de trabalhos futuros sao descritas no Capıtulo 6.

facom-ufms

Capıtulo 2

Processador softcore ρ-VEX eCodificacao PBIW

Este Capıtulo apresenta as principais caracterısticas do processador ρ-VEX e da tecnica decodificacao de instrucoes PBIW. Neste trabalho, um das linhas de desenvolvimento atuou jus-tamente na extensao do projeto desse processador para suportar as tecnologias de memoriasexternas ao chip reconfiguravel, existentes nos kits de desenvolvimento baseados em FPGA 1.Este trabalho tambem atuou na extensao da infraestrutura de software para a tecnica de co-dificacao de instrucoes PBIW (Pattern Based Instruction Word) uma vez que possibilitou ageracao de tracos de execucao, de instrucoes codificadas PBIW, para a ferramenta Dinero [5].

2.1 Processador softcore ρ-VEX

O ρ-VEX [6] e um processador VLIW extensıvel, configuravel descrito em VHDL baseado naISA VEX[7]. ρ-VEX adota um modo de funcionamento multiciclo com quatro estagios (fetch,decode, execute e writeback), implementa uma arquitetura Harvard e possui uma organizacaoVLIW minimalista: nao possui unidade para calculo de numeros ponto-flutuante e nem possuiuma unidade para gerenciamento de memoria, o enderecamento e realizado com referenciasabsolutas, nao ha implementacao de caches, mecanismos de predicao de desvios e nao ha bancode registradores distribuıdos. A Figura 2.1 apresenta a via de dados do processador ρ-VEX.

Cada instrucao contem quatro sılabas. Operacoes de controle so podem estar presentes naprimeira sılaba, operacoes de multiplicacao e divisao podem estar presentes na segunda e naterceira sılaba, operacoes de acesso a memoria so estao presentes na quarta sılaba e operacoesALU podem estar presentes em qualquer sılaba.

Existem dois bancos de registradores: registradores gerais (General Registers) e registrado-res de branch (Branch Registers). Possui 32 registradores gerais com 32 bits cada numeradosde 0 a 31 usados para computacao de dados gerais na via de dados. Os registradores de desvio(branch) sao um conjunto de 8 registradores de 1 bit, indexados de 0 a 7 usados para computacaode resultados booleanos de operacoes de comparacao e lidos por operacoes de desvio condicional.

1FPGA(Field-Programmable Ggate Array) consiste de um grande arranjo de celulas logicas ou blocos logicosconfiguraveis contidos em um unico circuito integrado. Cada celula contem capacidade computacional paraimplementar funcoes logicas e realizar roteamento para comunicacao entre elas.

4

Processador softcore ρ-VEX e Codificacao PBIW 5

Memóriade

Instruções

Memóriade

Dados

Fetch Decode Execute Writeback

GR

BR

CTRL

MEM

PC

ρ-VEX

A

A

A

A

M

M

Figura 2.1: Organizacao do processador ρ-VEX.

O conjunto de ferramentas de geracao de codigo (Figura 2.2) e simulacao para ρ-VEX contemum compilador C, bibliotecas ANSI C, ferramentas para facilitar o processo de profiling decodigo, um simulador em software (disponibilizado pela HP [8]) e o montador ρ-ASM. Apesarda existencia de ferramentas para geracao e simulacao de codigo VEX, tais ferramentas naosuportam a compilacao e simulacao de uma variedade de programas para o processador ρ-VEX. Na Figura 2.2, observa-se que a partir de um algoritmo escrito utilizando a linguagem C,pode-se obter uma ferramenta para simulacao do comportamento do programa (lado esquerdo)ou obter um codigo binario pronto para ser carregado e executado sobre o processador softcoreρ-VEX.

2.2 Codificacao PBIW

A tecnica de codificacao de instrucoes PBIW [1], inicialmente projetada para arquiteturasque buscam instrucoes longas da memoria, e composta por um algoritmo baseado em fatoracaode operandos [9, 10, 11] e por uma tabela de padroes (P-Cache), tem como objetivo a exploracaoda sobrejecao entre os conjuntos de instrucoes codificadas e seus conjuntos de padroes diminuindoassim o tamanho da instrucao na memoria.

A codificacao PBIW nao possui enfoque em uma ISA ou um processador especıfico. Depoisdas atividades desenvolvidas pelo back-end do compilador, o algorimo de codificacao extraioperandos redundantes da instrucao original criando uma instrucao codificada e um padrao.O projeto da instrucao codificada e padrao deve levar em consideracao algumas caracterısticasfundamentais inerentes ao projeto de conjunto de instrucoes:

• Numero de registradores de leitura;

• Numero de registradores de escrita;

• Numero de imediatos;

facom-ufms

Processador softcore ρ-VEX e Codificacao PBIW 6

Compilador C VEX

Arquivos em Linguagem de

Montagem VEX .s

BibliottecasDe Suporte

ao Host

ArquivosObjetosdo Host

Arquivos Objetos do Host

Host linker

Host binário

Montador

VHDLMemória de Instruções

(Binário ρ-VEX)

ρ-VEX

Ferramenta de Simulação Compilada Execução Real

s2cs

Figura 2.2: Infraestrutura de software para geracao de codigo V EX e ρ-VEX.

• Tamanho do ındice para a tabela de padroes em memoria (P-Cache);

• Quantidade de bits que indicam quais Unidades Funcionais (UFs) devem cancelar ou exe-cutar suas operacoes.

Os operandos sao mantidos na instrucao e os sinais de controle estao no padrao geradopois assim os operandos sao lidos no banco de registradores paralelamente a decodificacao dainstrucao. A instrucao codificada nao possui redundancia de operandos. Essa e armazenadaem uma Instruction Cache (I-Cache). O algoritmo de codificacao mantem o registro da posicaooriginal dos operandos no padrao criado e este e armazenado na P-Cache.

Cada instrucao codificada possui 0 < R < P campos para representar registradores deleitura, onde P simboliza o numero maximo de portas de leitura disponıvel no banco de re-gistradores. Para enderecar cada registrador e necessario dlog2 Regse onde Regs representa onumero total de registradores da arquitetura.

A instrucao codificada possui um campo de ındice para a tabela de padroes que apontapara seu respectivo padrao, cujo tamanho e dlog2 |P-Cache|e, ou seja, a quantidade de bits paraenderecar as entradas da tabela de padroes. Esse padrao e uma estrutura de dados que conteminformacoes necessarias para compor a instrucao codificada utilizada nos estagios de execucao.A Figura 2.3 apresenta um exemplo de uma codificacao de instrucao sobre uma arquitetura deconjunto de instrucoes (do ingles ISA - Instruction Set Architecture) VLIW generica em quecada instrucao original (nao codificada) pode conter ate tres operacoes. Ha um unico padraoPBIW que armazena as operacoes de ambas as instrucoes originais.

A complexidade do algoritmo de codificacao PBIW e diretamente relacionada ao algoritmode busca utilizado para verificar se existe um padrao similar ao recem codificado. Caso sejausada uma busca linear sobre o conjunto de padroes, a complexidade assintotica do algoritmode codificacao sera O(n2) onde n e o numero de padroes criados.

facom-ufms

Processador softcore ρ-VEX e Codificacao PBIW 7

Ponteiropara Padrão 001

Bits de Cancelamento(Opcionais)

Ponteiropara Padrão 110

ADD 7 1 3

1 2 5 3 4 7

SUB 6 3 0

Operandos de Leitura Operandosde Escrita

0 1 2 3 4 5 6 7 8

Instruções Codificadas

Padrão PBIW

OR 6 0 1

4 1 5

OR 5 4 1

ADD 7 2 3 NOPSUB 4 3 1

NOPNOP

Instruções Originais

Instrução 0

Instrução 1

Instrução 0

Instrução 1

Figura 2.3: Exemplos de instrucoes originais, codificadas e padrao PBIW.

Deve-se atentar para o fato que todo o processo de codificacao e realizado em tempo decompilacao. O processo de decodificacao de instrucoes, de outra forma, e realizado em tempo deexecucao do codigo no processador. Para tanto, o hardware do processador deve ser modificadopara estar apto a receber instrucoes codificadas PBIW e padroes e, antes do estagio (ou ciclo)de execucao, realizar a decodificacao. A insercao de novos elementos de hardware no projeto deprocessador se faz necessario para que, ao mesmo tempo em que necessita dar suporte a esse novotipo de instrucoes que serao buscadas na memoria, alguns estagios nao devem ser modificadosem funcao disso. Para que isso seja possıvel, o processador precisa buscar instrucoes codificadase decodifica-las antes de serem repassadas para os estagios mais avancados de execucao.

2.2.1 Juncao de Padroes

A juncao de padroes e uma otimizacao com objetivo de reduzir a quantidade total de padroesna tabela de padroes. Essa otimizacao e aplicada sobre padroes cuja soma da quantidade deoperacoes e menor ou igual a capacidade de um padrao. Se a juncao de padroes gera um padraoC de dois padroes A e B :

1. Todas as instrucoes que apontam para os padroes A e B tem o campo de ponteiro para opadrao PBIW atualizado com o endereco do novo padrao (C );

2. Todas as instrucoes que apontam para o padrao A devem atualizar os bits do campo de

facom-ufms

Processador softcore ρ-VEX e Codificacao PBIW 8

cancelamento, para cancelar operacoes do padrao B e vice-versa;

3. Os padroes A e B sao apagados do conjunto de padroes do programa.

O algoritmo de juncao de padroes possui 3 passos:

1. Pre-processamento: organiza os padroes em categorias e subcategorias, de acordo coma quantidade de operacoes nos padroes e o tipo de cada operacao. Cada subcategoriae a combinacao simples dos tipos de operacoes que compoe o padrao, considerando asrestricoes aquiteturais.

2. Processamento: executa o algoritmo de juncao de padroes tendo como entrada os padroesorganizados. A juncao e realizada em pares de padroes. O algoritmo cria os pares combase nas categorias, criadas na fase anterior. Se houver juncao entre um padrao com umaoperacao e um padrao com duas operacoes, resultara em um padrao com tres operacoes,que podera ser unido a outro padrao com uma operacao. O mesmo acontece na juncaoentre padroes com uma operacao.

3. Pos-processamento: Remove padroes redundantes do conjunto de padroes e atribuienderecos contıguos aos padroes do conjunto final.

Informacoes mais detalhadas sobre a otimizacao de juncao de padroes PBIW podem serencontradas em [12].

2.3 Consideracoes Finais

Este capıtulo apresentou os principais conceitos envolvidos no projeto e funcionamento doprocessador ρ-VEX e da tecnica de codificacao PBIW. O entendimento desses conceitos e ne-cessario neste trabalho, uma vez que as atividades aqui desenvolvidas tomaram como base tantoesse processador quanto a tecnica de codificacao. O Capıtulo 3 detalhara ainda outros conceitosenvolvidos com o entendimento e projeto de hierarquia de memoria em sistemas computacionais.

facom-ufms

Capıtulo 3

Hierarquia de Memoria

Este capıtulo apresenta a teoria basica envolvida com a utilizacao de hierarquias de memoriaem processadores de proposito geral. Descreve-se aqui o impacto das tecnologias de memoria nofuncionamento e desempenho de programas. Apresenta-se tambem a organizacao das memoriascache e o funcionamento e importancia da memoria virtual.

3.1 Introducao

O funcionamento de um sistema de memoria, nos processadores, e analogo a uma consultade livros em uma biblioteca ou mesmo na mesa de um estudante. Como exemplo, sabe-se queter varios livros sobre uma mesa economiza tempo em comparacao a ter apenas um livro econstantemente precisar voltar as estantes da biblioteca para devolve-lo e apanhar outro. Omesmo princıpio nos permite criar a ilusao de uma memoria grande que podemos acessar taorapidamente quanto uma memoria muito pequena.

Esse princıpio de localidade (buscar dados proximos e mais rapido do que buscar dados maisdistantes) sustenta a maneira como os programas funcionam. O prıncıpio da localidade dizque os programas acessam uma parte relativamente pequena do seu espaco de enderecamentoem qualquer instante do tempo. Importante notar, no entanto, que ha dois tipos diferentes delocalidade [13]:

• Localidade temporal: se um item e refenciado, ele tendera a ser referenciado novamenteem breve.

• Localidade espacial: se um item e refenciado, os itens cujs enderecos estao proximos ten-derao a ser refenciados em breve.

3.2 Hierarquia de Memoria

Nota-se que, atualmente, utiliza-se a vantagem do princıpio da localidade implementando amemoria de um computador como uma hierarquia de memoria. Uma hierarquia de memoriaconsiste em multiplos nıveis de memoria com diferentes tempos de acesso e tamanhos.

9

Hierarquia de Memoria 10

De forma geral, existem tres tecnologias principais usadas na construcao das hierarquiasde memoria. A memoria principal e implementada por meio de DRAM (Dinamic RandomAccess Memory), enquanto os nıveis mais proximos do processador(caches) usam SRAM (StaticRandom Access Memory). A terceira tecnologia, usada para implementar o maior e mais lentonıvel de hierarquia, e o disco magnetico [13].

O sistema de memoria e organizado como uma hierarquia: um nıvel mais proximo do proces-sador em geral e o subconjunto de qualquer nıvel mais distante, e todos os dados sao armazenadosnesse nıvel mais distante. Uma hierarquia de memoria pode consistir em multiplos nıveis, masos dados sao copiados apenas entre dois nıveis. O nıvel superior - o que esta mais perto doprocessador - e menor e mais rapido do que o nıvel inferior. A Figura 3.1 demonstra essa relacaode nıvel, capacidade e velocidade.

Processador

Cache

RAM

Disco

Mais RápidoMenor

Maior Mais Lenta

Figura 3.1: Organizacao Geral Hierarquia de Memoria de um Sistema Computacional.

Na Figura 3.1, deve-se atentar para o fato que, no nıvel mais alto (processador) existemas memorias dos registradores que mantem os dados necessarios para executar uma instrucaoque ja foi buscada nos demais nıveis da hierarquia. Os registradores possuem capacidade dearmazenamento da ordem de bytes mas, por outro lado, tem o tempo de acesso da ordem de 1ciclo de clock.

A unidade de informacao mınima que pode estar presente ou ausente na hierarquia de doisnıveis e denominada bloco. Se os dados requisitados pelo processador estiverem no nıvel supe-rior, ocorre um acerto, caso contrario ocorre uma falha. Assim, o nıvel inferior na hierarquia eacessado para recuperar o bloco com os dados requisitados. A taxa de acertos (taxa de falhas)e a fracao dos acessos a memoria encontrados (nao encontrados) no nıvel superior, usualmenteusada para medida de desempenho da hierarquia de memoria.

facom-ufms

Hierarquia de Memoria 11

3.3 Memorias Cache

Analogamente ao exemplo da biblioteca apresentado na Secao 3.2, a mesa utilizado peloestudante servia como cache, um lugar proximo e seguro que possa guardar informacoes (livros)que sejam necessarios examinar. Assim, a cache possui a funcao de armazenar dados que foramrequisitados pelo processador a fim de ter um melhor desempenho, caso o processador requisiteos mesmos elementos, devido a posicao da cache e sua velocidade de resposta.

A Figura 3.2 mostra uma cache simples, antes e depois de uma requisicao do dado Dxrealizada pelo processador. Do lado esquerdo, ha uma colecao de referencias a diversos dados,sendo que Dx nao se encontra referenciada na cache. Ao requisitar o dado Dx ocorrera umafalha na cache e o dado Dx sera trazido de um nıvel mais baixo (Figura 3.1) na hierarquia dememoria para a cache.

D:18

D:11

D:106

D:54

D:57

D:78

D:83

D:07

D:3

D:18

D:11

D:106

D:54

D:57

D:78

D:83

D:07

D:3

Dx

Antes Depois

Figura 3.2: Cache organizada na forma de mapeamento direto.

A memoria cache esquematizada na Figura 3.2 pode ser acessada de uma forma bastantesimplista, denominada como mapeamento direto. Esse tipo de acesso consiste em atribuir umlocal na cache para cada dado baseado no endereco do dado na memoria. Em outras palavras,cada dado localizado na memoria tera uma posicao especıfica na cache baseado no seu enderecona memoria. Para saber a posicao, na cache, que um dado na memoria devera ocupar, bastautilizar o resultado da operacao de modulo entre o endereco da memoria e o tamanho (quantidadede linhas disponıveis para armazenar dados/instrucoes) da cache. Como exemplo, nota-se quea cache da Figura 3.3 p ossui oito posicoes (linhas) de armazenamento. Com isso, os dadoscom enderecos de memoria 00001, 01001, 10001 e 11001 sao mapeados para a posicao 001 dacache. Para definir a quantidade de bits necessarios para compor um endereco, utilizado peloprocessador, para acessar a cache, basta aplicar dlog2 rceil sobre o tamanho da cache.

Como cada local da cache pode armazenar o conteudo de diversos locais da memoria, eincluıdo um campo tag na cache. As tags correspondem aos bits de endereco necessarias paraidentificar se um dado da cache corresponde ao dado requisitado. A tag precisa apenas contera parte superior do endereco, correspondente aos bits que nao sao usados como ındice para acache. Como observado na Figura 3.3, sao necessarios apenas tres bits menos significativos paraenderecar qualquer dado na cache, mas os dados na memoria principal precisam de cinco bits

facom-ufms

Hierarquia de Memoria 12

001

00000

00001...

01001...

10001...

11001...

Figura 3.3: Cache de mapeamento Direto.

para endereca-los. Assim os 2 bits mais significativos constituem o valor de tag.

Alem dessas situacoes, ao manipular caches deve-se ter o cuidado necessario para identificarse um dado localizado na mesma se encontra valido. Por exemplo, quando o processador einiciado, a cache nao tem dados validos e os campos de tag nao terao significado ou mesmo aposexecutar diversas instrucoes, algumas entradas de cache podem ainda estar vazias, como visto naFigura 3.2. Para validar uma posicao na cache utiliza-se um bit de validade que indica se umaentrada contem um dado valido. Se o bit nao estiver ligado, nao pode haver uma correspondenciapara esse bloco.

Como observado na Figura 3.4, quando o dado com endereco 110011 e trazido para o blocoda cache 001, o dado com endereco 00001 que estava no bloco anteriormente, e substituıdo pelodado recem-requisitado. Esse comportamento permite que a cache tire proveito da localidadetemporal: dados recentemente acessados substituem dados menos referenciados recentemente.

Para que a cache possa tirar proveito sobre a localidade espacial, e adicionado o conceitode associatividade na cache. Anteriormente, um endereco na memoria e diretamente mapeadopara um unico local na cache, com o uso de associatividade um endereco na memoria podeser mapeado em mais de uma posicao da cache. Uma memoria cache pode ser totalmenteassociativa, assim um endereco de memoria pode referenciar qualquer posicao da cache, entaopara encontrar um dado na cache deve-se pesquisar em todas posicoes, para tornar a cacheexequıvel, a pesquisa e feita em paralelo, tornando a memoria mais cara pois sera adicionadoum comparador para cada posicao da cache. Outra maneira mais barata e a memoria cache e serparcialmente associativa, ou associativa por conjunto. Em uma cache associativa por conjunto,existe um numero fixo de locais onde cada dado pode ser colocado, uma cache associativa porconjunto com n locais para um bloco e chamado de cache associativa por conjunto de n vias. Umacache associativa por conjunto de n vias consiste em diversos conjuntos, cada um consistindoem n blocos. Cada dado da memoria e mapeado para um conjunto unico na cache, determinadopelo campo ındice, e um dado pode ser colocado em qualquer posicao do conjunto.

Quando uma falha ocorre em uma cache diretamente mapeada, o bloco requisitado so podeentrar em exatamente uma posicao, e o bloco ocupando essa posicao precisa ser substituıdo.

facom-ufms

Hierarquia de Memoria 13

000

001

010

011

100

101

110

111

N

N

N

N

N

N

N

N

000

001

010

011

100

101

110

111

N

S

N

N

N

N

N

N

00 Dado00001

000

001

010

011

100

101

110

111

N

S

N

N

N

S

N

N

00 Dado00001

11 Dado11101

000

001

010

011

100

101

110

111

N

S

N

N

N

S

N

N

11 Dado11001

11 Dado11101

Cache Vazia Cache Após Dado00001

Cache Após Dado11101Cache Após Dado

11001

Figura 3.4: Substituicao de dados na cache.

Em uma cache associativa, ha uma escolha de onde colocar o bloco requisitado e, portanto, umaescolha de qual bloco substituir. Em uma cache totalmente associativa, todos os blocos saocandidatos a substituicao. Em uma cache associativa por conjunto, precisamos escolher entre osblocos do conjunto selecionado. O esquema mais comum e o LRU (Least Recently Used - usadomenos recentemente). Em um esquema LRU, o dado substituıdo e aquele que nao foi usado hamais tempo.

Apos a realizacao de uma operacao de escrita, apenas o dado alterado que se encontra nacache possui o valor correto, pois o processador apenas altera valores na cache. Essa situacaofaz com que a cache e a memoria estejam inconsistentes. A maneira mais simples de mantera consistencia e sempre escrever os dados na memoria e na cache. Esse esquema e chamadopolıtica de escrita write-through. Este esquema oferece um desempenho muito baixo, pois asescritas levarao muito tempo para ser finalizadas devido a propagacao das escritas na memoria.Uma solucao para esse problema e a utilizacao de buffer de escrita, onde armazena os dadosenquanto estao esperando para serem escritos na memoria. Apos escrever na cache e no bufferde dados, o processador pode continuar a execucao. Quando uma escrita na memoria principale concluıda, a entrada no buffer de escrita e liberada. Se o buffer de escrita estiver cheio quandoo processador atingir uma escrita, o processador precisara sofrer stall ate que uma posicao vaziano buffer esteja disponıvel.

A alternativa para um esquema write-through e um esquema chamado write-back. Quandoocorre uma escrita, o novo valor e escrito apenas no bloco da cache. O bloco modificado e escritono nıvel inferior da hierarquia quando ele e substituıdo.

3.4 Memoria Virtual

Como visto na secao 3.3, as caches fornecem acesso rapido as partes recentemente usadas docodigo e dos dados de um programa. Da mesma maneira, e desejavel que a memoria principalpossa agir como uma cache para o sistema de armazenamento secundario (disco). Assim, apesarde usar a memoria principal para executar programas, faz-se necessario apresentar ao usuario a

facom-ufms

Hierarquia de Memoria 14

nocao de que a memoria e infinita ou esta sempre disponıvel para armazenamento. Essa tecnicae chamada de memoria virtual.

A memoria virtual possui a funcao de identificar a localizacao real (memoria principal oudisco) dos dados ou instrucoes acessados por um programa que nao estejam nas memoriascaches. Como os programas ativos estao compartilhando a mesma memoria, pode ocorrer queum programa sobrescreva posicoes usadas por outro programa, causando inconsistencia de dados.Para resolver esse problema, a memoria virtual utiliza-se de enderecos fısicos, que sao umatraducao do espaco de enderecamento, para distinguir o posicionamento dos programas.

Um programa pode ser tao grande que ocupe a memoria real inteira, causando que nenhumoutro programa possa ser ativado. Para que nao ocorra esse tipo de problema, os programas saomapeados em blocos denominadas paginas, onde para carregar um programa deve-se carregarsuas paginas, porem suas posicoes, nao necessariamente, devem estar em sequencia, pois cadapagina possui um endereco fısico relacionado.

Na memoria virtual, o endereco e desmembrado em um numero de pagina virtual e umoffset de pagina. O numero de pagina fısica constitui a parte mais significativa do enderecofısico, enquanto o offset de pagina constitui a parte menos significativa. O numero de bits nocampo offset de pagina determina o tamanho da pagina. O numero de paginas enderecaveis como endereco virtual nao precisa corresponder ao numero de paginas enderecaveis com o enderecofısico. Ter um numero de paginas virtuais maior do que as paginas fısicas e a base para a ilusaode uma quantidade de memoria virtual ilimitada.

Como a memoria virtual e totalmente associativa se torna muito oneroso realizar uma buscapor um pagina, para isso e utilizado uma tabela que indexa a memoria, chamada de tabela depaginas e reside na propria memoria. A tabela de paginas e indexada pelo numero da pagina doendereco virtual para descobrir o numero da pagina fısica correspondente. Cada programa possuisua propria tabela de paginas, que mapeia o espaco de enderecamento virtual desse programapara a memoria principal. Um bit de validade e usado em cada entrada de tabela de paginas, seo bit estiver ”0”, a pagina nao esta na memoria e ocorre uma falha de pagina. Se o bit estiver”1”, a pagina esta na memoria e a entrada contem o numero de pagina fısica. A Figura 3.5apresenta um esquema de acesso a memoria utilizando a tabela de paginas.

Processador Tabela de Páginas

Cache Memória

Disco

Figura 3.5: Esquema de funcionamento da memoria virtual.

Como a tabela de paginas e armazenada na memoria principal, cada acesso a memoria setorna muito lento. Uma maneira para agilizar o acesso a memoria e utilizar a localidade sobrea referencia a tabela de paginas. Quando uma traducao para um numero de paginas virtual eusada, ela provavelmente sera necessaria novamente no futuro proximo, pois as referencias aosdados nessa pagina possuem localidade temporal e espacial. Com isso e utililizada uma cacheespecial que controla as traducoes usadas recentementes, chamada de TLB (translation-lookaside

facom-ufms

Hierarquia de Memoria 15

buffer).

A Figura 3.6 mostra que cada entrada de tag na TLB contem uma parte do numero depagina virtual e cada entrada de dados da TLB contem um numero de pagina fısica. Assim,com a TLB, nao sera necessario acessar a tabela de paginas a cada referencia. Em vez dissobasta acessar a TLB, que precisara incluir outros bits de modificacao e o bit de referencia.

ProcessadorTabela de Páginas

Cache Memória

Disco

TLB

Figura 3.6: Esquema de funcionamento da memoria virtual com TLB.

Em cada referencia, sera realizado uma consulta ao numero da pagina virtual na TLB. Casoocorra um hit, o numero da pagina fısica e usado para formar o endereco e o bit de modificacaoe tambem ligado. Se ocorrer um miss na TLB, e necessario descobrir se a falha e uma falhade pagina ou uma falha na TLB. Se a pagina existir na memoria, entao a falha de TLB indicaapenas que a traducao esta faltando. Nesse caso, o processador pode tratar a falha de TLBlendo a traducao da tabela de paginas para TLB e em seguida fazer a referencia novamente. Sea pagina nao estiver na memoria, entao a falha de TLB indica uma falta de pagina verdadeira.Nesse caso, o processador chama o sistema operacional usando uma excecao.

Depois que um falha de TLB tiver ocorrido e a traducao faltante tiver sido recuperada databela de paginas, uma entrada da TLB e selecionado para ser atualizada. Como os bits dereferencia e de modificacao estao contidos na entrada da TLB, e necessario copiar esses bits devolta para a entrada da tabela de paginas quando houver uma substituicao/atualizacao de umaentrada. Esses bits sao a unica parte da entrada da TLB que pode ser modificada.

3.5 Consideracoes Finais

Este Capıtulo abordou os conceitos envolvidos no projeto de hierarquia de memoria em sis-temas computacionais. Alem de abordar o relacionamento entre capacidade de armazenamentoe tempo de acesso, o capıtulo tambem detalhou a organizacao de memorias caches e do sistemade memoria virtual. A partir dos conceitos e discussoes apresentados ate aqui, o Capıtulo 4detalha o projeto e implementacoes realizadas para desenvolver as ferramentas de software eprojeto de controlador de memoria apresentados como principais objetivos deste trabalho.

facom-ufms

Capıtulo 4

Desenvolvimento do Projeto

Neste capıtulo apresenta-se o projeto, funcionamento e detalhes de implementacao da fer-ramenta de simulacao DS-VEX (Dinamic Simulation Tool for the ρ-VEX processor), utilizadapara obter tracos de execucao dinamicos, e a construcao da infraestrutura de um controlador dememoria para o processador softcore ρ-VEX. Na secao 4.1 apresenta-se os detalhes de projetoe implementacao do simulador DS-VEX. Na secao 4.2 apresenta-se os detalhes de contrucao docontrolador de memoria para o processador ρ-VEX.

4.1 Desenvolvimento de Simulador de Memoria para o ρ-VEX

A execucao de um programa pode ser feita em um ambiente controlado para analise decertas informacoes relevantes ou estatısticas de execucao para desenvolvimento ou estudo. Oprocessador ρ-VEX possui uma ferramenta de simulacao dinamica que possibilita a execucaode programas e a obtencao de um traco de execucao. No entanto, esse traco nao e compatıvelcom ferramentas de simulacao do comportamento do programa em memoria. Assim, apresenta-seaqui o projeto e detalhes de implementacao de uma ferramenta, acoplada ao simulador dinamicoρ-VEX para avaliar o comportamento em memoria (miss-ratio) das instrucoes de um programacompilado para ρ-VEX. Essa ferramenta e denominada DS-VEX (Dinamic Simulation Toolfor the ρ-VEX processor). A Figura 4.1 apresenta o conjunto de ferramentas utilizadas paracompilacao e simulacao de programas sobre o processador ρ-VEX.

Compilador C VEX

Arquivos em Linguagem de

Montagem VEX .s

BibliottecasDe Suporte

ao Host

ArquivosObjetosdo Host

Arquivos Objetos do Host

Host linker

Host binário

Ferramenta de Simulação Compilada Simulador DS-VEX

s2cs

DS-VEX

Montador e Codificador PBIW

Simulação

Figura 4.1: Ferramentas utilizadas para simulacao de programas.

16

Desenvolvimento do Projeto 17

4.1.1 Arquitetura e Fluxo de Dados

A infraestrutura para a simulacao dinamica de memoria e constituıda de quatro fases: Fase deconstrucao de blocos basicos, fase de construcao do grafo de fluxo de controle, fase de verificacaode blocos basicos executados e fase de simulacao.

Na fase de construcao de blocos basicos, o programa recebe um arquivo gerado pela fase deimpressao do codificador PBIW[14], este arquivo contem as instrucoes e/ou instrucoes e padroesque o programa fez acesso a memoria. Os principais elementos desse arquivo sao:

• #LABEL NAME: Indica o inıcio de um bloco basico.

• [I − ADDRESS]: Indica que uma leitura de instrucao nao codificada da memoria serafeita (indicada pelo caracter I), e que esta instrucao estara no endereco ADDRESS.

• [I−ADDRESS I P−ADDRESS P ]: Indica que uma leitura de uma instrucao codificadasera feita (indicada pelo caracter I) e esta instrucao estara no endereco ADDRESS I.O sımbolo P , que esta localizado no endereco ADDRESS P , indica o padrao necessariopara decodificar a instruao I.

As Figuras 4.2a e 4.2b indicam, respectivamente, a fase de construcao de blocos basicos parainstrucoes nao-codificadas e para instrucoes codificadas.

#main:[I-0] mov $r0.4 = $r0.0 mov $r0.3 = $r0.0 add $r0.1 = $r0.1, -224

[I-1] add $r0.12 = $r0.1, 16 add $r0.6 = $r0.1, 12 add $r0.10 = $r0.1, 8 add $r0.8 = $r0.1, 4

[I-2] add $r0.11 = $r0.1, 15 add $r0.5 = $r0.1, 21 add $r0.9 = $r0.1, 2 add $r0.7 = $r0.1, 1

[I-3] mov $r0.2 = 1 mov $r0.5 = $r0.1 nop nop

#L0X3: ...

(a) Nao Codificado

#main:[I-0 P-0] mov $r0.4 = $r0.0 mov $r0.3 = $r0.0 add $r0.1 = $r0.1, -224

[I-1 P-9] add $r0.12 = $r0.1, 16 add $r0.6 = $r0.1, 12 add $r0.10 = $r0.1, 8 add $r0.8 = $r0.1, 4

[I-2 P-17] add $r0.11 = $r0.1, 15 add $r0.5 = $r0.1, 21 add $r0.9 = $r0.1, 2 add $r0.7 = $r0.1, 1

[I-3 P-7] mov $r0.2 = 1 mov $r0.5 = $r0.1 nop nop

#L0X3: ...

(b) Codificado

Figura 4.2: Exemplos de entradas para a fase de construcao de blocos basicos.

Com isso, constroi-se uma lista encadeada L onde cada no representa um bloco basico. Essaestrutura armazena o nome do bloco basico (#LABEL NAME) e uma lista LI de instrucoesonde cada no contem seu endereco e o endereco do padrao correspondente (caso seja uma ins-trucao codificada) conforme indicado pela Figura 4.3.

Na fase de construcao do grafo de fluxo de controle1 , o programa toma como entradaum arquivo contendo o traco de execucao gerado pelo conjunto de ferramentas ρ-VEX. Essearquivo de traco apresenta quais blocos basicos foram executados. A partir do traco de execucao,a ferramenta constroi um grafo direcionalG que contem todo o fluxo de execucao de um programaconforme demonstrado na Figura 4.4.

1O Grafo de Fluxo de Controle e um grafo direcional onde os nos representam um bloco basico e as arestasrepresentam o fluxo de execucao do programa entre esses blocos basicos.

facom-ufms

Desenvolvimento do Projeto 18

#main

#L0X3

label_name: #main

instruction_list:

A:0 A:1 A:2 A:3

*A = address

(a) Nao Codificado

#main

#L0X3

label_name: #main

instruction_list:

A:0P:0

A:1P:9

A:2P:17

A:3P:7

*A = address, *P = pattern

(b) Codificado

Figura 4.3: Exemplos de estruturas geradas na fase de construcao de blocos basicos.

main..

goto l_L0X3label l_L0X3

.

.goto l_L5X3label l_L5X3

.

.end

main

l_L5X3l_L0X3

end

Figura 4.4: Fase de construcao do grafo de fluxo de controle.

Na fase de verificacao de blocos basicos executados constroi-se o grafo F em que cada norepresenta as instrucoes e seus respectivos enderecos executados daquele bloco basico. Esta faseusa o grafo de fluxo de controle para validar as tomadas de decisoes feitas pelo programa.

Na fase de simulacao utiliza-se uma versao adaptada da ferramenta Dinero [5]. A adaptacaofoi desenvolvida no ambito deste trabalho e consiste na coleta e apresentacao de informacoes defalhas de acesso na cache (cache miss) para cada instrucao presente no traco. Tal funcionalidadenao e disponibilizada na versao original da ferramenta Dinero.

As Figuras 4.5 e 4.6 representam como um trecho de codigo assembly se transforma atravesdo DS-VEX para um arquivo de entrada para a Ferramenta Dinero. O arquivo de entrada edescrito da seguinte forma: TIPO OPERACAO ENDERECO DADO onde TIPO OPERACAOsimboliza qual o tipo de dado que o programa ira buscar na memoria (2 para instrucoes e 0para dados), e ENDERECO DADO representa o endereco daquele dado na memoria. Apos asimulacao, o Dinero gera uma tabela (Tabela 4.1) com informacoes relativas ao acesso a memoriacache e um arquivo contendo as falhas de acesso a cache.

facom-ufms

Desenvolvimento do Projeto 19

main::

c0 add $r0.1 = $r0.1,

c0 mov $r0.3 = $r0.0

c0 mov $r0.4 = $r0.0

;; #Instruc~ao 0

c0 add $r0.8 = $r0.1, 0x4

c0 add $r0.10 = $r0.1, 0x8

c0 add $r0.6 = $r0.1, 0xc

c0 add $r0.12 = $r0.1, 0x10

;; #Instruc~ao 1

c0 mov $r0.5 = $r0.1

c0 mov $r0.2 = 1

;; #Instruc~ao 2

Figura 4.5: Trecho de codigo do programa avl tree nao codificado.

2 0 #Instruc~ao 0

2 10 #Instruc~ao 1

2 20 #Instruc~ao 2

2 30 #Instruc~ao 3

2 40 #Instruc~ao 4

2 50 #Instruc~ao 5

2 60 #Instruc~ao 6

2 70 #Instruc~ao 7

2 80 #Instruc~ao 8

2 90 #Instruc~ao 9

2 a0 #Instruc~ao 10

2 b0 #Instruc~ao 11

2 30 #Instruc~ao 3

Figura 4.6: Exemplo de entrada do programa avl tree nao codificado para a ferramenta Dinero.

Metricas Total Instrucoes

Acessos Demandados 1797 1797

Misses Compusorios 149 149

Misses de Capacidade 1290 1290

Misses de Conflito 0 0

Tabela 4.1: Dados gerados pelo Dinero sobre misses no programa avl tree em uma cache commapeamento direto e 512Bytes de tamanho.

4.2 Projeto e Implementacao do Gerenciador de Memoria

O gerenciador de memoria foi projetado para que seja o mais generico possıvel objetivandoser disponibilizado e utilizado em outros processadores softcore. A funcionalidade basica eprover um mecanismo transparente para o processador ρ-VEX acessar as memorias externas(SRAM) do kit de desenvolvimento para FPGAs. Essa nova funcionalidade permitira que oprocessador ρ-VEX seja efetivamente sintetizado como um processador e nao mais como umASIC (Application Specific Integrated Circuit - Circuito Integrado de Aplicacao Especıfica).

facom-ufms

Desenvolvimento do Projeto 20

Para isso, o gerenciador foi dividido em tres modulos(conforme exemplificado na Figura 4.7),sendo eles: Bridge, Controller e SRAM, detalhados nas subsecoes 4.2.1, 4.2.2 e 4.2.3.

Bridge

Controller

SRAM

Figura 4.7: Diagrama de blocos do gerenciador de memoria.

Ressalta-se que alem de projetar todo o circuito de controle e acesso a memoria do kit FPGA,tambem realizou-se a implementacao completa desse projeto a partir da linguagem VHDL [15]e utilizando a ferramenta de projeto Altera Quartusr Web Edition.

4.2.1 Componente Bridge

O componente Bridge encapsula o controlador de memoria, pois e a interface entre o pro-cessador e o controlador de memoria externa. As principais funcoes sao evitar que a memoriarealize escritas ou leituras repetitivas da mesma operacao e fazer a conversao de sequencia debits(std logic vector) para valores naturais, pois o projeto e implementacao do controlador e aSRAM limita-se a utilizar apenas numeros naturais.

Como pode-se observar na Figura 4.8, o componente recebe como entrada os sinais:

• clock (clk) utilizado para sincronizar os componentes junto com o processador;

• enable (en) utilizado para informar a memoria sua ativacao ou desativacao;

• escrita ou leitura (wr) utilizado para informar qual tipo de operacao. Caso esteja comvalor 1 a operacao sera de escrita caso contrario sera de leitura;

• endereco (address) utilizado para informar em qual posicao a operacao deve ser realizada;

• dado de entrada (dataIn) utilizado para informar quais os dados devem ser armazenadoscaso seja um operacao de escrita.

Os sinais de saıdas sao apenas dois, sendo ready para informar que a operacao foi concluıda edataOut para informar o dado lido na memoria solicitado pelo processador.

facom-ufms

Desenvolvimento do Projeto 21

Controller

State Machine

clk

en

wr

address

dataIn

controllerEnable

dataOut

controllerReady

ready

10

128

128

Figura 4.8: Visao detalhada do componente Bridge.

Devido ao seu comportamento, o componente Bridge e modelado como uma maquina deestados do tipo Mealy. Dessa forma, como pode-se observar na Figura 4.8, a maquina possuicomo entrada os sinais clock, enable e o sinal controllerReady que informa quando o componenteController realizou a operacao solicitada. Como saıda, a maquina possui os sinais ready econtrollerEnable que informa o controlador quando se encontra habilitado.

A maquina de estados possui dois estados, sendo eles: WAITING e EXECUTING. O estadoinicial da maquina e o estado de espera (WAITING). Na Figura 4.9 pode-se notar que a maquinapossui quatro passos de transicao de estado.

WAITING

EXECUTING

Figura 4.9: Maquina de estados do componente Bridge.

• O estado WAITING possui duas transicoes baseadas no sinal enable, caso enable estejaativado e seu valor for diferente do seu valor no clock anterior ocorrera uma transicao parao estado EXECUTING, caso contrario a transicao sera para o proprio estado WAITING.

• O estado EXECUTING possui duas transicoes baseadas no sinal controllerReady, casoesteja ativado o proximo estado sera WAITING, caso contrario sera o proprio estadoEXECUTING.

4.2.2 Componente Controller

O componente Controller encapsula a SRAM. Esse componente e responsavel por realizarsucessivos acessos a SRAM devido a capacidade de memoria armazenar apenas 16 bits porendereco. Considerando que a palavra de dados e as instrucoes do ρ-VEX possuem o tamanho

facom-ufms

Desenvolvimento do Projeto 22

de 128 bits, a escolha de que a SRAM possuira palavras de 16 bits se adapta perfeitamentea manipulacao de dados e instrucoes, uma vez que, com 8 acessos, pode-se realizar a leituraou escrita de de uma palavra ou instrucao na memoria. Por exemplo, conforme a Figura 4.10,quando o processador ρ-VEX requer uma operacao de escrita ou leitura sobre o endereco 0, ocomponente Controller acessara as posicoes de 0 a 7, que sao referentes a instrucao requisitada,caso seja sobre o endereco 1, as posicoes referentes serao 8 a 15.

128 Bits

16 Bits

0 :16 Bits

0

1

2

3

4

5

6

7

8

9

10

11

Figura 4.10: Esquema de transformacao de instrucoes de 128 bits para adaptacao a memoria daFPGA que suporta acessos de 16 bits.

SRAM

State Machine

clk

en

memOperationTypememEnable

dataOut

dataMemOut

ready

16

wr

targetAddress

dataMemIn

16

addressdataIn 128

128

10

13

Figura 4.11: Visao detalhada do componente Controller.

Para gerenciar o envio das requisicoes e a recepcao das instrucoes e dados, criou-se umamaquina de estados do tipo Mealy que tem como funcao gerenciar os acessos a memoria e, ao finalda operacao, disponibilizar o dado solicitado, caso seja uma operacao de leitura. Pode-se observar

facom-ufms

Desenvolvimento do Projeto 23

na Figura 4.11 que a maquina de estados possui como entrada os sinais clk, en, wr, address edataIn providos pelo componente Bridge, ao quais possuem mesma funcao. O sinal dataMemOutque informa quando a operacao solicitada foi concluıda. Como saıda, existem os sinais readye dataOut e os sinais de saıda do componente Bridge; O sinal dataMemIn e responsavel porinformar o dado que sera escrito; O sinal targetAddress informa para a memoria em qual posicaoa operacao deve ser realizada; memOperationType informa qual tipo de operacao sera realizado;o sinal memEnable informa a ativacao da memoria.

A maquina de estados do componente Controller possui cinco estados (Figura 4.12):

• O estado IDLE, que e estado incial e possui a funcao de capturar o sinal wr para descobrirqual o tipo de operacao. Caso seja um operacao de escrita, o proximo estagio sera WRI-TING, caso contrario, sera READING. Se o sinal memEnable nao estiver com valor “1”,o proximo estagio sera o proprio IDLE;

• O estado READING possui a funcao de informar a posicao a ser lida e alterar o sinalmemEnable para “1” e alterar o sinal memOperationType para “0” e obrigatoriamente oproximo estagio sera READINGMEM;

• O estado READINGMEM tem a funcao de capturar o valor obtido pela SRAM atravesdo sinal dataMemOut, incrementa o indexador da posicao a ser lida no vetor e caso aoperacao de leitura realize todos os oitos passos, no caso do ρ-VEX o proximo estado seraIDLE e o sinal ready tera valor “1”, caso contrario o proximo estado sera READING eready tera valor “0”;

• O estado WRITING e responsavel por informar o fragmento do dado a ser escrito atravesdo sinal dataMemIn, informar a posicao a ser escrita e verificar se o vetor foi completamenteescrito. Em caso positivo, o proximo estado sera IDLE e ready tera valor “1”, casocontrario, sera WRITINGMEM e ready tera valor “0”;

• O estado WRITINGMEM incrementa o indexador do vetor a ser escrito e obrigatoriamenteo proximo estado sera WRITING.

IDLE

READING WRITING

READINGMEM WRITINGMEM

Figura 4.12: Maquina de estados do componente Controller.

4.2.3 Componente SRAM

O componente SRAM possui o vetor de dados da memoria e realiza uma operacao de 16 bitspor vez. Esse componente possui como entrada os sinais memOperationType, targetAddress,

facom-ufms

Desenvolvimento do Projeto 24

dataMemIn e memEnable oriundos do componente Controller. Como saıda possui o sinal data-MemOut, o mesmo usado pelo component Controller. Como possui o vetor de dados, sua funcaoe armazenar os dados provenientes de escritas requisitadas pelo componente Controller e dispo-nibilizar esses dados atraves de operacoes de leitura. A Figura 4.13 exemplifica o componente.

wr

address

data

enable

dataMemOutSYNC_RAM 16

16

13

write_addressread_address

a_datawrite_enable

13

Figura 4.13: Visao detalhada do Componente SRAM.

De acordo com o sinal memOperationType, a SRAM realiza uma operacao de escrita ouleitura, sendo que o sinal memEnable deve estar ativado (valor 1) para a operacao ocorrer. Aofinal de qualquer operacao o sinal dataMemOut ou possuı o valor de leitura ou o valor de escrita.

4.3 Consideracoes Finais

Este capıtulo descreveu o projeto e desenvolvimento da ferramenta para geracao de tracosde execucao de programas compilados, com a tecnica de codificacao PBIW, para o processadorρ-VEX. O capıtulo tambem detalhou o projeto e implementacao de modulos de controle e ge-renciamento da memoria que foram acoplados ao projeto do processador ρ-VEX. No Capıtulo 5apresenta-se os experimentos e resultados obtidos para validar e avaliar as ferramentas de soft-ware e componentes de hardware desenvolvidos neste trabalho.

facom-ufms

Capıtulo 5

Experimentos e Resultados

Para validar e avaliar as implementacoes realizadas foram realizados alguns experimentoscom programas do Benchmark SimpleBench e algoritmos classicos de estruturas de dados. Osexperimentos realizados podem ser divididos em: Experimentos de simulacao com desempenhoem memoria a partir de tracos de execucao(5.1), Validacao atraves da Simulacao no Model-Sim(5.2) e Analise de Area do Processador(5.3).

5.1 Resultados da Simulacao

Na Figura 5.1 sao apresentados os resultados gerados pelo simulador de memoria cache Di-nero [5]. Os programas utilizados nesse experimento foram compilados com a infraestruturade compilacao e simulados com a ferramenta de simulacao do ρ-VEX. Apos isso, utilizou-se aferramenta DS-VEX para extrair tracos de execucao compatıveis com a ferramenta Dinero a fimde avaliar o desempenho em memoria dos programas nao-codificados (instrucoes ρ-VEX origi-nais) e programas codificados (instrucoes ρ-VEX codificadas com PBIW). As Figuras 5.1a-5.1mapresentam a taxa de falhas na cache miss-ratio de varios programas executados com e sema codificacao PBIW. Na execucao do programa, as instrucoes ρ-VEX codificadas (64 bits) uti-lizaram a cache padrao de instrucoes(I-Cache) ja os padroes (96 bits) utilizaram a cache dedados (D-Cache) e as instrucoes ρ-VEX originais (128 bits) utilizaram apenas a cache padraode instrucoes(I-Cache). Observa-se tambem que os experimentos com a codificacao e sem a codi-ficacao foram executadas com o mesmo tamanho de cache. Assim, um programa nao codificadocom cache de 512Bytes tera 512Bytes para I-Cache, ja um programa codificado tera 512Bytesde cache ao total, 256Bytes para I-Cache e 256Bytes para a D-Cache. Os graficos apresentamem seu eixo X a quantidade de instrucoes executadas pelo programa e no eixo Y a taxa de miss.Todos os testes foram realizados com caches de mapeamento direto, com tamanhos variando de128 Bytes a 4 KBytes. Para as instrucoes codificadas foi utilizada aotimizacao de Juncao dePadroes.

Conforme apresentado nas Figuras 5.1a-5.1m, nota-se o reuso dinamico de padroes ao longoda execucao do programa. Isso significa que a taxa de miss do padrao e menor ou igual a taxade miss da instrucao codificada. Nota-se tambem que a taxa de miss de instrucoes ρ-VEX emaior que a taxa de miss de instrucoes PBIW e, apesar de adicionar mais intrucoes e o padraocorrespondente, o miss-penalty da instrucao PBIW e menor. Pode-se notar pelas linhas dosgraficos que misses de instrucoes codificadas nao implicam em misses de padroes (coeficiente

25

Experimentos e Resultados 26

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

avl_tree

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

19301

(a) Tamanho da cache: 4KBytes

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

bmm

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

92931

(b) Tamanho da cache: 2KBytes

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

counting_sort

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

6941

(c) Tamanho da cache: 512Bytes

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

double_linked_list

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

156451

(d) Tamanho da cache: 1KByte

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

floyd_warshal

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

23681

(e) Tamanho da cache: 512Bytes

98550

10

20

30

40

50

60

70

80

90

100

Taxa de miss

hyper

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

hyper

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

1 9855

(f) Tamanho da cache: 1KByte

facom-ufms

Experimentos e Resultados 27

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

kruskal

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

20861

(g) Tamanho da cache: 1KByte

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

linked_list

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache%

de

mis

s

549851

(h) Tamanho da cache: 512Bytes

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

mergesort

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

17341

(i) Tamanho da cache: 1KByte

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

nested_complex

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

73411

(j) Tamanho da cache: 1KByte

facom-ufms

Experimentos e Resultados 28

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

prim

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

4081

(k) Tamanho da cache: 1KByte

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

sqrt

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

224701

(l) Tamanho da cache: 1KByte

0

10

20

30

40

50

60

70

80

90

100

Taxa de miss

strcpy

Instrução PBIW ρ-VEX Padrão PBIW

Acessos à memoria cache

% d

e m

iss

28701

(m) Tamanho da cache: 1KByte

Figura 5.1: Taxa de miss para Programas PBIW Versao 2.0 e Juncao de Padroes.

facom-ufms

Experimentos e Resultados 29

de angulacao=0). Esse comportamento comprova, em tempo de execucao, a existencia de reusode padroes pelas instrucoes executadas.Nota-se tambem que a linha indicando a finalizacao doprograma sem codificacao (linha escura) termina antes das linhas correspondentes ao programacodificado. Isso e justificado pois no processo de codificacao gera-se mais intrucoes codificadasdo que instrucoes ρ-VEX. No entanto, a taxa de miss ao final da execucao dos programas saoproximas.

Um fator importante para se avaliar e o tempo de execucao do programa executado. A fimde avaliar se programas codificados com PBIW podem gerar ganhos de desempenho e tomandocomo base os resultados gerados nas Figuras 5.1a- 5.1m realizou-se um experimento para com-putar o desempenho (em ciclos de execucao) de cada programa ρ-VEX (original e codificado comPBIW). Para programas nao codificados este pode ser calculado de acordo com a Equacao 5.1onde MRi e MPi representam, respectivamente, MissRate e o MissPenalty de instrucoes do pro-grama. Para os programas codificados, utiliza-se a Equacao 5.2, onde MRic e MPic representamrespectivamente MissRate e o MissPenalty de instrucoes codificadas do programa e MRp e MPp

representam respectivamente MissRate e o MissPenalty de padroes do programa, e utilizada. Aconstante NIe representa o total de instrucoes originais executadas e na Equacao 5.2 NICe eNPe denotam o numero de instrucoes codificadas e padroes executados. Em ambas as equacoes,o valor de penalidade da falha (miss penalty) e 5. A Tabela ?? apresenta os tempos de execucao(em ciclos de execucao) para cada programa na versao original e codificada.

TE1 = NIe + ((NIe ∗MRi) ∗MPi) (5.1)

TE2 = NICe + ((NICe ∗MRic) ∗MPic

2) + ((NPe ∗MRp) ∗

MPp

2) (5.2)

Programas TE1 TE2 Ganho em %

avl tree 9357 8575 8,35

bmm 36473 49196 -34,88

counting sort 1424 2505 -75,89

double linked list 80837 66542 17,68

floyd warshall 11333 12179 -7,46

hyper 54294 40532 25,34

kruskal 5082 7877 -55,00

linked list 276470 247002 10,65

mergesort 5934 7634 -28,65

nested complex 9341 17992 -92,61

prim 1113 1801 -61,74

sqrt 130923 96970 25,93

strcpy 13985 11046 21,02

Tabela 5.1: Tempo de execucao dos programas avaliados.

De acordo com a Tabela 5.1 ha um ganho de 8,35% a 25,93% no tempo de execucao em seisde treze programas(avl tree, double linked list, hyper, linked list, sqrt e strcpy), ja nos programasrestantes nota-se um aumento no tempo de execucao. Isso se justifica pelo fato que a quantidadede instrucoes codificadas executadas foi maior do que a quantidade de instrucoes originais paraum mesmo programa. Apesar de programas codificados possuirem um tempo de execucao maior,ha um ganho (Figura 5.2) significante na quantidade de bytes transferidos da memoria.

facom-ufms

Experimentos e Resultados 30

1024 4096 1024 2048 1024 1024 1024 1024 512 512 1024 512 1024nested_complex

avl_tree kruskal bmm mergesort

prim double_linked_list

sqrt counting_sort

floyd_warshall

strcpy linked_list

hyper

0

1024

2048

3072

4096

16% 23% 31% 38%29% 31% 29% 27% 25% 34% 31% 27% 29%

84%

77%69%

62%

71%69%

71%73% 75% 66% 69% 73% 71%

Bytes transferidos da memória

Instruções PBIW

Padrões PBIW

rVex

Byt

es

Figura 5.2: Total de Bytes buscados na memoria para cada programa.

Mais informacoes sobre as vantagens da codificacao PBIW podem ser encontradas em [14].

5.2 Validacao atraves da Simulacao no ModelSim

Nas Figuras 5.3 a 5.6 sao apresentados os resultados gerados pela simulacao executada pelaferramenta ModelSim [16]. As Figuras 5.3 e 5.4 representam o resultado final da simulacao doprograma fibonacci executados no processador ρ-VEX com e sem o componente Bridge. Coma utilizacao do componente Bridge faz-se necessario um tempo para que a memoria possa sealimentar das instrucoes a serem executadas. Assim, foi criado um sinal chamado run l queindica quando o processador pode executar. Pode-se observar na Figura 5.4 que quando osinal run l sobe (0 → 1) o processador executa as mesmas intrucoes que o processador sem ocomponente Bridge (Figura 5.3).

Para uma melhor observacao, as Figuras 5.5 e 5.6 possuem uma visao mais detalhada decomo ocorre a leitura da instrucao com a posicao na memoria numero 5. instantanea A buscade uma instrucao no processador, sem o componente Bridge, ocorre em um unico passo devidoo acesso ser a uma memoria ROM, por outro lado com o componente Bridge a instrucao egradativamente obtida, devido ao componente Controller ter que fazer 8 acessos a SRAM.

facom-ufms

Experimentos e Resultados 31

Figura 5.3: Simulacao ρ-VEX sem o componente Bridge.

Figura 5.4: Simulacao ρ-VEX com o componente Bridge.

Figura 5.5: Detalhes de uma instrucao na simulacao ρ-VEX sem o componente Bridge.

facom-ufms

Experimentos e Resultados 32

Figura 5.6: Detalhes de uma instrucao na simulacao ρ-VEX com o compomente Bridge.

5.3 Impactos do Componente Bridge no processador ρ-VEX

Com a adicao do componente Bridge ao processador ρ-VEX, o primeiro impacto causado e aarea ocupada pelo componente, determinada pelo numero de elementos logicos utilizados. Pode-se observar na Tabela 5.2 que a principal mudanca ocorre nos componentes Controller e Execute.O componente Controller possui o maior numero de elementos logicos dentre os componentesadicionados pois e o responsavel por acessar a SRAM e devolver a instrucao requisitada.

Componente ρ-VEX ρ-VEX com Bridge

Bridge 0 2

Constroller 0 1121

d mem 0 0

ctrl 69 121

decode 138 347

execute 1878 7446

Tabela 5.2: Numeros de elementos logicos do processador ρ-VEX e ρ-VEX com Bridge.

As Figuras 5.7 e 5.8 representam a mudanca interna do processador ρ-VEX com o compo-nente Bridge. Nota-se que na Figura 5.8 o componente i mem e substituido pelo componenteBridge e o registrador run s e o sinal de saıda run rvex utilizado para indicar quando o proces-sador pode iniciar a execucao.

Na Figura 5.8, o sinal que habilita a memoria e fornecido pelo processador ρ-VEX, ja naFigura 5.7, sinal que habilita a memoria e fornecido uma fonte externa. Para isso, o componenteDecode possui o papel de habilitar o sinal interno next instr que e utilizado para indicar quandoe necessario uma instrucao, de forma que a memoria deve ser lida. Assim, o sinal mem enable re ativado disparando o sinal en do Bridge.

Outro impacto sobre o processador ρ-VEX e o tempo de execucao. Na simulacao com oModelSim tambem foi possıvel obter o tempo de execucao (na simulacao dos programas) emciclos dos programas. Como visto na Tabela 5.3 os programas tiveram um aumento sensıvel notempo de execucao pelo fato de que o componente Bridge necessita de mais ciclos para buscar

facom-ufms

Experimentos e Resultados 33

Figura 5.7: Visao esquematica do ρ-VEX sem o componente Bridge.

Figura 5.8: Visao esquematica do ρ-VEX com o componente Bridge.

facom-ufms

Experimentos e Resultados 34

uma instrucao se comparado a versao do ρ-VEX que usa apenas a memoria ROM. Deve-seatentar que como ja abordado na secao 4.2.2 em que o componente Controller precisa acessar 8vezes a memoria SRAM, ocasionando que pelo menos 8 ciclos o processador que estar em stall.

Programas ρ-VEX ρ-VEX com Bridge

avl tree 78 470

bmm 102 606

counting sort 262 1522

double linked list 90 538

floyd warshall 198 1150

hyper 51 303

kruskal 179 1047

linked list 84 504

mergesort 192 1116

nested complex 174 1014

prim 222 1286

sqrt 78 470

strcpy 96 572

Tabela 5.3: Numeros de ciclos necessarios para execucao dos programas.

5.4 Consideracoes Finais

Este capıtulo apresentou os experimentos e resultados realizados com a ferramenta DS-VEX. Os resultados possibilitam nao so analisar o impacto de desempenho da memoria com acodificacao PBIW como obter dados para a escolha de tipos de caches a ser utilizadas. Estecapıtulo tambem apresentou a validacao e a analise de area do componente para gerenciamentoda memoria no processador ρ-VEX. O Capıtulo 6 apresenta as conclusoes finais sobre o trabalhodesenvolvido, as contribuicoes geradas e as possibilidades para desenvolvimento de trabalhosfuturos.

facom-ufms

Capıtulo 6

Consideracoes finais

Este trabalho apresentou o projeto, desenvolvimento e implementacao de uma ferramentade software para validacao e avaliacao de desempenho de programas codificados com a tecnicaPBIW sobre o processador softcore ρ-VEX. Alem disso, tambem foram projetados e implemen-tados modulos para possibilitar o acesso do processador ρ-VEX a memoria externa da plataformaFPGA utilizada nos experimentos. Essas implementacoes trouxeram impacto positivo para ou-tros trabalhos que utilizaram a infraestrutura de software PBIW e o processador ρ-VEX.

Experimentos foram realizados visando validar e avaliar as implementacoes realizadas. So-bre a validacao e avaliacao da tecnica PBIW sobre ρ-VEX os experimentos realizados a partirdos resultados da ferramenta implementada neste trabalho possibilitaram avaliar o impacto nodesempenho da memoria quanto a utilizacao da tecnica PBIW. Vale ressaltar que caracterizar eavaliar o impacto da tecnica PBIW (instrucoes e padroes) sobre as taxas de hit e miss na cachefoi possıvel devido as funcionalidades existentes na ferramenta implementada. Esses resultadosmostraram que PBIW nao acarreta impacto negativo no desempenho da memoria de programascodificados. Ao contrario, a taxa de miss para programas codificados tem sido igual ou menor(melhor) do que a dos programas nao codificados.

Com relacao aos experimentos sobre os modulos de hardware que estenderam a funciona-lidade para utilizacao da memoria externa pelo processador ρ-VEX foi possıvel validar essasimplementacoes e notar que, inevitavelmente, ha aumento da area ocupada pelo processador.Esse resultado ja era esperado uma vez que, com essa funcionalidade, o core do processador foiacrescido com novos modulos de hardware responsaveis por carregar e sincronizar os acessos deinstrucoes entre processador e memoria.

Apesar da enfase dedicada neste trabalho ao projeto, implementacao e validacao de ferra-mentas para validar a tecnica PBIW e estender as funcionalidades de acesso a memoria porparte do processador ρ-VEX , nota-se que outros trabalhos poderao ser desenvolvidos a partirdas atividades aqui realizadas. Algumas possibilidades de trabalhos futuros sao:

• Estender a manipulacao de acessos a memoria para dados, padroes e instrucoes codificadasPBIW sobre o processador ρ-VEX.

• Estender a hierarquia de memoria para utilizar a memoria DRAM do kit de desenvolvi-mento em FPGA.

• Integrar a ferramenta DS-VEX junto a infraestrutura de codificacao PBIW projetada e

35

Consideracoes finais 36

implementada em [14].

• Construcao de um componente para o carregamento de programas na memoria atraves deum dispositivo de armazenamento em massa como por exemplo dispositivos USB.

• Prototipacao e avaliacao de desempenho do processador ρ-VEX com o circuito do contro-lador de memoria sobre um kit FPGA.

facom-ufms

Referencias Bibliograficas

[1] R. Batistella, “PBIW: Um Esquema de Codificacao Baseado em Padroes de Instrucao,”Master’s thesis, Instituto de Computacao - Universidade Estadual de Campinas, Campinas-SP, Fevereiro 2008.

[2] R. Santos, R. Batistella, and R. Azevedo, “A Pattern Based Instruction Encoding Techniquefor High Performance Architectures,” International Journal of High Performance SystemsArchitectures, vol. 2, pp. 71–80, 2009.

[3] T. van As, S. Wong, and G. Brown, “ρ-VEX: A Reconfigurable and Extensible VLIW Pro-cessor,” in Proceedings of the International Conference on Field-Programmable Technology,IEEE, 2008.

[4] Terasic Technologies Inc., “DE2-115 User Manual.” Disponıvel em: http:

//www.terasic.com.tw/cgi-bin/page/archive_download.pl?Language=English&No=

502&FID=cd9c7c1feaa2467c58c9aa4cc02131af. Acessado em Marco/2013.

[5] J. Edler and M. D. Hill, “Dinero IV Trace-Driven Uniprocessor Cache Simulator.” [online].http://pages.cs.wisc.edu/ markhill/DineroIV/, 2003. Acessado em Fevereiro/2013.

[6] T. van As, “ρ-VEX: A Reconfigurable and Extensible vliw Processor,” Master’s thesis,Delft University of Technology, 2008. Faculty of Electrical Engineering, Mathematics andComputer Science.

[7] J. A. Fisher, P. Faraboschi, and C. Young, Embedded Computing: A VLIW Approach toArchitecture, Compilers and Tools. Elsevier, 2005.

[8] Hewlett-Packard Laboratories, “VEX Toolchain.” Disponıvel em: http://www.hpl.hp.

com/downloads/vex/, Marco 2011.

[9] G. Araujo, P. Centoducatte, M. Cortes, and R. Pannain, “Code Compression Based onOperand Factorization,” in 31st International Symposium on Microarchitecture, pp. 194–201, ACM, 1998.

[10] J. Ernst, W. Evans, C. W. Fraser, S. Lucco, and T. A. Proebsting, “Code Compression,”in Proceedings of Programming Language Design and Implementation, pp. 358–365, ACM,1997.

[11] M. Franz and K. Thomas, “Slim Binaries,” Communications of the ACM, vol. 40, no. 2,pp. 87–94, 1997.

37

REFERENCIAS BIBLIOGRAFICAS 38

[12] R. F. dos Santos, “Otimizacoes para Codificadores de Instrucoes.” Exame de Qualificacaode Mestrado, 2012. Faculdade de Computacao - Universidade Federal de Mato Grosso doSul - Campo Grande-MS.

[13] D. Patterson and J. Hennessy, Computer Organization and Design: The Hardware/SoftwareInterface. The Morgan Kaufmann Series, 2011.

[14] R. A. Marks, “Infraestrutura para Codificacao de Instrucoes Baseada em Fatoracao dePadroes,” Master’s thesis, Universidade Federal de Mato Grosso do Sul, 2012. Faculdadede Computacao.

[15] P. Ashenden, The Designer’s Guide to VHDL. Morgan Kaufmann Publishers, 3 ed., 2008.

[16] M. Graphics, “Modelsim user’s manual.” Mentor Graphics, May 2008.

facom-ufms