• Nenhum resultado encontrado

Projeto e implementação de um acelerador de arquitetura reconfigurável

N/A
N/A
Protected

Academic year: 2021

Share "Projeto e implementação de um acelerador de arquitetura reconfigurável"

Copied!
39
0
0

Texto

(1)

Universidade Federal do Rio Grande do Norte Centro de Ciências Exatas e da Terra

Departamento de Informática e Matemática Aplicada Bacharelado em Ciência da Computação

Projeto e Implementação de um Acelerador de

Arquitetura Reconfigurável

Ronaldo de Figueiredo Silveira

Natal-RN Junho 2019

(2)

Ronaldo de Figueiredo Silveira

Projeto e Implementação de um Acelerador de

Arquitetura Reconfigurável

Monografia de Graduação apresentada ao Departamento de Informática e Matemática Aplicada do Centro de Ciências Exatas e da Terra da Universidade Federal do Rio Grande do Norte como requisito parcial para a ob-tenção do grau de bacharel em Ciência da Computação.

Orientador(a)

Professora Doutora Monica Magalhães Pereira

Universidade Federal do Rio Grande do Norte – UFRN Departamento de Informática e Matemática Aplicada – DIMAp

Natal-RN Junho 2019

(3)

Silveira, Ronaldo de Figueiredo.

Projeto e implementação de um acelerador de arquitetura reconfigurável / Ronaldo de Figueiredo Silveira. - 2019. 38f.: il.

Monografia (Bacharelado em Ciência da Computação)

-Universidade Federal do Rio Grande do Norte, Centro de Ciências Exatas e da Terra, Departamento de Informática e Matemática Aplicada. Natal, 2019.

Orientadora: Monica Magalhães Pereira.

1. Computação - Monografia. 2. Acelerador - Monografia. 3. Arquitetura reconfigurável - Monografia. 4. Arquitetura de computadores - Monografia. I. Pereira, Monica Magalhães. II. Título.

RN/UF/CCET CDU 004

Universidade Federal do Rio Grande do Norte - UFRN Sistema de Bibliotecas - SISBI

Catalogação de Publicação na Fonte. UFRN - Biblioteca Setorial Prof. Ronaldo Xavier de Arruda - CCET

(4)

Monografia de Graduação sob o título Projeto e Implementação de um Acelerador de Arquitetura Reconfigurável apresentada por Ronaldo de Figueiredo Silveira e aceita pelo Departamento de Informática e Matemática Aplicada do Centro de Ciências Exatas e da Terra da Universidade Federal do Rio Grande do Norte, sendo aprovada por todos os membros da banca examinadora abaixo especificada:

Professora Doutora Monica Magalhães Pereira

Orientador(a)

Departamento de Informática e Matemática Aplicada Universidade Federal do Rio Grande do Norte

Professor Doutor Márcio Eduardo Kreutz

Departamento de Informática e Matemática Aplicada Universidade Federal do Rio Grande do Norte

Professora Mestra Alba Sandyra Bezerra Lopes

Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte

(5)

Agradecimentos

Em primeiro lugar ao meu "eu"do passado, por apesar de todas as dificuldades que passou na época, não ter desistido.

Ao corpo docente da universidade, em especial à professora Monica por ter me ajudado tanto e sido tão compreensiva com tudo.

A minha mãe, que me ajudou e incentivou incondicionalmente nessa jornada. Minha avó e minha tia Rita, por sempre estarem lá para mim quando eu precisei de ajuda.

Meus agradecimentos a Heloysa Galvão que me ajudou em meus momentos mais tristes e celebrou, comigo, os mais felizes. Além de seu apoio e ajuda imensa durante tantos anos.

A todos os meus amigos e amigas que me acompanharam nessa jornada, em especial Luís Cláudio, Fernanda Isabel, Luísa Rocha, Ana Caroline, João Pedro, Luís Tertulino, Lucas Torres, Raquel Lopes, Esther Bárbara, Karyd’ja e Mateus por todo o apoio, os dias divertidos e dias de desespero, os momentos de choro e de alegria, os bolos, cachorros-quentes, madrugadas acordados, abraços e tudo o que me proporcionaram durante a graduação.

Ademais, a todos que direta ou indiretamente influenciaram e fizeram parte da minha formação, o meu muito obrigado.

(6)

I may not have gone where I intended to go, but I think I have ended up where I needed to be.

(7)

Projeto e Implementação de um Acelerador de

Arquitetura Reconfigurável

Autor: Ronaldo de Figueiredo Silveira Orientador(a): Professora Doutora Monica Magalhães Pereira

Resumo

Na área da Ciência da Computação desempenho é uma característica buscada com afinco tanto em software quanto em hardware. Para tal, são realizados estudos de estruturas de dados, heurísticas, metaheurísticas, atualizações de linguagens, compiladores e softwares que buscam a melhoria do desempenho no nível lógico. Além dessas, também existem, no campo, atualização, pesquisa e desenvolvimento de hardware cada vez mais eficiente. Diminuição do tamanho dos transistores, maior quantidade de núcleos e suporte a siste-mas multithread são exemplos de avanços alcançados nessa área. Também, nessa visão, foi criado o Array Reconfigurável, um acelerador que utiliza o paradigma de arquiteturas reconfiguráveis. Tal array consiste em uma série de unidades lógicas e aritméticas (ULAs), multiplicadores e unidades de acesso à memória paralelizados, com o intuito de tornar a execução de diversos tipos de aplicações mais eficiente. Neste contexto, esse trabalho con-siste na pesquisa, projeto e implementação de um Array de Arquitetura Reconfigurável, para a aceleração da execução de aplicações de propósito geral, utilizando a linguagem de descrição de hardware VHDL para a simulação do sistema criado. Serão investigadas diferentes arquiteturas do acelerador, em seguida, será proposto um projeto arquitetural que será implementado, validado e testado.

(8)

Project and Implementation of a Reconfigurable

Architecture Accelerator

Author: Ronaldo de Figueiredo Silveira Advisor: Professor Doctor Monica Magalhães Pereira

Abstract

