Академический Документы
Профессиональный Документы
Культура Документы
A análise pode ser subdividida ainda em análise léxica, análise sintática e análise
semântica. A síntese é mais variada, podendo ser composta pelas etapas de geração de
código intermediário, optimização de código e geração de código final (ou código de
máquina), e somente esta última etapa é obrigatória.
Extensões paralelas: são bibliotecas cujo conjunto de instruções, aliado com as
primitivas da linguagem hospedeira, permite o desenvolvimento de aplicações paralelas.
Possuem como vantagem o fato de não exigirem do usuário o aprendizado de uma nova
linguagem. Normalmente apresentam um desempenho melhor quando comparadas com
os compiladores paralelizadores. Como exemplo tem-se PVM (Parallel Virtual Machine),
MPI (Message Passing Interface, para arquiteturas de memória distribuída) e Parmacs;
Linguagens concorrentes: são linguagens criadas especificamente para esse fim.
Apresentam a desvantagem de exigir do usuário o aprendizado de uma nova linguagem de
programação, além de possuírem baixa portabilidade. Por outro lado, podem oferecer:
Flexibilidade;
Clareza para ativação e coordenação de processos;
Ferramentas para depuração e detecção de erros;
Melhor desempenho.
Como exemplos, podem ser citadas as linguagens Occam, Ada, HPF e C*.
Compiladores paralelizadores
Para que seja possível detectar o paralelismo implícito em uma seqüência de instruções,
faz-se necessária uma análise das dependências de dados entre as instruções. Esse é um
dos maiores desafios para o desenvolvimento de compiladores paralelizadores eficientes.
A eficiência dos programas gerados por esse tipo de compiladores depende diretamente
da arquitetura da máquina sobre a qual ele será executado. Existem compiladores para
arquiteturas vetoriais que detectam instruções de laços de repetição que podem ser
transformadas em instruções vetoriais. Esse tipo de compilador é conhecido como
compilador vetorizador. Em arquiteturas vetoriais as operações são executadas em
pipeline. Cada CPU (Central Processing Unit) vetorial está associada a um tamanho de
vetor específico que indica o número máximo de elementos que podem ser inseridos no
pipeline. Um compilador vetorizador identifica instruções de laços de repetição que podem
ser convertidas em instruções vetoriais. Quanto maior o número de laços convertidos em
instruções vetoriais, maior será o desempenho do programa sobre a arquitetura. Quando
se trata de arquiteturas multiprocessadas, os compiladores paralelizadores particionam o
conjunto de instruções de um laço entre os processadores da arquitetura para sua
execução concorrente. Para os casos em que as arquiteturas suportam, podem vir a ser
empregadas tanto técnicas de paralelização quanto vetorização conjuntamente.
Linguagem C é uma derivadora para Java, C++, C# e outras baseadas em sua estrutura.