Abstract:
RESUMO:O processo de desenvolvimento de hardware e software antes sequencial foi substituído
por um modelo de desenvolvimento concorrente. Isso decorre do contínuo crescimento
da complexidade dos sistemas e do encurtamento da janela de time-to-market. Projetos
de hardware quase sempre resultam em novos paradigmas, bem como na inserção de
instruções não suportados em compiladores convencionais. O objetivo desta dissertação
é apresentar o framework e compilador Cognite, detalhando os recursos disponibilizados
pelas ferramentas. O foco principal deste trabalho é disponibilizar uma infraestrutura que
acelere o desenvolvimento de geradores de código para validação de projetos de hardware.
Um objetivo secundário mas não menos importante consiste na utilização do framework
com fins didáticos. Para verificar a capacidade de geração de código foram realizados
experimentos comparando o código obtido pelo compilador Cognite e as soluções de
compiladores Clang e GCC. Os resultados revelam que apesar da pouca maturidade e
com um conjunto mínimo de otimizações Cognite obteve um bom posicionamento quando
comparado com soluções consolidadas como Clang e GCC, para o conjunto de aplicações
analisado. Os pontos de maior destaque são: a redução da quantidade de operações de load
e store, bem como a melhor utilização dos registradores e memória disponíveis. Acredita-se
que esse trabalho possa impulsionar os estudos nas áreas de hardware/software codesign e
construção de compiladores com foco na exploração de paralelismo em arquiteturas não
convencionais.
ABSTRACT:The development process hardware and software before sequential has been replaced by
a competitor development model. This stems from continued growth the complexity of
the systems and the shortening of the time-to-market window. Hardware projects almost
always result in new paradigms, as well as insertion of instructions not supported in
conventional compilers. The objective of this dissertation is to present the compiler and the
Cognite framework, detailing the resources made available by this tool. The main focus of
this work is to provide an infrastructure that accelerate the development of code generators
for validation of hardware projects. A secondary but not less important objective is to
use the framework for didactic purposes. To verify the capacity of code generation were
performed experiments comparing the code obtained by the Cognite compiler and the
compilers Clang and GCC. The results show that despite the low maturity and with a
minimal set of optimizations Cognite has achieved a good positioning when compared to
consolidated solutions like Clang and GCC, for the set of applications analyzed. The most
important points are: reducing the amount of load and store operations, as well as the
best use of available registers and memory. It is believed that this work can boost the
studies in the areas of codesign hardware / software and construction of compilers focused
on the exploration of parallelism in architectures not conventional