In the field of Computer Science performance is a hard-sought feature for both software and hardware. For so, there are studies of data types, heuristics, metaheuristics, language updates, compilers and softwares that seek to improve the performance at the logical level. In addition to those, also exists updates, research and development of increasingly efficient hardware. Decreasing the size of transistors, greater number of cores and mul-tithread support are examples of advances achieved in this area. Also, in this view, the Reconfigurable Array was created, an accelerator that uses the reconfigurable architec-ture paradigm. Such array consists in a series of parallel aritmetic and logic units (ALUs), multipliers and memory access units, in order to make several sorts of applications more efficient. In this context, this work consits on the research, project and implementation of a Reconfigurable Architecture Array, to accelerate the execution of general purpose appli-cations, using the hardware description language VHDL to simulate the created system. Differentt accelerator architectures will be investigated, then an architectural design will be proposed, implemented, validated and tested.

(9)

Lista de figuras

1 Sistema reconfigurável. Fonte: (BECK et al., 2008) . . . p. 20 2 Nível do Array . . . p. 22 3 Estrutura do Array . . . p. 23 4 Grafo de execução de uma aplicação exemplo . . . p. 23 5 Estrutura do Array . . . p. 24 6 APP01: Apenas UFs paralelas . . . p. 31 7 APP02: Apenas UFs sequenciais . . . p. 31 8 APP03: Todas as unidades com maior paralelismo possível . . . p. 31 9 APP04: Todas as unidades sequenciais . . . p. 32 10 APP05: Todas as unidades de forma aleatória . . . p. 32 11 Forma de onda da APP05 . . . p. 34

(10)

Lista de tabelas

1 Perfil das aplicações . . . p. 31 2 Resultados de aceleração . . . p. 33 3 Resultados de Área por bloco . . . p. 34

(11)

Sumário

1 Introdução p. 12 1.1 Objetivos . . . p. 13 1.1.1 Objetivo geral . . . p. 13 1.1.2 Objetivos específicos . . . p. 13 1.2 Motivação . . . p. 13 1.3 Organização do trabalho . . . p. 14 2 Revisão bibliográfica p. 16 2.1 Conceitos . . . p. 16 2.2 Trabalhos relacionados . . . p. 17

3 Modelo arquitetural da CGRA p. 20 3.1 O sistema reconfigurável . . . p. 20 3.2 O Acelerador . . . p. 21 3.3 O tradutor binário . . . p. 24 4 Metodologia e Desenvolvimento p. 28 4.1 Procedimentos . . . p. 28 4.2 Recursos . . . p. 29 5 Testes e resultados p. 30 5.1 Testes . . . p. 30 5.1.1 Benchmarks . . . p. 30

(12)

5.1.2 Resultados . . . p. 33 5.2 Área e Frequência . . . p. 34

6 Considerações finais p. 35

(13)

12

1

Introdução

Arquiteturas reconfiguráveis são propostas como soluções alternativas para aumento de desempenho desde 1960, por Gerald Estrin (ESTRIN, 1960). Estes sistemas visavam combinar a flexibilidade do software com a velocidade de execução do hardware combina-cional.

A principal diferença dos sistemas de arquitetura reconfigurável para os micropro-cessadores de propósito geral é a capacidade de modificar o datapath além do fluxo de controle. O que dá a possibilidade de tornar a execução da aplicação mais veloz que em um processador comum (COMPTON KATHERINE; HAUCK, 2002).

Além do microprocessador, outra forma de executar as aplicações é utilizando hard-ware específico, o Application-Specific Integrated Circuit (ASIC). Entretanto a maior parte das aplicações atuais é muito heterogênea. Por exemplo, uma aplicação de multimídia pode possuir partes de alta intensidade computacional, um componente de tempo real, partes de computação em nível de bit e etc. Um ASIC feito para esse tipo de aplicação complexa se tornaria enorme e de alto consumo energético. Sendo assim a diferença básica entre a arquitetura reconfigurável e o componente físico personalizado é a flexibilidade de mudar a configuração do hardware em tempo de execução.

Sistemas de aceleração de arquitetura reconfigurável são estudados na área de arquite-tura de computadores desde a proposta de Estrin. Como dito em (HAUSER; WAWRZYNEK, 1997), o uso de Field-Programmable Gate Array (FPGA) cresceu nos últimos anos. Apesar de essa ser uma alternativa para combinar os aspectos supracitados do software e hard-ware, respectivamente, FPGAs, em geral, não possuem espaço suficiente para codificar programas inteiros.

Pesquisas como (DEHON, 1994) e (RAZDAN; SMITH, 1994) buscam um sistema híbrido entre a arquitetura tradicional dos processadores e a reconfigurável da FPGA. Como sugerido por Hauser e Wawrzynek um coprocessador reconfigurável em tempo de execução se torna uma boa alternativa para essa hibridização. O aperfeiçoamento desses sistemas

(14)

13

é uma busca constante dos pesquisadores da área.

Ao longo dos anos, diversas propostas de arquiteturas reconfiguráveis foram expostas, como é possível observar em (COMPTON KATHERINE; HAUCK, 2002), (HARTENSTEIN, 2001) e (KACHRIS; SOUDRIS, 2016). Deste modo é possível averiguar que a vantagem em utilização desses aceleradores reconfiguráveis vem se confirmando ao longo das pesquisas desenvolvidas. Uma proposta que merece destaque e será abordada neste trabalho é a de (BECK, 2008) que utiliza um componente chamado Tradutor Binário para a realização da reconfiguração do array em tempo de execução. A partir dessa constatação propusemos os objetivos que se seguem.

1.1

Objetivos

1.1.1

Objetivo geral

A presente pesquisa tem como objetivo investigar, propor e implementar um sistema de aceleração reconfigurável visando a verificação de aspectos de baixo nível como atraso e área.

1.1.2

Objetivos específicos

• Analisar as experiências anteriores de aceleradores com projetos semelhantes ao implementado na presente pesquisa.

• Implementar com base em experiências analisadas, um exemplo de um acelerador de arquitetura reconfigurável.

• Verificar, com base em síntese e simulações da implementação, os aspectos de atraso e área do projeto.

1.2

Motivação

Como já sabemos por trabalhos como (KIM N.S.; AUSTIN, 2003), (THOMPSON S.E.; CHAU, 2005), (FONTANA; DECAD, 2018) e (KUMAR, 2015), a Lei de Moore logo deixará de exis-tir, devido aos limites físicos do silício. Nesse contexto, pesquisadores buscam alternativas para aumentar, ainda assim, o desempenho dos processadores, sem precisar diminuir ainda mais o tamanho dos transistores.

