Trabalho de Microprogramao Utilizando Simulador Escape DLX
Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
2
1. Introduo 3 2. Conceitos de Microprogramao 3 3. Simulador ESCAPE DLX 4 3.1. Caractersticas 4 3.1.1. Janela de Visualizao da Arquitetura 5 3.1.2. Janela de Visualizao do Microcdigo 6 3.1.3. Janela de Visualizao das Instrues na Memria 7 3.1.4. Janela de Visualizao da Memria 8 4. Apresentao do algoritmo 9 4.1. Descrio da Implementao 14 5. Desempenho 15 6. Concluso 16 7. Anexo 1 Fonte do programa original em assembly x86 17 8. Anexo 2 Fonte do programa para escapeDLX sem instrues de uso especfico 19 9. Anexo 3 Fonte do programa para escapeDLX com instruo FILT 21 10. Anexo 4 Tabela de Microcdigo com instruo FILT 23 11. Anexo 5 Jump Table com instruo FILT 24
Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
3 1. Introduo
O objetivo deste trabalho comparar o desempenho de um programa quando implementado em um processador atravs do uso de instrues tpicas versus com o uso de uma instruo especial criada a partir da alterao do microcdigo que realize uma parcela considervel do programa. Para isto escolhemos um algoritmo de processamento de imagens com grande localidade de execuo, isto , na maior parte do tempo apenas um pequeno conjunto de instrues do algoritmo est sendo executado. Aps medir o nmero de ciclos de mquina necessrios para executar o algoritmo com um certo conjunto de dados de entrada, criamos uma instruo (atravs da insero de um opcode novo na jumptable e da escrita do seu correspondente microcdigo) capaz de realizar a tarefa previamente desempenhada pelas instrues de uso repetitivo. Realizamos novamente a medida do nmero de ciclos necessrios para a execuo do programa e apresentamos nossas concluses.
2. Conceitos de Microprogramao
Em todo processador existe um conjunto primitivo de operaes que pode ser executado diretamente por circuitos lgicos. Tais operaes incluem a leitura e a gravao de registradores, operaes aritmticas e lgicas da ALU, etc. Para selecionar quais destas operaes sero executadas em um ciclo existem sinais de controle, cujos nveis lgicos podem ser definidos atravs de lgica digital direta a partir das palavras de instrues (lgica hard wired) ou atravs de palavras oriundas de uma memria interna ao processador, onde um programa nela armazenado configura tais sinais de controle em funo das palavras de instruo apresentadas ao processador. A este programa convencionou-se chamar microcdigo. As microinstrues possuem formatos ligados diretamente disposio dos sinais de controle do processador, logo costumam possuir grande largura de bits com vrios campos. Habitualmente as microinstrues ficam armazenadas em uma ROM cujos endereos so seguidos em seqncia, a no ser que o microprograma execute uma operao de desvio. Neste caso, tabelas com endereos de saltos (jump tables) so utilizadas para determinar a prxima instruo.
Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
4
3. Simulador ESCAPE DLX
O Escape um ambiente de simulao de arquitetura de computadores com propsito educacional, que permite a utilizao de um processador microprogramado (arquitetura von Neumann) e um processador pipeline (arquitetura Harvard). Estas duas arquiteturas foram implementadas em 32 bits baseadas no DLX de Hennessy e Patterson.
3.1. Caractersticas
As arquiteturas de microprogramao e pipeline so parcialmente configurveis, permitindo que o usurio tenha acesso a algumas configuraes bsicas, como o nmero de registradores, opcodes e tamanho do campo imediato. Nesta arquitetura o tamanho dos campos de bits so variveis, dependendo do nmero de instrues e registradores, tendo todas as instrues 32 bits. Dependendo do tipo de simulao podemos utilizar 4 a 256 registradores, alm de ter a possibilidade de configurar o nmero de ciclos para acesso memria (wait states), e at 4 jump tables. Como a arquitetura foi baseadas no DLX de Hennessy e Patterson, foram definidos trs tipos de intrues, a tipo I, R e J.
Figura 1 - Campos das Instrues
Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
5 O caminho de dados composto por dois registradores de leitura (A e B), um de escrita (C), uma interface de memria com endereo (MAR), dados (MDR), registradores de instrues (IR), contador de programa (PC), registradores extras e uma unidade aritmtica ALU. As diferentes partes so conectadas por dois barramentos de entrada (S1 e S2) e um barramento de resultado. A ALU pode realizar vrias operaes bsicas em um nico ciclo. A unidade de controle microprogramada, sendo o endereo do microcdigo guardado em um registrador especial (uAR). Durante cada ciclo este registrador incrementado com um novo valor.
Tabela 1 Instrues do Escape
Existem vrias janelas que permitem que o usurio tenha acesso as informaes da arquitetura, instrues, memria e microcdigo.
3.1.1. Janela de Visualizao da Arquitetura
A simulao pode ser executada ciclo a ciclo ou por vrios ciclos definidos de acordo com o usurio. Durante a execuo do programa os ciclos podem ser revertidos para retornar a execuo do programa em uma determinada instruo, sendo que este recurso tem o limite de 1024 ciclos. Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
6 A arquitetura composta de uma unidade de controle e um caminho de dados de acordo com a figura 2.
Figura 2 - da Arquitetura Escape
3.1.2. Janela de Visualizao do Microcdigo
Nesta janela podemos definir o trecho de microcdigo correspondente a cada instruo do programa. Nesta janela podemos definir todos os parmetros das instrues. A figura 3 mostra a janela de visualizao de microcdigo. Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
7
Figura 3 Janela de visualizao das Instrues
3.1.3. Janela de Visualizao das Instrues na Memria Nesta janela podemos ver o contedo da memria sob a forma de instrues. Vale lembrar que a mesma memria serva para armazenar cdigo e dados, logo qualquer modificao nesta janela criar uma modificao na janela de visualizao de memria e vice-versa (arquitetura Von Neumann). A janela de visualizao das instrues na memria pode ser vista na figura 4.
Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
8
Figura 4 Seqncia das Instrues na Memria
3.1.4. Janela de Visualizao da Memria A memria pode ser editada atravs de uma janela de visualizao especfica, permitindo a alterao do tamanho da memria e o tempo de acesso, que pode ser configurado de 1 a 9 ciclos. Os dados da memria podem ser acessados ou gravados em words de 32 bits, meias- palavras de 16 bits ou em bytes de 8 bits. Na figura 5 vemos a janela de visualizao de memria.
Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
9
Figura 5 Dados da Memria
4. Apresentao do algoritmo
O algoritmo escolhido foi a aplicao de um kernel sobre uma imagem. Trata-se de uma operao comum para processamento de imagens, usualmente objetivando algum tipo de filtragem espacial do sinal. Nesta operao, temos uma matriz de coeficientes (habitualmente quadrada) de dimenses mpares (chamada kernel). O elemento central sobreposto a um elemento da imagem a ser filtrada. Em seguida, calcula-se o produto entre os elementos do kernel e os elementos da matriz origem, somam-se os resultados e substitui-se o pixel equivalente ao elemento central por este resultado. A operao deve ser repetida para todos os pixels da imagem a ser filtrada. A figura 6 mostra esta operao.
Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
10
Figura 6 Aplicao de um kernel sobre uma imagem
Habitualmente os coeficientes de um kernel somam 1, de forma a preservar a quantidade de energia presente na imagem. Os kernels simtricos no favorecem o deslocamento da energia na imagem. J os assimtricos podem criar efeitos do tipo motion blur.
Especificamente no nosso trabalho escolhemos um kernel que cria um efeito de chamas (associado uma pallete de cores apropriada). Tal tipo de kernel foi desenvolvido para a criao de efeitos grficos em programas intitulados demos onde preza-se a qualidade grfica obtida com programas compactos. A figura 7 mostra o screenshot de um programa deste tipo escrito por um dos autores executando este efeito:
Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
11
Figura 7 Exemplo do kernel do fogo sendo usado por uma demo
Para gerar tal efeito escolhemos uma matriz de valores compreendidos entre 0 e 255, onde 0 representa a parte mais fria (em preto, neste exemplo) e 255 a mais quente (em amarelo claro). As outras tonalidades seguem um degrad entre estes extremos. Inicialmente, escolhemos aleatoriamente valores iniciais para a linha inferior da matriz, sendo estes valores 0 ou 255. Esta linha no mostrada na tela pois no tem uma aparncia muito boa (fica com pixels amarelos e pretos alternados). O kernel aplicado o seguinte:
Figura 8 Kernel de gerao do efeito do fogo
Como o kernel no simtrico, ele favorece que a energia suba, pois cada linha torna-se uma mdia ponderada da linha inferior e do pixel central. Na verdade, para que a chama Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
12 venha a se extinguir antes de atingir o topo da matriz o kernel deveria ter uma mdia menor do que 1, mas isso implicaria no uso de aritmtica de ponto flutuante. A soluo encontrada foi subtrair 1 do resultado do kernel caso este fosse maior do que 0, ou deixar 0 caso contrrio. Esta modificao introduz uma pequena no-linearidade no clculo mas diminui enormemente a complexidade computacional, j que podemos somar o valor dos 4 pixels com peso e deslocar o resultado 2 casas binrias para a direita, efetuando assim a diviso por 4 com uma operao barata em termos de tempo computacional (o programa original foi otimizado para execuo em um PC386). O algoritmo final fica ento assim (em C):
S=(Matrix[K] + Matrix[K+L-1] + Matrix[K+L] + Matrix[K+L+1])>>4; IF (S > 0) S--; Matrix[K] = S;
Onde K o ndice do vetor e L a largura da matriz Matrix.
Neste ponto cabe ressaltar outras trs otimizaes usadas tanto na implementao original quanto na implementao no simulador EscapeDLX:
1) Em vez de considerar uma matriz, ou seja, um plano bi-dimensional, consideramos o campo de aplicao do kernel como um array. Esta simplificao permite manter apenas um ndice para index-lo, a troco de gerar problemas na primeira e na ltima coluna (pois as mesmas no possuem vizinhos, e com esta otimizao os vizinhos se tornaro a coluna oposta). Visualmente, esta simplificao causaria a impresso de que o fogo estava sendo gerado em um cilindro que foi aberto e esticado na tela. Para contornar este efeito obrigamos os pixels da ltima linha prximos tanto da primeira quanto da ltima coluna a serem negros, de forma que no sejam geradas chamas nos cantos da tela.
Figura 9 Tratando a matriz como um buffer unidimensional introduzimos uma dependncia entre a coluna esquerda e a direita
2) Normalmente seriam necessrios 2 buffers para a aplicao de um kernel: um para guardar o estado anterior, e outro para guardar o novo estado aps o clculo de todos os pixels. Uma observao cuidadosa do nosso kernel mostra que, para valores positivos de L, este causal, ou seja, ele s depende de valores futuros (se interpretarmos o ndice K como tempo). Desta maneira, possvel aplic-lo diretamente sobre o buffer origem, Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
13 sobre-escrevendo os valores sem causar erros de clculo, desde que comecemos a aplicao pela posio zero e sigamos em direo ao maior valor de K.
Figura 10 Ao calcular o valor de K, podemos substitu-lo diretamente no vetor pois K+1 (nem outra posio posterior a K) no depende de K.
3) O clculo de K compartilha dois valores em comum com K+1, logo so necessrios apenas 2 acessos de leitura memria para o clculo de uma posio da matriz (j que podemos reaproveitar 2 leituras).
Figura 11 O clculo de K+1 compartilha 2 elementos com o clculo de K
No anexo 1 podemos ver o cdigo original escrito em assembly x86. Ele pode ser dividido em 3 partes:
a) A parte inicial que gera aleatoriamente valores 0 ou 255 na base do fogo (na verdade 0 ou o valor passado pela pilha em [bp+4], mas que habitualmente 255). b) A parte que efetivamente calcula o kernel (que est duplicada pois o loop foi desenrolado) c) A parte que copia os dados para a memria de vdeo
No nosso trabalho implementamos a parte 1 e a 2 (sem desenrolar o loop). No foi necessrio implementar a parte 3 pois visualizamos o resultado do programa diretamente na memria do processador. O anexo 2 contm o cdigo fonte do programa implementado no escapeDLX sem o uso de instrues especficas. O anexo 3 contm o cdigo fonte do programa com uma instruo de uso especfica que faz o clculo da aplicao do kernel.
Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
14 4.1. Descrio da Implementao
O escapeDLX implementa uma arquitetura Von Neumann, logo o programa e os dados ficam no mesmo espao de memria. Na figura 12 podemos ver este espao de memria. Efetuamos a seguinte diviso: do endereo 0x400 at o endereo 0x7ff foi organizada uma matriz de words (32 bits cada) de 16x16 elementos. Estes foram os pixels da nossa implementao. A linha de 0x7c0 at 0x7ff a geradora, ou seja, onde os valores aleatrios (0 ou 32) so introduzidos. Foi necessrio diminuir o valor aleatrio de 255 para 26, pois a matriz pequena na dimenso vertical, logo os dados no chegavam a zero antes de atingir o topo. O programa em si comea na posio zero e termina por volta do endereo 0x0C0. A Word que comea em 0x3fc guarda o seed do gerador de nmeros aleatrios. A Word que comea em 0x3f8 inicializada em 0 e incrementada cada vez que o programa retorna ao seu incio, logo pode ser usada para determinar o nmero de ciclos necessrios para gerar um frame.
Figura 12 Memria do processador
A instruo que foi criada para acelerar o programa chama-se FILT e possui 2 argumentos: um registrador, que contm um ponteiro para a posio do buffer a ser calculada (equivalente a K nos exemplos anteriores) e uma constante que representa o valor de L+1 (na verdade 4L+4 j que os ponteiros do EscapeDLX so para bytes e ns escolhemos pixels da largura de words de 32 bits). Esta instruo espera que os valores dos pixels j lidos na interao anterior (K+L-1 e K+L) estejam em R2 e R3 respectivamente, enquanto o valor do pixel K carregado para R1 e o do pixel K+L+1 carregado em R4. O valor final da computao entregue em R1. Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
15
5. Desempenho
O desempenho do programa foi medido em suas duas verses (com e sem a instruo FILT) com diferentes penalidades de acesso a memria: 1 a 9 ciclos. Os resultados podem ser vistos nas figuras 13 e 14.
Figura 13 Comparao entre o nmero de ciclos dos 2 programas
Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
16
Figura 14 Percentual de acelerao entre os 2 programas
Podemos perceber que quanto mais lento o acesso memria, maior o ganho em transportar a execuo do algoritmo da memria principal para a memria de microprograma. Todavia, os ganhos so cada vez menores.
6. Concluso
Conclumos que a criao de instrues para a substituio de trechos de programas por microcdigo pode acelerar enormemente uma aplicao, sobretudo quando a diferena de performance entre a memria de programa e a memria de microprograma grande. Neste trabalho tambm foi possvel aumentar nosso grau de familiarizao com o conceito de microprogramao atravs do estudo do simulador escapeDLX. Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
17
7. Anexo 1 Fonte do programa original em assembly x86
_FIRE PROC NEAR push bp mov bp,sp mov bx,300 chuta: mov ax,[randseed] mov dx,8405h mul dx inc ax and dl,4 mov [randseed],ax jz zero mov cl,[bp+4] mov matrix[bx+25285],cl ;0ffh jmp cont zero: mov matrix[bx+25285],0 cont: dec bx cmp bx,0 jnz chuta
xor ax,ax xor bx,bx xor cx,cx xor dx,dx mov cl,matrix[319] mov dl,matrix[320] loop1: mov al,matrix[bx] add ax,cx mov cl,matrix[bx+321] add ax,dx add ax,cx shr ax,2 jz vazio dec ax vazio: mov matrix[bx],al inc bx Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
mov ax,0a000h mov es,ax mov si, offset matrix mov di,39040 mov cx,12800 rep movsw pop bp ret _FIRE ENDP Trabalho de Microprogramao Utilizando Escape DLX PESC - Arquitetura de Computadores I
Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro
19
8. Anexo 2 Fonte do programa para escapeDLX sem instrues de uso especfico