O que é Computação Reconfigurável?

Muitas pessoas me questionam o que é CR, já que esse é um campo da computação pouco, digamos, popular. Ao contrário da IA (embora muita gente, infelizmente, tenha uma idéia equivocada e ache que IA esteja totalmente relacionada ao filme homônimo; mas isso é assunto para outro post, e talvez eu não seja a pessoa certa para falar sobre isso), pouca gente conhece a CR. Não sei se posso dizer isso, mas a impressão que tenho é que a maioria das instituições de ensino superior do país, inclusive as que oferecem curso de Engenharia da Computação (o que, na minha humilde opinião, tem mais a ver com CR do que Ciências de Computação) não abordam a Computação Reconfigurável em seus cursos.

Um livro bastante interessante e relativamente atualizado (2007, até onde sei) para os interessados na área e não para o público em geral, é o livro de Christophe Bobda, chamado Introduction to Reconfigurable Computing: Architectures, Algorithms, and Applications. Nesse livro, ele cita várias arquiteturas reconfiguráveis, processo de síntese de circuitos com FPGAs, reconfiguração parcial (mas que, aqui, infelizmente, está com conteúdo defasado) e outras coisas que eu ignorei por serem menos importantes para mim.

CR, é, em termos bastante imprecisos, a capacidade de se mudar o circuito de dentro de um chip. É claro que fisicamente não é isso o que acontece. Na verdade, o que se passa é que os chips são criados de forma com que suas estruturas possam emular diferentes circuitos. Atualmente, a maioria das pesquisas de CR se concentram em utilizar a tecnologia FPGA, que nada mais é do que uma arquitetura que permite que - ressalvando restrições físicas - qualquer circuito possa ser colocado dentro do seu chip.

Mas qual sua utilidade?

Os computadores atuais apresentam processadores de propósito geral, baseados no modelo de von Neumann. Esse modelo permite uma grande flexibilidade na programação ao custo do desempenho. Ou seja, embora hoje a velocidade dos novos processadores comerciais seja espantosa, há, ainda, uma grande degradação nessa velocidade em detrimento da flexibilidade que nos garante que uma grande diversidade de algoritmos possam ser executados nos nossos computadores.

Ainda que haja exceções, a regra é que existe um custo/benefício entre desempenho e flexibilidade. Conforme queremos mais desempenho com a mesma tecnologia de fabricação do chip (e com as mesmas freqüências), as vezes a única opção é sacrificarmos a flexibilidade para criarmos circuitos mais específicos para o tipo de algoritmo que queremos executar. Esse tradeoff acontece, principalmente, porque os caminhos que os dados fazem dentro do chip são aumentados, conforme queremos uma estrutura mais genérica e flexível; o oposto também é verdadeiro: não precisando dessa flexibilidade, alguns caminhos podem ser diminuídos. Embora o tempo em que sinais elétricos percorram o chip seja ridiculamente pequeno (ordem de picosegundos em tecnologias mais rápidas), a constante repetição de instruções pode tornar determinado algoritmo lento, o que faz necessária essa engenharia no circuito.

CRASICGraph.png
Gráfico que mostra a contradição entre desempenho e flexibilidade. Adaptado de [1]

E quando precisamos dos dois? Quando não é possível abrir mão da flexibilidade para ter desempenho? Para isso é que a CR existe: ela tem a proposta de ter o desempenho de chips para execução específica de circuitos com a flexibilidade de processadores de propósito geral. Digo, a "proposta", pois, conforme eu já disse, os circuitos não são realmente modificados no chip, apenas reconfigurados. Dessa forma, um circuito emulado dificilmente terá o mesmo desempenho de um circuito real utilizando a mesma tecnologia. Da mesma forma, a flexibilidade que se tem com esse tipo de hardware ainda não é a mesma que processadores de propósito geral, seja pelas dificuldades práticas de se programar (devido à maior complexidade das linguagens para descrição de hardware) ou seja pelas dificuldades técnicas (tamanho do chip e outras coisas).

Enfim, como não pretendo me aprofundar no assunto aqui, sugiro apenas que dêem uma pesquisada na internet sobre o assunto e recomendo os textos da Wikipédia sobre FPGA e Computação Reconfigurável (em inglês).

Referências e fontes consultadas

[1] Introduction to Reconfigurable Computing: Architectures, Algorithms, and Applications

August 3, 2009 at 7:41pm | 2 Comments
Tagged: and

Bem-vindos! :)

Bem-vindos!

Finalmente, o site está publicável. Ao longo do tempo, alguns ajustes ainda serão feitos. Mas, por hora, vai assim mesmo.

Espero que dê para fazer algo legal aqui. :)

Abraços!

July 28, 2009 at 4:01pm | 0 Comments