(15)

14

Assim, o aumento da frequência dos processadores seria uma solução paliativa para o aumento do desempenho desses processadores. Entretanto, não há como continuar au-mentando essa frequência, pois a dissipação de potência tem se tornado um problema realmente preocupante na atualidade (FLYNN M.J.; HUNG, 2005).

Em um cenário onde até processadores superescalares estão atingindo seus limites, como dito em (BRANDALERO MARCELO; BECK, 2016) e (WALL, 1991), arquitetura reconfi-gurável se torna uma boa alternativa para o aumento de desempenho desses processadores, sem um acréscimo muito significativo de área ou consumo energético.

O acelerador de arquitetura reconfigurável visa a paralelização da execução de instru-ções que seriam feitas sequencialmente pelo processador. Assim, este provê o aumento do desempenho das aplicações executadas. Além desse ganho, pode-se utilizar o array para aplicações de perfis heterogêneos, adaptando, assim, o hardware ao software em execução. O estudo que realizamos de implementações anteriores de arrays, como (BECK, 2008) permitiu tomar como base um trabalho já bem estruturado e com resultados consolidados para adquirir possíveis melhoras em termos de desempenho. Considerando, também, que as aplicações atuais necessitam cada vez mais desse aumento de desempenho.

A partir dessa constatação nos motivamos a investigar, utilizando síntese e simulação de um projeto em linguagem de descrição de hardware, aspectos inerentes ao baixo nível, como área e aceleração em nível de ciclos.

Outrossim, um simulador em baixo nível, sintetizável e facilmente escalável terá da-dos mais precisos que poderão ser utilizada-dos para alimentar as estimativas utilizadas em simuladores de alto nível.

1.3

Organização do trabalho

Este trabalho está organizado da seguinte maneira: O capítulo 2 consiste em uma revisão da literatura, apresentando o estado da arte e sistemas já abordados.

O capítulo 3 representa a metodologia utilizada no presente trabalho e os recursos necessários para a realização do mesmo.

O capítulo 4 engloba a explicação, de forma detalhada da proposta aplicada, ou seja, dos componentes implementados para este trabalho.

(16)

15

(17)

16

2

Revisão bibliográfica

Nesse capítulo será feita a revisão da literatura. Na primeira parte uma recapitulação de conceitos utilizados no campo de computação reconfigurável e na segunda seção, uma análise de trabalhos relacionados. Estão presentes pequenas composições textuais para o resumo dos trabalhos analisados.

2.1

Conceitos

Reconfiguração é um conceito amplamente estudado e para isso, foram definidos alguns termos comumente utilizados no meio, como granularidade, grau de acoplamento, tradução binária

Podemos separar os sistemas reconfiguráveis em dois tipos: de granularidade grossa ou fina. A granularidade fina significa que o caminho de dados dos blocos funcionais tem a largura em nível de um bit. Já em sistemas de granularidade grossa, os blocos lógicos configuráveis são feitos em nível de palavra. Sendo assim, Coarse Grained Reconfigurable Arrays (CGRA) se tornam mais simples de entender e o tempo de configuração também é diminuído (HARTENSTEIN; KAISERSLAUTERN, 2007).

Além disso, também podemos separar a integração entre o acelerador e o CPU em duas categorias com base no nível de acoplamento sendo esse fraco ou forte. Um sistema de forte acoplamento apresenta o acelerador próximo à CPU e integrado a ela de forma que a comunicação entre eles acontece de forma direta. Isso causa uma maior especialização do processador, porém diminui o tempo de overhead da comunicação. Já o acoplamento fraco exige que exista uma interface de comunicação entre o processador e o acelerador, como um barramento ou uma memória compartilhada, aumentando a flexibilidade do acelerador, porém gerando um maior tempo de overhead na comunicação entre os dois componentes(HANNIG et al., 2013).

(18)

17

executável de uma arquitetura para outra (SITES et al., 1993). Essa tradução é importante para gerar as configurações do acelerador e pode ser feita de forma dinâmica ou estática. A tradução estática ocorre em tempo de compilação e a dinâmica em tempo de execução (CIFUENTES; MALHOTRA, 1996).

2.2

Trabalhos relacionados

Como já dito anteriormente, o estudo de hardware reconfigurável começou com o trabalho de Estrin, em 1960 (ESTRIN, 1960). Desde então, se desenvolve cada vez mais análises nessa área.

Algumas arquiteturas reconfiguráveis visam acelerar tipos específicos de aplicações, já outras, são voltadas para um uso mais genérico. Como já dito por (AMDAHL, 1967), a maior parte das aplicações possui, em seu código, apenas uma parte a qual se é vanta-joso acelerar. Sendo assim, CGRAs podem ser criadas para otimizar partes de código e acopladas a um processador de propósito geral.

(DEHON, 1994) utiliza uma tecnologia chamada Dynamically Programmable Gate Ar-ray (DPGA), em contraste com a FPGA. O DPGA alterna entre configurações pré-definidas com facilidade. Este também é um sistema reconfigurável de granularidade mais fina (paralelismo em nível de bits). Sistemas de granularidade mais fina requerem um maior número de bits para a reconfiguração. Porém, como o acelerador proposto alterna apenas entre configurações pré-definidas, essa necessidade não ocorre.

(HAUSER; WAWRZYNEK, 1997) propõem a utilização de um array chamado Garp. Ele consegue acessar a hierarquia de memória como um todo. Também, diferente dos trabalhos anteriores, Garp não utiliza um tradutor binário feito em hardware, mas sim um software de configuração do array. O software gera uma configuração que é passada para o compilador com instruções específicas para o Garp. O assembler gera um código para o MIPS com algumas modificações para configurar o Garp.

Não apenas em sistemas de granularidade fina (FPGA) mas em CGRA são implemen-tados aceleradores. Foram propostos aceleradores de configuração em nível de palavra, como Pasticine, proposto por (PRABHAKAR RAGHU; ZHANG, 2018). Tal sistema executa eficientemente aplicações com padrão de paralelismo obtendo um ganho de até de setenta e seis vezes em performance por watt em relação a uma FPGA de mesma área.

(19)

18

