um compilador para a linguagem híbrida de programação ... · c.actus fornece ao programador uma...

14
702 XTII Congresso da Sociedade Brasileira de Computação Um Compilador para a Linguagem Híbrida de Programação Paralela C_Actus L.E. Favrc 1 C. L. de Amorim 1 M.C.R. Carneiro 3 P.M.C.P.F. Maciel 4 RESUMO Neste trabalho é pr oposta uma nova versão da linguagem de programação paralela Actus, na qual é introduzido o concei to de modularizaçào e modificações orientadas para uma maior simp li cidade tanto no processo de compilação como na depuração de programas paralelos além de assegurar uma maior transportabilidade da linguagem para máquinas vetoriais c máquinas MIMO. A implementação do compilador da li nguagem híbrida resultante, denominada. C_Aclus é discutida. ABSTRACT This work proposes a new version for the para.llel programming languagP Actus. in wh ich we introduce the concept of modularizati on and mod ifications intended to achicve simplicity to both cornpiling and dcbugging of parallel programs and lo warrant the language wider porta.bility to veclor processors and MIMO architectures. Th e compiler im1>lement11tion for th<' resulting hybr id languagc. call <' d C.Act us is dis· cusscd. 1 MSc (COPPE - 1992), áreas de i ntcr<'SSI.· : Processamento Paralelo (arquitcLur.,., linguagens de pro- gra mação e compiladores). 2 MSc (COPPE - 1979). PhD ( Imperial f' olle&•· - 1984): :in·as de i nteresse: l'roet 'SSa- oncnlo Parale lo : Professor Adjunto da COI'PE/SisLemas, UF RJ . 3 13Sc ( lust. 1993). árc;'" de iutcr<'SS<': C'ompiladon-s ,. Processamr ut o l'aralclo. 4 MSc (CO I'P E - 1 !191 ). áreas de intc""'-"' : Proct'!iSaluenl o Paralelo (arquitNura s. linguagcus d, pro- gr amação f' rom t>iladorcs) .. <lO ll io olo• Jaowiro <'aixa l 'osl al 685 11 -( l l!l• l'>-! 170 - Rio ol r J aou• iro- l lJ 8mail amorint <1 riu.('O:, .ufrj .hr • E,_.,.. lrahalloo roi parcialmo' lli<' lillall<"iado i ><· ln ("NI'<i <"i><' lo FI NEI'.

Upload: vokhanh

Post on 21-Oct-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

702 XTII Congresso da Sociedade Brasileira de Computação

Um Compilador para a Linguagem Híbrida de Programação Paralela C_Actus

L.E. Favrc 1 C. L. de Amorim 1 M.C.R. Carneiro 3 P.M.C.P.F. Maciel 4

RESUMO

Neste trabalho é proposta uma nova versão da linguagem de programação paralela Actus, na qual é introduzido o conceito de modularizaçào e modificações orientadas para uma maior simplicidade tanto no processo de compilação como na depuração de programas paralelos além de assegurar uma maior transportabilidade da linguagem para máquinas vetoriais c máquinas MIMO.

A implementação do compilador da li nguagem híbrida resultante, denominada. C_Aclus é discutida.

ABSTRACT

This work proposes a new version for the para.llel programming languagP Actus. in which we introduce the concept of modularization and modifications intended to achicve simplicity to both cornpiling and dcbugging of parallel programs and lo warrant the language wider porta.bility to veclor processors and MIMO architectures.

The compiler im1>lement11tion for th<' resulting hybrid languagc. call<'d C.Act us is dis· cusscd.

1 MSc (COPPE - 1992), áreas de intcr<'SSI.· : Processamento Paralelo (arquitcLur.,. , linguagens de pro­gramação e compiladores).

2 MSc (COPPE - 1979). PhD ( Imperial f'olle&•· - 1984): :in·as de interesse: Supercomputação~ l'roet'SSa­oncnlo Parale lo : Professor Adjunto da COI'PE/SisLemas, UF RJ .

3 13Sc ( lust . ~l atemát i ca- 1993). árc;'" de iutc r<'SS<': C'ompiladon-s ,. Processamr uto l'aralclo. 4 MSc (CO I'P E - 1!191 ). á reas de intc""'-"' : Proct'!iSaluenl o Paralelo (arquitNuras. linguagcus d,• pro­

gramação f' romt>iladorcs) ..

('OPI'~:{ tlni\•c rsidade ~hleral <lO ll io olo• Jaowiro <'aixa l'osl al 685 11 - ( · ~: 1' l l!l•l'>-!170 - Rio olr J aou•iro- llJ 8mail amorint <1 riu.('O:, .ufrj .hr

• E,_.,.. lrahalloo roi parcialmo' lli<' lillall<"iado i><·ln ("NI'<i <" i><'lo FI NEI'.

Page 2: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

V Simpósio Brasileiro de Arquitetura de Computadores • Proeessamento de Alto Desempenho 703

1 Introdução

C_Actus representa uma evolução da linguagem e do compilador Actus [1 ]. ambos tendo sido alvo de estudos anteriores [2] [3] [4]. As características introduzidas na linguagem <'

no seu compilador tem o objetivo de permitir o estudo das características desejáveis em uma linguagem de programação paralela, facilitar a introdução de técnicas de otimização envolvendo o paralelismo de controle de dados, e o estudo experimental de adeqüaçào dessas linguagens às a rquiteturas paralelas atuais.

Seu compilador está sendo implementado para gerar código para a~ máquinas paralelas NCPIS [5] e iPSC 860 [6]. Devido às características de C.Actus é possível gerar código para máquinas seqüenciais tais como: estação de trabalho SUN e IBM-PC compatível.

C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o paralelismo de dados existente no programa. Pelo fato do compi· lador gerar código objeto em C [7], são fornecidas ao programador todas as funções existentPs na biblioteca de C, e torna-se possível transportar um programa fonte (em C_Actus) para vários sistemas computacionais <tu~ possuam um compilador C.

Por manter os identificadores utilizados no programa fonte, é possível que o programador utilize os depuradores disponíveis para C na avaliação da correção do programa em C_Actus. O programa pode ser analisado na sua versão seqüencial antes de ser transportado para uma máquina paralela onde os recursos de depuração são mais escassos.

Devido à possibilidade de utilizar funções dos compiladores de C parale lo [8]. o parale­lismo oferecido por C_Actus (paralelismo SIMD) é estendido às arquiteturas Nllf\10.

Atravé~ da documentação da estrutura adotada para a tabela de símbolos e para a repre· sentação intermediária do programa [9], torna-se disponível uma Pstrutura d<' dados adcqüada para uma futura introdução de paralelizadores e otimizadores de código.

Apresentamos inicialmente uma breve descrição dos trabalhos relacionados a ambientes de programação paralela. A seguir as construções paralelas da linguagem Actus são descrita,. Na seção 4, as alterações e acréscimo.s que deram origem a C . .r\ctus são apresentadas c na seção 5 são discutidos aspectos básicos relativos a implementação da linguagem. Pinalmentc, conclusões são extraídas dos resultados obtidos até o presente.

2 Trabalhos Relacionados

Com o desenvolvimento dos processadores vetoriais pipelined ou supercomputadores (séries CRAY e NEC), ao longo dos últimos 20 anos, várias técnicas para se explorar o parale­lismo têm sido usadas. A vetorizaçào automática de programas seqüenciais f. amplamente utilizada até um certo nível de complexidade, após o qual, a interação entre o programador e o vetorizador é imprescindível. Diretivas são comumente fornecidas pelo programadm· ao compilador para guiá-lo no processo de vetorização.

Mais recentemente, com a crescente disseminação de computadorf's paralelos MIM D todo esse conhecimento adquirido tem sido, em parte, reaproveitado. A questão central no pa· ralelismo MIMO é o mapeamento dos dados através da memória distribuída. c novamente' verifica-se que a interação com o programador é indispensável. Vários trabalhos foram dl'scn· volvidos nas áreas de vetorização e paralelizaçào dt> <·ódigo [I O] [l i ] c· muitos dPit>s oric•nl a elos

para a distribuição de dados para máquinas paralelas [12] [l:j] [14]. Estudos recentes de distribuição de dados possu<'lll três enfoques difcrcnt<'~ . No prinwiro.

o compilador gera automáticamentc toda a distribuição dos dados. No segundo, o próprio programador distribui os dados e testa o programa esperando que a distribuição escolhida

Page 3: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

704 XIII Congresso da Sociedade Brasileira de Computação

tenha sido boa. Também no terceiro o programador faz a distribuição mas usa uma ferra­menta auxiliar que lhe mostra a eficiência da sua escolha.

Além desses mecanismos de se gerar programas paralelos baseados em programas seqüen­ciais há ainda linguagens que já expressam paralelismo como Fortran-90 [16), HPF [17}, e Actus. Tanto Forlran-90 como Actus são linguagens que expressam paralelismo temporal ou vetorial. J á o HPF gera programas para máquinas com memória distribuída e com processamento vetorial.

3 A Linguagem A ctus

Actus é uma linguagem de programação paralela baseada na linguagem Pascal [18), e foi projetada para operar em ambientes paralelos síncronos tais como processadores vetoriais e matriciais. Actus fornece uma estrutura de dados e comandos para declarar, acessar e manipu lar dados em paralelo, permitindo ao programador escrever algoritmos paralelos bem estruturados e independentes da máquina alvo.

Adotando uma posição oposta àquela adotada, por exemplo em Fortran-77, onde o pa­ralelismo é extraído exclusivamete pela ação de compiladore~ vetorizadores, Actus fornece ao programador uma notação que lhe permite definir o paralelismo que julgar adequado à solução do problema. Ao compilador Actus cabe traduzir este paralelismo definido pelo usuário no paralelismo físico permitido pela máquina alvo.

3.1 Conceitos Básicos

O Paralelismo na Estrutura de Dados

Os dados que se pretende manipular em paralelo devem ser declarados na forma de arrays. Na linguagem Actus podem srr manipulados em paralelo até duas dimensões desses ar·rays sendo que na declaração dos nr·rttys paralelos. os índices que serão acessados em J>aralelo devem ser declarados como tal. os demais índices sào declarados normalmente. 5

A Ext e nsão de P aralelismo

Denomina-se "extensão de paralelismo~ (edp ) o número de elementos que são opera­dos simultaneamente. Cada dimensão paralela do U7'1'U!J define implicitamente uma. máxima "extensão de paralel ismo~ (edp ). Esta edp ou edps menores podem ser usadas para a ma­nipulação dos dados do army nas expressões e comandos do programa. Quando a.~ variáveis paralelas são usadas em expressões a edp del'f' ser a mesma para todas as variáveis envolvidas na operação.

O Conjunto de Índices

Para permitir o acesso seletivo ou lotai aos f' lementos das variáveis paralelas. Actus utiliza uma construção denominada INDEX. que permite definir um conjunto de valores. Este cor·:unlo contém os índicc•s dos elementos que s<· dc•scja acessar. c pode ser declarado de dois modos distintos. ('aracteri?.ando os seguintes tipos para rstcs t·onjuntos:

I. <'onjunlo t-xplícilo dr índicrs. Na clcclaraçào atribui-se• à variável do tipo lNDEX l'alores <Jne penna1wc·c•m inalterados du rante• loclo o (;'scopo daquela variável INDEX.

5 Em C'_A(' tu:-o lotlos os inclirt~ s:to clt•r lar:ulo.-. da nu~mo fonua.

Page 4: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

V Simpósio Brasileiro de Arquitetwa de Computadores - Protcssamento de Alto Desempenho 705

2. Conjunto redefinível de índices. Na declaração a variável do tipo IND EX assume um t ipo inteiro ( INTEGER, CHAR, ... ), seus valores serão definidos mais tard•·. possivelmente em tempo de execução.

Os conjuntos de índices só podem receber valores inteiros e sua declaração f. feita à semC'­Ihança da declaração das variáveis comuns.

As Constantes Paralelas

É possível declarar identificadores para representar uma seqüê-ncia de valores constantes que possam ser acessados em paralelo.

As constantes paralelas podem ser usadas para atribuir v;~l01·es iniciais aos armys para­lelos ou serem usadas como termos em operações paralelas. Como ocorre com os índices. as constantes paralelas só podem assumir valores inteiros.

3.2 Os Comandos Paralelos

Os comandos paralelos fornecem os meios de manipulação das constantes e variáveis parale­las. Estes comandos têm associado uma edp unidimensional ou bidimcnsional que determina quantos e quais elementos sofrerão a ação dos comandos. Mantendo a estrutura modular da linguagem, cada edp é associada a um bloco que constitui o escopo daquela edp. Todos os comandos inclusos naquele bloco possuirão a mesma edp.

A associação da edp a um bloco de comandos é feita através do comando US ING. que tem a seguinte forma.

USING index-specification DO stalemenl

onde index-specification define a edp válida. para. os comandos d(' slatement. Todos os comandos paralelos devem estar contidos em um comando US lNG. A concentração dos comandos com a mesma. extensão de paralelismo em um mesmo bloco tem por objetivo aumentar a clareza do programa além de facilitar sua implementação e torná-la mais eficiPnt<·.

O Comando de Atribuição

O comando de atribuição, será paralelo quando a v~~riável à esquerda ci(J sinal d•· atribuição for paralela.. Similarmente, o resultado de uma expressão será paralelo, se pelo m('nos um dos termos envolvidos for paralelo. Neste comando todos os elementos (variávei~ e consl.antl's) envolvidos devem ler a mesma edp . esta restrição é também feita para ambos os terntos cl•· uma expressão binária.. O t·esulta.do será escalar, se ambos os Lermos forem escalares.

Para permit ir que um valor escalar possa ser atribuído aos elementos d•· uma variável paralela e que também possa ser manipulado em expressõe-s paralelas. os l'scalares adotam . implicitamente, o valor da edp vigentt·. quando utilizados em um coutando dC' atribuição ou em expressões paralelas. Assim, o valor escalar st·rá replicado <'til tantos ••le tnentos quantos forem o número de índices da edp. Os operadores permitidos nas expressões paralelas são os mesmos ut ilizados nas expressões esc.alar<'s.

Os Comandos Condicionais Paralelos

Actus reconhece dois comandos condicionais: o comando !F l' o ,·ont<utdo <'ASE. s<·ndo que o comando lF pode ter a cláusula ELSE omitida.

IF boolean.expr THEN statemenl IF boolean.exp1· THEN statemenl ELSE slalcmeul

Page 5: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

706 Xlll Congresso da Sociedade Brasileira de Computação

C ASE cxp•· OF case_/abeUisl 1 : sl atemenl; casc_/abeL/ist2 : sl alemenl;

END

Se a expressão de controle do comando lF' for escalar a edp vigente não será a lterada. e os comandos de slalemenl. se forem executados. estarão sob a influência daquela edp. Se a expressão de controle for paralela, a mesma será avaliada segundo a edp atual e seu resultado fornecerá um vetor ou uma grade de va)ores TRUE ou FALSE, que será usada como máscara para a edp atual, gerando uma nova edp a ser usada para os comandos do lF' relativos a cláusula THEN. Para os comandos da clâusula ELSE os valores da máscara são complementados antes de gerar a nova e dp.

Assim <.:omo 110 comando IF. o comando CASE será tratado de forma diferente se a expressão de controle for ou uào paralela. Se a expressão de controle for paralela, a edp vigente será distribuída entre os vârios ramos do comando CASE, cada qual utilizando uma máscara própria. resultado da comparação da expressão com a lista de valores de cada ramo. Cada ramo é executado em seqüência até <1ue todos os ramos do comando CASE tenham sido executados.

O s Comandos Paralelos de Repetição

Os comandos de repetição de Actus são REPEAT, WH lLE e F'OR. Para os comandos REPEAT e WH lLE a expressão boleana de controle pode ser escalar ou paralela. Para o comando FOR a expressão deve ser sempre escalar.

O comando WH lLE tem a seguinte forma:

WHILE boolean_expression DO slafemenl

Se a expressão boleana for escalar os comandos <'m stal ement são executados repetidamente sem alterar o escopo da edp vigente, e portando sob sua influência. Estes comandos são executados sob influência daquela edp enquanto o valor de boolean_c:rpression for TRUE.

Se a expressão boleana for paralela, cada vez que esta expressão for <tvaliada antes de cada iteração, uma nova máscara serâ criada. alterando o valor da edp ativa para aquela iteração.

O comando REPEAT tem a seguinte forma.

REPEAT sf al<me•tls UNTIL boolean_expression

Este comando é uma variação do comando WU lLE e comporta-se exatamente corno aquele com respeito à variação da edp ' ·álida dentro do comando. com a diferença de que a edp i> alterada ao flrn de cada iteração.

O comando FOR tem a seguint e forma.

FOR ,,,,. := Lt/11'1 TO ap1'!. DO slal cmenl

FOR ,.,,. := t.rl'rl DOWNTO u·1n'l. DO 8/alcmenl

~f'sl,. c·oman<lo ,.,,. t' ' .l'/11' ~~o t•sralan•s c• os <·onrauclos de .~la/ r mr n/ sc•mpr'<' atuam soh a edp "i!!,c"lll<• <~llt t•s do <'OIIIilllclo FO H .. \ <'X Ili'<'Ss~o r.r1Jrl defiue o \'alor iuicial d<' vflre a t'Xpressão ' ·"111'2 dPfiuc• o ,·alor fiuill cl<' l'fll '. :\ c·mla iteraç;io o \'alor da ,·ariá\'C'l l'fll' i> innemeuLado 011 dC'Cr<'meutado dt· I. dt•lwndf'udo da d irc•c;ão TO ou DOW~TO cl<'fiuida 110 comaudo. O mímero d<' it<'raçôes é- cakulaclil autes da priu wir<~ iteração c• uào pode ser a.lteraclo pelos com<~ndos ex<'cntados a c·ada il <'raçào.

Page 6: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

V Simpósio Brasileiro de Arquitetura de Computadores. Processamento de Alio Desempenho 707

O Aninhamento dos Comandos P aralelos

Quando um comando paralelo (exclu indo-se o comando de atribuição) faz parte do corpo de outro comando paralelo, se não ocorrer redefinição da edp por um comando USlNG. a edp vigente dentro do novo comando será a edp vigente antes da abertura deste novo comando, alterada pela máscara criada pela expressão de controle do comando. Quando o comando paralelo é fechado a edp vigente passa a ser a que eslava em vigor imediatamente antes deste comando ser aberto.

Deslocamento de Índices

Para permitir uma maior versatilidade no acesso aos elementos de uma variável paralela. dois operadores de deslocamento são oferecidos; o operador SHIFT e o operador ROTATE. Estes operadores aluam sobre o conjunto de índices sem alterar o número de elementos que contem, deslocando-os para a direita ou para a esquerda em um movimento circular (ROTA TE) ou unidirecional (SHIFT). Cria-se assim uma nova edp que permanece contudo compatível com a anterior. Os operadores de deslocamento podem ser usados em qualquer variável paralela, em ambos os lado~ do comando de atribuição.

3.3 Funções e Procedimentos

Actus segue as mesmas regras de Pascal quanto às declarações de funções e procedimentos. bem como de seus parâmetros. O mesmo ocorre para o modo como são chamados nos comandos.

4 As Principais Car act erísticas de C.-Actus

Com base nas experiências adiquiridas em [2], [4] e [3), pequenas modificações, porém sig· nificativas, foram feitas na linguagem Actus. A linguagem Oberon [19] também derivada de Pascal, embora orientada para outrà classe de aplicação serviu de modelo para as carac· terísticas que foram introduzidas em Actus, para facilitar a programação e o processo dt> compilação. Também foi incluída a facilidade do programador ut ilizar funções disponív<>is para a linguagem C e introduzir linhas de comando escritas nessa linguagem.

Passamos a denominar esta linguagem de C..Actus. onde au contrário de Pascal, as let ra, maiúsculas e minúsculas passam a ser diferenciadas, os índices dos ur~·ays iniciam sempre em zero e são sempre do t ipo INTEGER, os tipos sub-range e enumerados de Actus foram eliminados e os comandos RETURN, EXIT e o conceito de módulos introduzidos.

A alteração mais importante foi a dos índices dos arrays. Anteriormente os ajustes feitos pelo compilador para alterar a edp quando indexando a1·rays cujos índices não iniciavam com o mesmo valor implicava em uma grande quantidade de cálculo, diminuindo a eficiência do código gerado para as expressões paralelas. As considerações feitas por Wirth em [19] justificando esta opção são aqui ainda mais consistentes.

A sintaxe para declaração dos arrays é:

ArrayType = AR RAY length {~." length } OF type length = Constb'xpression

Outra alteração importante, considerando a. clareza dos programas, i- a incorporação d<> módulos. Um módulo é uma coleção de declarações de constantes. tipos. variáveis t> proce· dimentos, juntos com uma seqüência. de comandos a serem ext>cutados 110 início da t•xecuçào do programa. Cada módulo forma uma unidade de compilaçao, possuiudo uma lista de·

Page 7: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

708 XIII Congresso da Sociedade Brasileira de Computação

módulos dos quais é cliente. Os identificadores que podem ser exportados (visíveis fora do bloco) devem ser marcados como tal.

4.1 A Linguage m Híbrida C...Actus

Uma característica marcante de C.Actus é a sua ligação com a linguagem C. Além dos programas serem traduzidos para C. é permitido o uso em C.Actus das funções da bibli­oteca de C e da inserção de comandos di retamente em C. Os identificadores utilizados no programa em C . Actus "ão mantidos. 'para permitir o uso de depuradores de C. Contudo devido a existência de algumas diferenças nas regras de escopo das dua.• linguagens alguns ident ificadores são renomeados.

A opção de traduzir o programa fonte para a linguagem C evitará que Actus fique li­mitada a uma 1ínica máquina, como em [2] onde a linguagem OCCAM foi adotada como linguagem intermediária, ou o trabalho de escrever várias versões do compilador, uma para cada máqui na alvo.

Escolheu-se a linguagem C (padrão ANSI) por ser (j unto com Fortran-77) uma das lingua­gens mais utilizada.~ em supercomputadores [20]. C contem uma grande variedade de t ipos de dados, bom conjunto de comandos dP controle de fluxo do programa, pré-processador padrão, várias opções de alocação de memória. comunicação com o ambiente de programação. extensa biblioteca e acesso às características sobre ponto-flutuante da implementação.

Mui ta.~ das construções seqüênciais de C.Actus são bastantes semelhantes às de C, faci­litando a ação do compilador e permitindo que o operador possa analisar o código objeto se necessário durante a depu ração do programa.

Considerando-se a programação numérica e científica e comparando-se C com Fortran-77 [20] têm-se como deficiências de C :

I. Ponteiros que limitam a açào dos otimizadores.

2. Loop ~ror" não pode ser :,nalisado estaticamente, a contagem do número de iterações do loop pode mudar em tempo de execução.

3. Ausência de números complexos.

·1. Variável global informando erro na operação aritimética inibe vetorizaçào ou paraleli­zação do loop.

r\s deficiência.'> <~pontadas no item I podem ser cont ornadas pelo compilador C.Actus im­pondo algumas restrições ilo uso de ponteiros, permitindo quP otimizadores assumam que ponteiros sempre apontam para conjuntos disjuntos. Como o comando FOR em C.Actus não permite il alteração na variável de cont role. a deficiência apontada em 2 não exiMe.

As deficiências apontadas uos itens :3 t' •I não podem S<'r mntomadas utilizando-se nm compilador C padrà(l. ( 'ont lt(lo. todas"'' deficic~ncias conht'ridas ele· C c'l!l.ão sc•ndo c•studada, pelo comit(o X:l.Jll. l (N nn lt·rkal (' Extensions Group) di1 ANSI. ... ilcréscimos t•stào st>ndo considerados para <'liminar t.ais ddi<'iências. ilumentando o suporte de C para programação numér • ..:a <' riPnt ífka. alfm cl•· lllitll t<•r a compatibilidade' c·om o parirão atual.

4.2 Modularidade em C...Actus

Um programa <'111 (.'_Actus pode' S<'r dC'composto <'111 vários módulos. podendo cada módulo ser compilado scparadamC'nt <'. IIm módulo clf'H' c•star l'Ontido t'lll um único arquivo (ver ligm a I ). Os arqui\'os q111' t·onstiluenl <'SS<'S 111Óclulos d<'\'t''ll tc•r dC'sinência cac.

Page 8: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

V Simpósio Brasileiro de Arquitetura de Com puladores • Processamento de AI lo Desempenho

modl.cac

MODULE modl ; IMPORT

mod2, mod3, m := mod4;

I seqüência de l declarações

I BEGIN seqüência de declarações

END modl l

Figura I: Estrutura de um módulo em C..Actus.

709

Qualquer identificador cont ido na seqüência de declarações e não sendo local a nenhum procedimento pode ser exportado. Os identificadores exportados são marcados na declaração com um • se disponíveis para leit ura e escrita e com um - se disponíveis apenas para leitura. Os demais identificadores não são visíveis externamente. É permitido declarar pseudônimos para os módulos importados.

No exemplo a seguir as variáveis b , c e d são importadas dos módulos mod2. mod3 f' mod4. Este através de seu pseudônimo.

a : = mod2 . b + mod3 .c - m.d ;

Durante o processo de compilação é extraido um arqu ivo •. def contendo apenas os identificadores exportáveis, com o respectivos tipos c classe de leitura{f'scrita. O arquivo C terá o mesmo nome do módulo com a desinência alterada para c. Para o exemplo acima o módulo modl . cac após a compilação irá gerar os arquivos modl . c e modl . def. O módulo modl. c terá a seguinte formação, onde as variáveis globais não exportáveis são declaradas como static.

modl.c

I seqüência de variáveis I externas

I seqüência de variáveis globais I

I seqüência de declarações de funções

mod l()

I seqüência dt• comandos I

Figura 2: Estrutura do módulo traduzido pam ('.

Quando um módulo aparece na lista d<· IMPOR'J'. todas as informaçiws ru•n •ssá rias sohn· o mesmo poderão ser buscadas no arqui vo • .def correspondente. Para os módulos <i'"' exportam procedimentos e t ipos de dados SNá t.amhém criado 11111 arqui vo • . h ('OIII<'IIdo suas definições para uso do compilador C .

Page 9: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

71 O XIII Congresso da Sociedade Brasileira de Computação

4.3 O Processo de Compilação

O programa fonte em C-Actus é processado pelo compilador C_Actus 6, gerando um pro­

grama fonte em C. O pmgramador deve informar ao compilador o tipo de máquina alvo. Para uma depuração preliminar da sua correção lógica, desde que não esteja utilizando ne­nhuma função exclusiva da biblioteca de C paralelo, o programa pode ser compilado para rodar em urna máquina seqüencial (por exemplo urna estação Sun). Posteriormente, apó~ a depuração do modelo seqüencial. o programa tornará a ser compilado, gerando código para uma das máquinas paralelas suportada pelo compilador.

O programa objeto deve então ser compilado ou pelo compilador C (padrão UN IX ou ANSI para máquina ~eqüencial) ou C paralelo para as máquinas NCPIS e iPSC 860.

No código objeto em C, tanto os identificadores corno a estrutura do programa mantém uma certa semelhança com o programa fonte (em C-Actus). Isto é uma vantagem durante o processo de depuração do programa, onde eventuais mensagens de erro geradas pelo com­pilador C poderão ser analisadas pelo programador.

Dife renças nas R egras de Escopo

Em C-Actus as variáveis importadas são qualificadas pelo nome do módulo a que per­tencem, permitindo que identificadores homônimos de módulos distintos possam ser impor­tados por um mesmo módulo. Por exemplo modl. val c mod2. val .

Como em C os identificadores são importados sem menção ao módulo (arquivo) a que pertencem, todos os identificadores em C_Actus marcados como visíveis Pxternamente ao módulo. para evitar conflitos, recebem outro nome em C. O novo nome é formado pela concatenação do caracter "_" com o nome do módulo c o nonw do identificador.

Outra possibilidade de conflito ocorre (Om o nome dos procedimentos. Como em C todos os procedimentos (funções no jargão de C) são visíveis dentro do módulo a que p(•rtencem, procedimentos homôni mos em C_l\ctus (contidas em blocos diferentes ) devem também ser renomeados.

Um problema inverso ocorre com os identificadores que são visíveis por procedimentos declarados dentro de outros procedimentos. Em C todos os identificadores declarados dentro de uma função não são visíveis fora dela. Para contornar esse problema. na tradução para C os identificadores internos a um procedimento A utilizados por uma procedinwnto B. são acrescentados à lista dos parâmetros de B.

P a lavras reservadas

Além das palavras reservadas de Actus. o programador não deve utilizar as palavras rese: vadas de C . Seria possível alterar o nome de todos os identificadores que utilizassem uma destas palavras aumentando o grau de liberdade do programador ao nomear seus iden­tificadores mas aumentando a complexidade do compilador.

5 A Implementação de C _Actus

As construções paralelas de C-Actus além de aumentar a clareza do programa, c foruccer uma notação mais compacta na qual o programador possa escrever seus algoritmos, devem permitir que o compilador possa gerar código eficiente explorando ao máximo os recursos da máquina alvo.

As máquinas alvo inicialmente <'scolhidas para C..Actus não estão na mesma classe para as quais Actus foi projetada (Array e Vector processo,·s). Ainda está em aberto a questão

60 compilador também é escrito em C.

Page 10: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

V Simpósio Brasileiro <!e Arquitetura de Computadores- Processamento de Alto Desempenho 711

de como serão tratadas pelo compilador as construções paralelas, se serão necessárias mais alterações na linguagem, e qual o nível interferência a ser feita pelos otimizadores.

Para permitir que C.Actus possa ser utilizado em várias áreas de pesquisas e que al­terações e acréscimos à linguagem possam ser implementados e avaliados mais rapidamente, esforços têm sido feitos para fornecer um bom nível de documentação do compilador.

A árvore sintática construída durante o processo de compilação, e que eventualmente será alterada pelos otimizadores pode ser examinada na sua totalidade ou em pontos es­pecíficos, colocando-se diretivas no texto do programa fonte, numa tentativa de facilitar a implementação e depuração dos otimizadores. Isto é ainda mais significativo porque várias técnicas compátiveis ou não, devem ser avaliadas.

Inicialmente será oferecida uma linguagem cuja notação paralela é traduzida em um programa seqüencial, que pode eventualmente sofrer algum tipo de otimização pelos compi­ladores C . Por permitir acesso às funções de C, um programa em C.Actus, em um ambiente que disponha de um compilador C paralelo, pode incorporar características, tais como: alocação de processadores, distribuição de dados e troca de mensagens entre processos, que o tornam adeqüado a ambientes de programação MIMO, além do SIMD para o qual foi originalmente concebida.

Como em Actus, C.Actus limita a dois o número de dimensões que podem ser execu­tadas em paralelo. Contudo este valor pode ser aumentado se durante a fase de avaliação e teste constatar-se que dimensões maiores se fazem necessárias e podem ser eficientemente implementadas.

Os programas C..Actus que não contenham chamadas de funções exclusivas à biblioteca de C paralelo podem ser executados em máquinas seqüênciais, como em uma estação SUN, com grandes recursos para auxílio na depuração de programas. A seguir apresentamos sucintamente como são traduzidas algumas das contruções paralelas de C.Actus. Como o resultado alcançado em uma execução seqüencial é o correto, todas as versões paralelas do programa devem alcançar o mesmp resultado, fornecendo assim um bom ambiente para implementação e teste das técnicas de paralelização de código.

O Comando USING

O código seqüencial em C é na turalmente mais extenso, perdendo muito da simplicidade original. Mostramos abaixo exemplos de tradução de vários comandos de C.Actus para C . Para maior clareza, esses exemplos são apresentados na sua forma mais simples sem ter sido feita nenhuma otimização.

Um comando USING é decomposto em um comando for , onde a cada iteração é avaliado os elementos relativos a um dos índices. Havendo dependência de dados entre comandos, para manter a semântica correta, será necessário separar o loop em vários comandos for.

VAR A,B: ARRAY 100 OF INTEGER; VAR C,D : ARRAY 100 OF REAL;

USING IS1 : = 8:[2]80 DO BEGIN

A[IS1] := B[IS1] • 2; C[IS1] := D[IS1] - B[ISl]; B[IS1] : = A[IS1];

END

(• PROGRAMA EM C_ACTUS •)

Page 11: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

712 Xlll Congresso da Sociedade Brasileira de Computação

for(i=8;i<80;i+=2;) {

A[i] B[i) * 2; C [i] O [i] - B [i] ;

}

for(i=O;i<80;i+=2) {

B[i] = A[i); }

Os Deslocamentos de Índices

I• programa em C •I

As operações de SHIFT com os índices consistem em somar ou subtrair do índice o valor do deslocamento. As operações de ROTATE são um pouco mais trabalhosas pois há. a necessidade de verificar se o índice ultrapassou seu limite inferior ou superior e fazer o ajuste necessário.

USING ISl := 8:[2]80 DO (*PROGRAMA EM C_ACTUS *) A[ISl SHIFT 3] := B[IS SHIFT -4] * 2; C[ISl ROTATE 5] := D[IS1 SHIFT 3] - B[ISl ROTATE-7];

for (i=8;i<80;i+=2) {

I• programa em C •I

A[i+3] = B[i-4] * 2; C[(i+5)'l.100] = O[i+3]- B[(i+93)'l.100];

}

O Comando IF

Para cada comando IF é uecessário associar-se um array temporário para formar uma máscara que definirá que índices da edp serão utilizados nas cláusulas THEN e ELSE. Essa máscara terá a dimensão do comando USING ativo.

USING 15 :=0 :[3]70, JS:=5 :40 DO (* PROGRAMA EM C_ACTUS •) IF AA[IS,JS] >= 0.0 THEN

BB[IS,JS] := BB[IS,JS] - 0.5; ELSE

BB[IS,JS] := BB[IS, JS] + 0.5;

for(i=O;i<70;i+=3) I• programa em C •I for(j=5;j<40;j+=1)

temp(i][j] = AA[i][j] >= 0.0; for(i=O;i<70;i+=3)

for(j=5;j<40;j+=1) ; ~(temp(i] (j]==TRUE)

BB[i](j] BB[i](j]- 0.5; else

BB[i](j ] BB[i][j] + 0.5;

Page 12: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

V Simpósio Brasileiro de ArquitetUlll de Computadores - Proc:essamento de Alto Desempenho 713

O Comando WHILE

Assim como no comando FOR, um array temporário deve servir de máscara para definir que índices da edp estarão ativos a cada iteração do comando WHlLE. Note que a cada iteração o tamanho da edp nunca aumenta. A função any retorna TRUE se algum elemento do array for TRUE.

WHILE AA[IS , JS] >= O DO (* PROGRAMA EM C_ACTUS •) BEGIN

BB[IS,JS] : = BB[IS,JS] + BB[IS , JS] * AA[IS,JS] ; AA[IS,JS] := AA[IS,JS] - 4;

END

for(i=O;i<70;i+=1) I• programa em C •I for(j=O;j<40;j+=1)

temp(i](j] = FALSE; for (i=O ; i<70;i+=3)

for(j 2 5;j<40 ; j+=1) temp [i] [j] = AA [i] [j] >= O;

while (any (temp,69,39)) {

}

for(i=O;i<70;i+=3) for ( j=5 ; j<40 ; j+=1) {

}

BB (i] [j] AA [ i ] [j]

BB [i] [j] + BB (i] [j] * AA [ i ] (j] ; AA[i] (j] 4;

for (i=O;i<70 ;i+=3) for(j=5;j<40;j+=1)

i f (temp[i][j] == TRUE ) temp [i] [j] = AA [i] [j] >= O;

6 Conclusão O projeto de C-Actus consiste no desenvolvimento conjugado de uma linguagem de pro­gramação paralela, do seu compilador, e do estudo de técnicas de otimização de código. Programas reais (atualmente escritos em FORTRAN) serão escritos em C-Actus para veri­ficar a adeqüação e desempenho da linguagem. As características da linguagem poderà.o ser reavaliadas durante os trabalhos e alterações feit as tanto na linguagem como no compilador.

Dois outros pontos importantes são a portabilidade entre máquinas e a facilidade de se testar programas com paralelismo vetorial executando-se a sua versão seqüencial.

Por gerar código em C e permitir que comandos de C possam ser enxertados nos pro­gramas em C_Actus, todas as funções disponíveis para C podem ser acessadas. Assim testes de desempenho poderão ser feitos nas várias máquinas disponíveis, utilizando-se a versão preliminar do compilador permitindo uma maior agilidade na sua avaliação e al teraçdO.

Ao paralelismo SIMD de C_Actus é acrescido o paralelismo MIMO de C paralelo, ofP­recendo aos otimizadores uma maior gama de opções e acesso aos recursos das máquinas alvo.

Page 13: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

714 XIII Congresso da Sociedade Brasileira de Computação

Procura-se facilitar e incentivar o acesso de mais pesquisadores ao projeto através de uma boa· documentação do compilador e ferramentas que permitam visualizar e alterar sua representação intermediária.

Uma versão operacional do compilador está sendo concluída e testada.

Referências

[I] Perrot, R.H., Lyttle, R.W., e Dhillon., P.S. , "The Design and lmplemcntation of a Pascal-Based Language for Array Processor Architetures", Journal o f Parai/e/ and Dis­lr·itttlell Com7mting, 4 ( 1987}, 266-287.

[2] Sales, C.L., ''Projeto c Implementação ele uma Linguagem Intermediária para Tr·ans­puter" , Tes( M.Sc. Et~gct~lwria de Sistemas e Computação. COPPE /UFRJ, 1990.

[3] Maciel. P.M.C. P.F. , "Otimização de Programas Actus", Tese M.Sc. Engenharia de Sis­temas c Co'''llulaçào. GOPPE /UFRJ, 1991.

[4] Pavre, L. E .. '·Um Compilador para a Linguagem de Programação Paralela Actus", Tese M.Sc Engenhm·ia de Sistemas e Computaçào, COPPE /UFRJ , 1992.

[5] Amorim, C.L. , Citro, R., Souza, A.F., Chaves Filho, E.M., "The NCPI Parallel Com­puter System". Thecnical Repm·l ES-2.{ 1/ 199/ , Apr·il.

[6] "i860r M 64-bit Microprocessor Hardware Reference Manual", Intel Corporation.

[7] B.W. 1\ernighan and D.M. Ritchie, "The C Programming Language'' , (2nd ed) Prentice Hall , 1988.

[8] "Helios C Manual", Periehelion Software Limited , 1989.

[9] Carnei ro, M.C. R., "Implementação de um Compilador pat·a a Parte Seqüencial da Lin­guagem Actus/Oberon", Projeto de Fim de Cur·so, Dpto de Inform ática, IM/UFRJ, Maio de 1993.

[lO] Polychronopoulos, C.D. , "Par aliei Programming anel Compilers", Kluwer Academic Pu blishers, 1988.

[11] Wolfe, M.J ., ''Data Dependence and Program Restructuring", The Joumal of Supcr·­computing. vol 4, pags. 321-344, Jan. 1991.

[12] Wholey, S., "Automatic Data Mapping for Distributed-Memory Parai lei Computers" , A CM 11·ans . Progmmming Languages Syst . pags. 25-34, 1992.

[13] Hiranandani, S. , 1\ennedy, K., Tseng, C ., "Compiling Fortran D For MIMO Distributed Memory Machines", Communications of the ACM vol 35, ago 1992.

[14] Balasundaram, V., Fox, G. , Kennedy, K. , Kremer, U., "An Interactive Environment for Data Partitioning and Distribution", Fifth Distributed Memory Computing Conference, Charleston, S. Carolina, April 9- 12, 1990.

[!5] Callahan, D. , Kennedy, K. , "Compiling Programs for Distributed Memory Multiproces­sors", Journal of Supercomputing, October, 1988.

(16] "ISO. Fortran 90", May 1991. (ISO/IEC 1539: 1991].

Page 14: Um Compilador para a Linguagem Híbrida de Programação ... · C.Actus fornece ao programador uma linguagem paralela de alto nível com uma notação que lhe permite explicitar o

V Simpósio Brasileiro de Arquitetw"a de Computadores- Processamento de Alto Desempenho 715

[17] "High Perfomance Fortran Language Specification", Jan. 25, 1993, Version 1.0 D RA FT.

[18] K. Jensen and N. Wirth , "Pascal: 'User Manual and Report'' , (3th ed) Springer-Verlag, 1985.

[19] Wirth, N., "From Modula to Oberonn, Softwa1·e - Pmclice and Expe1·ience , Vol. 18 (1988), 661-670.

[20] MacDonald, T . "C Versus Fortran-77 for Scient ific Programming", Sciwtific Progmm­ming, Vol. 1 (1992), 99-114.