• Nenhum resultado encontrado

OSUIF Compiler System [ADH+00a,WFW+94] ´e uma referˆencia incontorn´avel para este doutoramento. Mais do que um sistema para desenvolvimento de compiladores, o SUIF System ´e um verdadeiro laborat´orio atrav´es do qual se pode pˆor em pr´atica e testar novas ideias. Ali´as, o seu principal objectivo ´e disponibilizar uma infra-estrutura para investiga¸c˜ao de t´ecnicas de compila¸c˜ao para arquitecturas de elevado desempenho.

Os recursos que envolve s˜ao tamb´em muito significativos. Foi um projecto financiado pela DARPA, pela NSF e por v´arios organismos privados, incluindo algumas empresas de renome, como ´e o caso da IBM e Intel.

´

E tamb´em um projecto com uma dinˆamica ´ımpar, que envolve alguns dos mais impor- tantes investigadores desta ´area cient´ıfica, como ´e o caso do John Hennessy e Steve Tjiang (do projecto Sharlit [TH92]), Monica Lam (com imenso trabalho realizado em t´ecnicas de compila¸c˜ao para arquitecturas de elevado desempenho), e muitos outros.

Possui tamb´em uma comunidade de utilizadores invej´avel e extremamente activa, ha- vendo bons motivos para que tal aconte¸ca:

• Em primeiro lugar, e apesar de n˜ao ser um sistema para todo o tipo de utilizadores (como ali´as assumem os autores deste sistema), disponibiliza um conjunto muito v´alido de recursos para investiga¸c˜ao e desenvolvimento de novas solu¸c˜oes de compila¸c˜ao, desde as transforma¸c˜oes de alto n´ıvel at´e `as convencionais optimiza¸c˜oes de fluxo de dados; • Em segundo lugar, porque o SUIF System disponibiliza um n´umero consider´avel de

solu¸c˜oes, que incluem:

– Front-ends para Fortran, C, C++ e Java (os dois ´ultimos ainda em fase de desen- volvimento);

– Back-ends para processadores da fam´ılia Alpha, x86, MIPS e para linguagem C; – Um conjunto bastante diversificado e numeroso de solu¸c˜oes de an´alise e opti-

miza¸c˜ao de c´odigo para arquitecturas escal´aveis, incluindo v´arias optimiza¸c˜oes intra-procedimentais;

– Solu¸c˜oes para paralelizar c´odigo, que incluem diversas formas de: an´alise que visam facilitar a detec¸c˜ao de paralelismo; e transforma¸c˜oes que visam potenciar o n´umero de situa¸c˜oes em que ´e poss´ıvel paralelizar o c´odigo;

– Um modelo de RIC bastante poderoso e flex´ıvel, que contempla variantes para a implementa¸c˜ao de optimiza¸c˜oes de baixo n´ıvel (o MachSUIF) e para optimiza¸c˜oes que sejam especificas de paradigmas orientados por objectos (o OSUIF);

2.8. SUIF Compiler System 25

– Ferramentas de verifica¸c˜ao de consistˆencia, visualiza¸c˜ao e de navega¸c˜ao da RIC (que facilitam a detec¸c˜ao de erros de origem semˆantica);

– Um kernel e um driver que visam facilitar a gest˜ao, reutiliza¸c˜ao e partilha das solu¸c˜oes.

Para l´a dos aspectos quantitativos, o SUIF System caracteriza-se por ser uma fra- mework que faz uso de um modelo central de RIC (o SUIF), que define um conjunto base de primitivas para manusear a RIC e que, ao contr´ario do que acontece no RTL System (ver Sec¸c˜ao 2.7), faz uma separa¸c˜ao clara entre RIC e rotinas que implementam as tarefas de compila¸c˜ao.

O modelo de RIC est´a tamb´em implementado com uma linguagem orientada por objec- tos (o C++). Difere no entanto do RTL System e da solu¸c˜ao utilizada neste doutoramento, na forma como o faz. O SUIF ´e uma representa¸c˜ao muito parecida com uma ´arvore de sin- taxe, que ´e no entanto independente da linguagem fonte. Esta diferen¸ca faz-se notar, por exemplo, na representa¸c˜ao das estruturas de controlo: ´e que enquanto no SUIF ´e poss´ıvel representar explicitamente estruturas de alto n´ıvel, como ciclos e express˜oes condicionais; j´a no RTL System (e tamb´em no sistema utilizado na prepara¸c˜ao desta disserta¸c˜ao) este tipo de estruturas est˜ao implicitamente representadas no GFC6. Isto coloca o SUIF, em termos de capacidade semˆantica, acima do modelo utilizado no RTL System (e tamb´em do modelo proposto nesta disserta¸c˜ao), que como ´e demonstrado no Cap´ıtulo4 tem as suas vantagens, mas tamb´em algumas desvantagens.

´

E tamb´em importante assinalar que o SUIF difere do modelo convencional de uma ´

arvore de sintaxe, no sentido que disponibiliza uma s´erie de funcionalidades que advˆem do facto de ser implementado em C++. Por exemplo, define: iteradores7, visitantes8 e mecanismos de replica¸c˜ao9.

Um outro aspecto em que SUIF System difere de todos os outros sistemas, est´a na forma como as tarefas s˜ao implementadas e reutilizadas. Cada tarefa ´e implementada como se fosse um programa isolado, a que designaremos por componente10, que obedece a uma API definida pela framework. Inicialmente, a RIC transitava entre componentes atrav´es de ficheiros. Apesar desta solu¸c˜ao ter sido desenvolvida conscientemente, a verdade ´e que se traduzia em tempos de compila¸c˜ao excessivamente elevados. Actualmente, com a segunda vers˜ao do SUIF System, j´a ´e poss´ıvel fazer com que a RIC transite entre componentes atrav´es de estruturas de dados em mem´oria.

No entanto, a ´unica forma prevista para que um componente possa transmitir infor- ma¸c˜ao aos demais, ´e actualizando a RIC ou acrescentando-lhe anota¸c˜oes (tipicamente em formato texto). N˜ao h´a outros mecanismos de comunica¸c˜ao entre componentes e ´e mesmo aceite, com alguma naturalidade e indiferen¸ca, a recomputa¸c˜ao integral de informa¸c˜ao que j´a tenha sido apurada em componentes anteriores.

A vers˜ao actual do SUIF System (segunda vers˜ao) ´e tamb´em um excelente trabalho de engenharia de software. Os componentes s˜ao implementados atrav´es de DLLs e obede- cem, conforme j´a foi dito, a uma API. O SUIF System disponibiliza uma shell, designada

6No modelo utilizado pelo RTL System e no modelo proposto nesta disserta¸ao, as estruturas de controlo

s˜ao representadas implicitamente no GFC atrav´es de trˆes tipos de elementos: nodos condicionais, que terminam com uma opera¸c˜ao condicional de salto; nodos simples, que terminam com uma opera¸c˜ao incondicional de salto; e nodos de retorno, que terminam com uma opera¸c˜ao de retorno, normalmente utilizada para representar fim de procedimento.

7Tradu¸ao da palavra inglesa iterators. 8Tradu¸ao da palavra inglesa visitors. 9Tradu¸ao da palavra inglesa cloning.

genericamente por driver (que corresponde `a aplica¸c˜ao suifdriver ), que permite carregar di- namicamente as DLL, colocando os componentes dispon´ıveis para que possam ser utilizados como comando expl´ıcitos (da shell ) ou para que possam ser integrados em compiladores aut´onomos.

Na realidade os pr´oprios comandos nativos da shell s˜ao definidos como componentes que, como tal, implementam a API e que s˜ao carregados automaticamente com a activa¸c˜ao da shell. Estes comandos permitem, por exemplo, incluir ou remover dinamicamente outros componentes, que tenham sido desenvolvidos pelo utilizador ou fa¸cam parte do pr´oprio SUIF System; ou ainda carregar/gravar a RIC de/para ficheiro; ou visualizar o estado da RIC; etc.