de granularidade grossa, com unidades funcionais, multiplicadores e unidades de acesso à memória organizadas em duas dimensões, sendo uma delas executando em paralelo e a outra de forma sequencial. Também propõem um algoritmo de tradução binária, o Dynamic Instruction Merging (DIM). Esse algoritmo pode ser implementado tanto em software quanto em hardware e tem um impacto mínimo na frequência de operações do processador.

Com os experimentos realizados, os autores supracitados conseguiram um ganho de até 2.7 vezes na performance média, e conseguiram melhorar o consumo energético em 2.35 vezes na média. Vale salientar, também que o DIM possui compatibilidade binária, isto é, não altera o código fonte da aplicação.

(BRANDALERO MARCELO; BECK, 2016) utiliza o mesmo modelo de array reconfigurá-vel, agregando-o a um processador superescalar. Nesse trabalho, eles mostram que o uso do acelerador pode gerar ganhos de até 2.5 vezes, com média de 1.68 vezes em performance em um processador superescalar x86.

Sistemas de arquitetura reconfigurável também são utilizados para executar, de forma rápida, diversas aplicações específicas. (JRIDI MAHER; ALFALOU, 2015), por exemplo, utili-zam sistemas reconfiguráveis para calcular uma aproximação para a transformada discreta de cosseno (DCT). O DCT é utilizado em algoritmos de compressão de vídeo e de ima-gens. Utilizando FPGA, Jridi e Alfalou conseguem paralelizar a execução do algoritmo ganhando em velocidade e consumo energético.

Em (YUN et al., 2018), utiliza um CGRA para processamento de multimídia, em espe-cial decodificação e recebimento de vídeos de alta definição. Além disso, utiliza, também, um algoritmo de reconfiguração de hardware implementado em software.

(KUMAR SANTOSH; MANIKANDAN, 2017) utilizam FPGA e arquitetura reconfigurável para implementar o algoritmo de Support Vector Machines (SVM). Esse algoritmo é uti-lizado em aprendizado de máquina como um método de aprendizado supervisionado para problemas de classificação e regressão. Nisso, conseguem economizar até 83% em recursos. CGRAs também são utilizados para acelerar o cálculo de Deep Neural Networks (DNN) e Convoluted Neural Networks (CNN), utilizando algoritmos de afinação auto-mática (BAE INPYO; HARRIS, 2018) conseguiram aumentar o desempenho da configuração do CGRA em 11 vezes para cálculo de CNNs. Além disso mostraram significante melhoria no consumo energético em relação a outros aceleradores.

(20)

pro-19

cessamento de imagens utilizando a arquitetura reconfigurável de FPGAs. Aumentando a frequência máxima e os quadros por segundo em relação ao estado da arte.

(PAEK JONG KYUNG; CHOI, 2011) cria um sistema fracamente acoplado com um co-processador de arquitetura reconfigurável bidimensional e um tradutor binário estático que analisa quais partes do código gerado pelo compilador seu sistema poderá acelerar. Assim, gera a cadeia de configuração para o CGRA utilizado.

(FENG, 2013) propõe um sistema de uma unidade lógica e aritmética reconfigurável acoplada a um um Digital Signal Processor (DSP) de 32 bits.

(SINGH H.; MING-HAU LEE; GUANGMING LU; KURDAHI, 2000) introduzem MorphoSys, um sistema reconfigurável que tem como alvo aplicações muito paralelizáveis, regulares e que requerem uma alta vazão. MorphoSys é composto de uma unidade reconfigurável acoplada a um processador de propósito geral.

A literatura contempla diversos outros trabalhos que utilizam arquiteturas reconfigu-ráveis (COMPTON KATHERINE; HAUCK, 2002). Podemos notar, com esses trabalhos, que há

ganhos em desempenho e em consumo energético em utilizar arquiteturas reconfiguráveis. Em diversos tipos de processadores ou como sistemas autônomos de hardware.

Considerando todos os aspectos acima citados, foi escolhida como base do projeto um arquitetura de reconfiguração dinâmica, e de modelo arquitetural simples e cujos grupos de pesquisa são colaboradores. Sendo assim, a estrutura arquitetural utilizada baseia-se no CGRA de (BECK et al., 2008).

(21)

20

3

Modelo arquitetural da CGRA

O presente capítulo tem por objetivo mostrar e explicar, de forma mais detalhada, os componentes implementados e o modelo arquitetural do acelerador e do acoplamento.

3.1

O sistema reconfigurável

Figura 1: Sistema reconfigurável. Fonte: (BECK et al., 2008)

O sistema reconfigurável se dá por um acelerador acoplado a um processador de propósito geral. Cada instrução passada para o CPU pelo Program Counter (PC), vai também para o tradutor binário. O tradutor gera uma configuração com base nessas instruções e essa configuração é indexada pelo valor do PC.

Quando a mesma sequência de instruções for encontrada novamente, a tradução não se torna mais necessária. O array carrega a configuração e executa todo aquele conjunto de instruções com o maior paralelismo que sua arquitetura permite.

Após a execução, o acelerador realiza a escrita de volta nos registradores. Então, finalmente, o PC é atualizado. Cada execução subsequente do laço é feita, então, pelo

(22)

21

array.

É importante notar que todos os procedimentos realizados pelo tradutor binário e pelo acelerador ocorrem em paralelo à execução da CPU, não gerando overhead ou penalidades no caminho crítico.

3.2

O Acelerador

O acelerador implementado é um array de componentes de hardware implementado em VHDL que possui três níveis sequenciais e cada nível é composto pela seguinte estrutura:

• Uma matriz de unidades funcionais, sendo as unidades em linha calculam separada-mente e paralelaseparada-mente. Cada linha executa sequencialseparada-mente em relação às outras; • Uma unidade de acesso à memória;

• Uma unidade multiplicadora;

• Um barramento para a comunicação de dados entre as unidades e entre os níveis. O início e o final do barramento é ligado a um banco de 32 registradores de 32 bits cada;

As entradas de cada unidade são ligadas a um barramento de dados. Para cada linha de unidades funcionais, cada um dos registradores ligados ao barramento possui um mul-tiplexador para decidir o valor que o atualizará. Os valores de entrada de cada um desses multiplexadores são os valores de cada unidade funcional da linha específica. A estrutura interna de cada nível pode ser verificada na figura 2 abaixo.

Na última linha de unidades funcionais também é ligado aos multiplexadores as saídas do multiplicador e da unidade de acesso à memória. O barramento, então, continua para o próximo nível com os valores atualizados. A organização do array como um todo é verificável na figura 3.

Cada um desses multiplexadores, assim como os bits de operações das unidades funci-onais e da unidade de acesso à memória são controlados por uma sequência de bits gerada por um tradutor binário, que lê um arquivo com instruções assembly e traduz em uma configuração para o acelerador.

Abaixo, na figura 4 temos um exemplo de aplicação representada em grafo de depen-dências. Onde os círculos roxos indicam execução de operações lógicas e aritméticas, os

(23)

22

Figura 2: Nível do Array

losangos verdes indicam operações de acesso à memória e os retângulos azuis representam operações de multiplicação. Os multiplexadores são representados em branco.

É importante destacar a presença de determinadas dependências entre as instruções e, por isso, algumas instruções precisam ser alocadas em unidades funcionais de linhas pos-teriores. Este é o caso, por exemplo das instruções 3) e 6) que dependem, respectivamente das instruções 1) e 5).

Na figura 5 vê-se como se comporta a configuração do acelerador na execução da aplicação acima representada e como ele executaria as nove instruções desta em três

(24)

23

Figura 3: Estrutura do Array

(25)

24

ciclos.

Figura 5: Estrutura do Array

3.3

O tradutor binário

Como já dito anteriormente, o tradutor binário recebe as instruções, indexadas pelo valor do PC e, paralelamente à execução do processador, gera uma configuração para o array. A configuração é armazenada em uma memória de configurações e rotulada com o valor do PC para uso futuro.

A reconfiguração do acelerador é feita através de uma cadeia de bits de configuração gerada através de um algoritmo de tradução binária. O tamanho da cadeia é dependente do número de unidades no array, o que afeta a quantidade de multiplexadores e, assim, ao número de bits de controle necessários. Essa cadeia é dividida para os níveis do array e enviada de forma serial para cada nível em seu correspondente ciclo de execução.

(26)

25

Os bits são analisados e distribuídos em seus respectivos blocos para configurar as entradas, operações e saídas de cada um dos componentes para cada um dos registradores. O algoritmo de tradução binária foi baseado no algoritmo proposto por (BECK; RUT-ZIG; CARRO, 2014), o DIM. Implementado na linguagem de programação Python 3.6, o algoritmo recebe como entrada um arquivo contendo um programa em linguagem assem-bly e escreve, em um arquivo de saída, um conjunto de configurações, uma a cada linha, para que o acelerador execute o devido programa.

O nível do array é configurado como uma classe contendo uma série de estruturas de dados:

• Um dicionário contendo o valor que está armazenado em cada um dos registradores;

• Três matrizes onde cada linha representa uma linha de unidades funcionais. Uma das matrizes guarda valores de entrada para as UFs, outra os valores de saída e a última valores da operação executada por cada UF;

• Duas listas representando as entradas e saídas dos multiplicadores;

• Quatro listas para as unidades de acesso à memória: uma para as operações ("load "ou "store"), uma para o registrador de entrada, uma para o valor do imediato e a última para a saída da unidade;

O array é representado por uma classe composta de uma lista de níveis. É responsável por checar a disponibilidade de todas as unidades do acelerador e retornar qual unidade está disponível para a operação desejada pelo tradutor.

Por último, o tradutor binário em si é representado por uma classe que cria um array com as propriedades necessárias: linhas e colunas de UFs, número de multiplicadores por nível, número de unidades de acesso à memória por nível e quantidade de níveis. Após a criação do acelerador, é possível a leitura de um arquivo contendo um código em assembly para MIPS. O código representa a parte que deverá ser acelerada pelo array.

Ao receber a entrada, o algoritmo lê linha por linha. Ao ler uma linha, ele identifica a operação desejada e tenta alocá-la no array. Por exemplo, caso a operação seja uma soma, o algoritmo verificará se algum dos registradores a serem lidos já estão alocados no acelerador. Caso estejam no multiplicador ou na unidade de acesso à memória, ele passará para o próximo nível. Caso esteja em alguma das unidades funcionais, ele passa para a próxima linha da matriz.

(27)

26

Essa verificação tem como objetivo impedir conflitos por dependência Read-After-Write (RAW) entre os registradores e, ao mesmo tempo, maximizar a paralelização da execução das instruções. Caso o algoritmo não consiga alocar o registrador em nenhuma unidade de nenhum nível ele gerará a bitstream, representando a configuração atual, essa será colocada no arquivo de saída. Então, limpará as unidades e continuará a gerar as configurações, cada uma indexada pelo valor do PC da primeira instrução a ser executada pelo acelerador.

Após terminar ou falhar na tradução das linhas para as estruturas de dados escolhidas, o algoritmo começará a traduzir dessa organização para a cadeia de bits de configuração. A tradução consiste em analisar as estruturas de dados onde está armazenada a con-figuração do array e traduzir da seguinte forma:

1. As entradas das unidades funcionais:

Para cada unidade, verifica os registradores de entrada e traduz em uma palavra representando o número do registrador, por exemplo, para 32 registradores, uma pa-lavra de 5 bits é gerada para cada entrada. Essa será o selecionador do multiplexador correspondente;

2. As operações das unidades funcionais:

Para cada unidade, verifica a operação alocada e traduz em uma palavra de três bits que representa a operação realizada pela UF;

3. As saídas das UFs:

Para cada linha, segue: para cada registrador, verifica se alguma unidade daquela linha escreve no registrador. Caso escreva, o selecionador do multiplexador corres-pondente àquele registrador nesta linha é gerado com uma palavra que representa qual unidade funcional deve escrever nele. Se nenhuma unidade funcional escreve no registrador em questão, ele não possuirá seu valor alterado.

4. Os selecionadores finais:

Para cada registrador verifica se a última instrução para ele é de uma UF, do mul-tiplicador ou da unidade de memória e aloca de acordo;

5. Os entradas dos multiplicadores:

(28)

27

6. Os dados da unidade de acesso à memória:

(a) O registrador que terá o valor do endereço da memória que deverá ser acessado (para escrita ou leitura) é traduzido para uma palavra que será o selecionador do multiplexador da entrada do multiplicador.

(b) A posição a ser somada ao valor supracitado é traduzida para uma palavra de 32 bits, correspondente à operação de extensão de sinal aplicada ao valor do imediato.

(c) O registrador que contém o valor a ser armazenado ou onde se deve armazenar o valor é traduzido em outra palavra de selecionador para um dos multiplexadores finais.

Com a concatenação de todas essas traduções, o algoritmo gera uma palavra que representa a configuração do array para aquelas instruções. A palavra é escrita em um ar-quivo que representará a memória de configuração do acelerador. Assim cada configuração é, depois, analisada pelo acelerador e distribuída para cada componente correspondente.

(29)

28

4

Metodologia e Desenvolvimento

Nesse capítulo serão apresentados os procedimentos metodológicos executados bem como os recursos necessários para a realização do trabalho.

4.1

Procedimentos

A presente pesquisa foi realizada por meio dos seguintes procedimentos metodológicos:

• Pesquisa bibliográfica a respeito do tema em questão identificando vantagens, des-vantagens e diferenças entre os sistemas já implementados e aceitos pela literatura mundial.

• Implementação de um projeto-base na linguagem de descrição de hardware VHDL, possibilitando simulação de sinais bem como a sintetização dos componentes imple-mentados.

• Implementação de um algoritmo de tradução binária baseado em trabalhos anteri-ores (BECK et al., 2008). Feito em software utilizando a linguagem Python em sua versão 3.6.

• Otimizações visando o aumento de desempenho. Utilizando, para isso, a síntese de componentes e analisando os relatórios gerados pelo software Quartus Prime disponibilizado pela Intel e o software Vivado 2018.3 disponibilizado pela Xilinx. • Testes e visualização das simulações de cada experimento utilizando o simulador de

sinais Modelsim, disponibilizado pela Intel.

• Após os testes, são analisados os aspectos de baixo nível como área e atraso em termos de ciclo. Com a síntese do hardware descrito, é possível também encontrar valores de área a serem utilizados pelo sistema.

(30)

29

4.2

Recursos

Para a realização dos procedimentos supracitados, utilizamos os seguintes recursos:

• Computadores com sistema operacional Windows 10 Pro de 64-bits.

• Software Quartus Prime Lite Edition versão 18.0, provido pela Intel.

• Software Modelsim Intel-FPGA Starter Edition versão 18.0 provido pela Intel.

• Software Vivado 2018.3 Web-Pack, provido pela Xilinx.

(31)

30

5

Testes e resultados

No capítulo presente serão apresentados os testes realizados e suas respectivas análises. Os testes foram feitos em aplicações sintéticas geradas de forma aleatória. Cada aplicação possui 32 instruções de assembly e alguma característica simples.

O array implementado possui 3 níveis e cada um é composto por uma matriz de 3 unidades lógicas e aritméticas, 1 unidade de acesso à memória e 1 unidade de multiplica-ção.

5.1

Testes

5.1.1

Benchmarks

As aplicações teste possuem 32 instruções de assembly de MIPS. Todas as instruções das aplicações de teste podem ser executadas no array. Cada aplicação possui um perfil específico, são eles:

• APP01: uma aplicação sem nenhuma dependência de dados e apenas operações de ULAs;

• APP02: uma apenas com operações lógicas e aritméticas onde cada instrução de-pende do resultado da anterior;

• APP03: uma com todos os tipos de instrução sem dependência de dados;

• APP04: utiliza todas as instruções com cada uma dependendo da anterior;

• APP05: totalmente aleatória.

Também está descrito o perfil de cada aplicação de forma detalhada na tabela 1. Abaixo seguem imagens dos grafos de execução dessas aplicações.

(32)

31

Tabela 1: Perfil das aplicações Aplicação Operações em ULA Operações de multiplicação Operações de Memória Perfil

APP01 32 0 0 Sem dependência de dados entre as operações

APP02 32 0 0 Cada operação

depende da anterior APP03 8 10 14 Sem dependência de

dados entre as operações

APP04 8 6 18 Cada operação

depende da anterior APP05 12 11 9 Completamente aleatória

Figura 6: APP01: Apenas UFs paralelas

Figura 7: APP02: Apenas UFs sequenciais

(33)

32

Figura 9: APP04: Todas as unidades sequenciais

(34)

33

5.1.2

Resultados

Em uma aplicação ideal, o acelerador poderia executar até 33 instruções a cada 3 ciclos, um aumento de 11x na performance da CPU. Porém, para isso, teríamos de ter 27 operações lógicas e aritméticas paralelas, três multiplicações e três instruções de acesso a memória, todas independentes entre si.

Como esse exemplo foi criado de forma sintética, a fim de explorar ao máximo as capacidades de paralelismo da arquitetura do acelerador, temos, na tabela 2 abaixo, os resultados para as aplicações acima, geradas aleatoriamente.

Tabela 2: Resultados de aceleração Ciclos

sem array

Ciclos

com Array Aceleração

APP01 32 6 5.33x

APP02 32 12 2.66x

APP03 32 16 2x

APP04 32 31 0.03x

APP05 32 16 2x

A aplicação APP01 leva seis ciclos pois todas as operações são alocadas em unidades funcionais de forma paralela, sendo assim, executa até 9 instruções por ciclo. Já a APP02 aloca as unidades funcionais todas em sequência, executando até 3 operações por ciclo.

A APP03 poderia, no máximo, executar 11 instruções em um ciclo, mas devido ao número de unidades de acesso à memória e multiplicadores, pode ocorrer de executar apenas 1 por ciclo, por exemplo quando três multiplicações são alocadas em sequência, mesmo que não haja dependência de dados, cada uma será executada em um ciclo.

A APP04 tem o menor grau de paralelismo possível pois cada ciclo executaria no máximo 3 instruções, que seriam apenas lógicas e aritméticas. Porém colocando instruções de acesso à memória e multiplicação, cada uma dessas teria de executada em um ciclo separado.

Já a APP05 é completamente aleatória, podendo executar de 11 a 1 instrução por ciclo. Pela quantidade de unidades do acelerador, alguns ciclos terão dependências entre si ou a unidade necessária, mesmo que sem dependência, já estará ocupada. Abaixo podemos ver a forma de onda da simulação da execução da APP05.

A forma de onda da figura 11 mostra a execução da APP05 em seus 16 ciclos, o necessário para executar completamente todas as configurações da cache de configurações.

(35)

34

Figura 11: Forma de onda da APP05

5.2

Área e Frequência

Os dados abaixo foram retirados dos softwares Vivado 2018.3 da Xilinx e Quartus Prime Lite Edition 18.1 da Intel. O projeto foi implementado em uma placa xcku035-ffva1156-1LV-i da Xilinx e em uma Cyclone V 5CGXFC9E7F35C8 da Intel.

As placas foram escolhidas por conter um alto número de portas I/O, em relação às placas da versão gratuita do software. Abaixo, na tabela 3, vemos a quantidade de Look up Tables, FlipFlops e DSPs separadas por unidade.

Tabela 3: Resultados de Área por bloco Unidade LUTs FlipFlops DSPs

ULA 63 0 0

Multiplicador 15 0 3 Multiplexador 32 0 0 Nível 13747 0 3 Array 42563 12601 9

Para a placa da Xilinx, o programa nos apresenta uma frequência máxima de 57,803 MHz. Já para a placa da Intel, o software nos dá as frequências de 34,230 MHz para o modelo mais lento e 70,130 MHz para o modelo mais rápido.

(36)

35

6

Considerações finais

O presente trabalho apresentou uma pesquisa sobre diferentes formas de implemen-tação de aceleradores de arquitetura reconfigurável. Dentre elas, podemos notar diversas características diferentes, como o nível de acoplamento, granularidade e tradução binária estática ou dinâmica.

Baseando-se em um dos trabalhos pesquisados, foi desenvolvida uma implementação própria de um array de arquitetura reconfigurável para funcionar fortemente acoplado a um processador de propósito geral. Vimos que em situação ótima o acelerador implemen-tado pode acelerar em até onze vezes a performance do processador. Entretanto como aplicações reais possuem dependências de dados entre suas instruções os testes foram feitos em aplicações sintéticas geradas aleatoriamente. Nestes vemos que foi obtida uma aceleração de 2.46x em média, com um pico de 5.33x.

Obtivemos também o resultado de que a frequência necessária para o funcionamento do acelerador pode ser de 34,230 MHz até 70,130 MHz. Essa frequência é mais baixa do que a da maior parte dos processadores atuais e inclusive do MIPS R10000. Isso significa que podemos utilizar o acelerador sem aumento da frequência do processador, evitando uma maior dissipação de potência.

Para trabalhos futuros é vamos implementar uma versão mais complexa do array, explorando ainda mais o paralelismo do mesmo. Explorar outras configurações, aplicando mais linhas de UFs para cada unidade de acesso à memória. Ver a diferença do tempo de execução entre UFs e multiplicadores. Também é interessante fazer um teste físico descendo ainda mais o nível e acoplando-o a um processador real.

Além do mais, serão executados benchmarks mais conhecidos, diferentes de aplicações sintéticas.

(37)

36

Referências

AMDAHL, G. M. [acm press the april 1820, 1967, spring joint computer conference -atlantic city, new jersey (1967.04.18-1967.04.20)] proceedings of the april 18-20, 1967, spring joint computer conference on - afips ’67 (spring) - validity of the single processor approach to achieving large scale computing capabilities. In: . [s.n.], 1967. Disponível em: <http://gen.lib.rus.ec/scimag/index.php?s=10.1145/1465482.1465560>.

BAE INPYO; HARRIS, B. M. H. E. B. Auto-tuning cnns for coarse-grained reconfigurable array-based accelerators. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, IEEE, 2018. Disponível em: <http://gen.lib.rus.ec/scimag/index.php?s=10.1109/TCAD.2018.2857278>.

BECK, A. C. S. Transparent reconfigurable architecture for heterogeneous applications. Tese (Doutorado) — Universidade Federal do Rio Grande do Sul, 2008.

BECK, A. C. S.; RUTZIG, M. B.; CARRO, L. A transparent and adaptive reconfigurable system. Microprocessors and Microsystems, Elsevier, v. 38, n. 5, p. 509–524, 2014. BECK, A. C. S. et al. Transparent reconfigurable acceleration for heterogeneous embedded applications. In: IEEE. Design, Automation and Test in Europe, 2008. DATE’08. [S.l.], 2008. p. 1208–1213.

BRANDALERO MARCELO; BECK, A. C. S. Potential analysis of a superscalar core employing a reconfigurable array for improving instruction-level parallelism. Design Au-tomation for Embedded Systems, Springer US, v. 20, 6 2016.

CIFUENTES, C.; MALHOTRA, V. Binary translation: static, dynamic, retargetable? In: 1996 Proceedings of International Conference on Software Maintenance. [S.l.: s.n.], 1996. p. 340–349. ISSN 1063-6773.

COMPTON KATHERINE; HAUCK, S. Reconfigurable computing: a survey of systems and software. ACM Computing Surveys, Association for Computing Machinery, v. 34, 6 2002.

DEHON, A. Dpga-coupled microprocessors: Commodity ics for the early 21st century. In: IEEE. FPGAs for Custom Computing Machines, 1994. Proceedings. IEEE Workshop on. [S.l.], 1994. p. 31–39.

ESTRIN, G. Organization of computer systems: the fixed plus variable structure com-puter. In: ACM. Papers presented at the May 3-5, 1960, western joint IRE-AIEE-ACM computer conference. [S.l.], 1960. p. 33–40.

FENG, . L. Y. C. [ieee 2013 international conference on mechatronic sciences, electric en-gineering and computer (mec) - shengyang, china (2013.12.20-2013.12.22)] proceedings

(38)

37

2013 international conference on mechatronic sciences, electric engineering and com-puter (mec) - design and evaluation of a novel reconfigurable alu based on fpga. In: . [s.n.], 2013. ISBN 978-1-4799-2565-0,978-1-4799-2564-3,978-1-4799-2563-6,. Disponível em: <http://gen.lib.rus.ec/scimag/index.php?s=10.1109/mec.2013.6885424>.

FLYNN M.J.; HUNG, P. Microprocessor design issues: thoughts on the road ahead. IEEE Micro, IEEE, v. 25, 2005.

FONTANA, R. E.; DECAD, G. M. Moore’s law realities for recording systems and memory storage components: Hdd, tape, nand, and optical. AIP Advances, v. 8, n. 5, p. 056506, 2018. Disponível em: <https://doi.org/10.1063/1.5007621>.

HANNIG, F. et al. System integration of tightly-coupled processor arrays using reconfigu-rable buffer structures. In: Proceedings of the ACM International Conference on Compu-ting Frontiers. New York, NY, USA: ACM, 2013. (CF ’13), p. 2:1–2:4. ISBN 978-1-4503-2053-5. Disponível em: <http://doi.acm.org/10.1145/2482767.2482770>.

HARTENSTEIN, R. A decade of reconfigurable computing: A visionary retrospective. In: Proceedings of the Conference on Design, Automation and Test in Europe. Piscataway, NJ, USA: IEEE Press, 2001. (DATE ’01), p. 642–649. ISBN 0-7695-0993-2. Disponível em: <http://dl.acm.org/citation.cfm?id=367072.367839>.

HARTENSTEIN, R.; KAISERSLAUTERN, T. Basics of reconfigurable computing. In: . Designing Embedded Processors: A Low Power Perspective. Dordrecht: Springer Netherlands, 2007. p. 451–501. ISBN 978-1-4020-5869-1. Disponível em: <https://doi.org/10.1007/978-1-4020-5869-1_20>.

HAUSER, J. R.; WAWRZYNEK, J. Garp: A mips processor with a reconfigurable copro-cessor. In: IEEE. Field-Programmable Custom Computing Machines, 1997. Proceedings., The 5th Annual IEEE Symposium on. [S.l.], 1997. p. 12–21.

JRIDI MAHER; ALFALOU, A. M. P. K. A generalized algorithm and reconfigurable architecture for efficient and scalable orthogonal approximation of dct. IEEE Transactions on Circuits and Systems I: Regular Papers, v. 62, 2 2015.

KACHRIS, C.; SOUDRIS, D. A survey on reconfigurable accelerators for cloud computing. In: 2016 26th International Conference on Field Programmable Logic and Applications (FPL). [S.l.: s.n.], 2016. p. 1–10. ISSN 1946-1488.

KIM N.S.; AUSTIN, T. B. D. M. T. F. K. H. J. I. M. K. M. N. V. Leakage current: Moore’s law meets static power. Computer, IEEE, v. 36, 2003.

KUMAR, S. Fundamental limits to moore’s law. arXiv preprint arXiv:1511.05956, 2015. KUMAR SANTOSH; MANIKANDAN, J. A. V. K. [ieee 2017 international conference on advances in computing, communications and informatics (icacci) - udupi (2017.9.13-2017.9.16)] 2017 international conference on advances in computing, communications and informatics (icacci) - hardware implementation of support vector machine classifier using reconfigurable architecture. In: . [S.l.: s.n.], 2017. ISBN 978-1-5090-6367-3.

(39)

38

PAEK JONG KYUNG; CHOI, K. L. J. Binary acceleration using coarse-grained reconfigurable architecture. ACM SIGARCH Computer Architecture News, Association for Computing Machinery, v. 38, 01 2011. Disponível em: <http://gen.lib.rus.ec/scimag/index.php?s=10.1145/1926367.1926374>.

PRABHAKAR RAGHU; ZHANG, Y. K. D. F. M. Z. T. H. S. P. A. K. C. O. K. Plasticine: A reconfigurable accelerator for parallel patterns. IEEE Micro, IEEE, v. 38, 5 2018. Dis-ponível em: <http://gen.lib.rus.ec/scimag/index.php?s=10.1109/MM.2018.032271058>. RAZDAN, R.; SMITH, M. D. A high-performance microarchitecture with hardware-programmable functional units. In: ACM. Proceedings of the 27th annual international symposium on Microarchitecture. [S.l.], 1994. p. 172–180.

SINGH H.; MING-HAU LEE; GUANGMING LU; KURDAHI, F. B. N. C. F. E. Morphosys: an integrated reconfigurable system for data-parallel and computation-intensive applications. IEEE Transactions on Computers, IEEE, v. 49, 2000. Disponível em: <http://gen.lib.rus.ec/scimag/index.php?s=10.1109/12.859540>.

SITES, R. L. et al. Binary translation. Digital Technical Journal, DIGITAL EQUIPMENT CORP, v. 4, p. 137–137, 1993.

Tekleyohannes, M. K. et al. A reconfigurable accelerator for morphological operations. In: 2018 IEEE International Parallel and Distributed Processing Symposium Workshops (IPDPSW). [S.l.: s.n.], 2018. p. 186–193.

THOMPSON S.E.; CHAU, R. G. T. M. K. T. S. B. M. In search of “forever,” conti-nued transistor scaling one new material at a time. IEEE Transactions on Semiconductor Manufacturing, IEEE, v. 18, 02 2005.

WALL, D. W. [acm press the fourth international conference - santa clara, california, united states (1991.04.08-1991.04.11)] proceedings of the fourth international conference on architectural support for programming languages and operating systems asplosiv -limits of instruction-level parallelism. In: . [S.l.: s.n.], 1991. ISBN 0897913809.

YUN, Z. et al. Design of reconfigurable array processor for multimedia application. Mul-timedia Tools and Applications, v. 77, n. 3, p. 3639–3657, Feb 2018. ISSN 1573-7721. Disponível em: <https://doi.org/10.1007/s11042-017-5284-7>.

Referências

Documentos relacionados

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

2016: SEMINÁRIO EM ANTA GORDA: INÍCIO DO PLEITO PARA CÂMARA SETORIAL E PROGRAMA Seminário e reuniões na SEAPI para construção.. do

◦ Os filtros FIR implementados através de estruturas não recursivas têm menor propagação de erros. ◦ Ruído de quantificação inerente a

(2014) através da World Values Survey. A preocupação com o meio ambiente, bem como a pouca importância dada ao “ter” são características dos que tendem a

Os candidatos reclassificados deverão cumprir os mesmos procedimentos estabelecidos nos subitens 5.1.1, 5.1.1.1, e 5.1.2 deste Edital, no período de 15 e 16 de junho de 2021,

Desta maneira, observando a figura 2A e 2C para os genótipos 6 e 8, nota-se que os valores de captura da energia luminosa (TRo/RC) são maiores que o de absorção (ABS/RC) e

- Se o estagiário, ou alguém com contacto direto, tiver sintomas sugestivos de infeção respiratória (febre, tosse, expetoração e/ou falta de ar) NÃO DEVE frequentar

Diante das consequências provocadas pelas intempé- ries climáticas sobre a oferta de cana-de-açúcar para a indústria, a tendência natural é que a produção seja inferior