Processamento paralelo

Propaganda
Fonte: http://www.icmc.usp.br/~lefraso/parallel.html
Mathematics and Computing Sciences Institute
Prof. Dr. Leandro Franco de Souza
Parallel computing simulation of fluid flow
Texto de Luciano J. Senger
Computação paralela ou processamento paralelo constitui-se na exploração de
eventos computacionais concorrentes, através de unidades de processamento que
cooperam e comunicam-se entre si. O objetivo principal do processamento paralelo é
a busca de um melhor desempenho para aplicações computacionais que necessitam
de uma maior potência computacional, muitas vezes não alcançada em arquiteturas
sequenciais.
A exploração de eventos concorrentes pode ser realizada em diferentes níveis. Em um
nível mais próximo ao hardware, o paralelismo pode existir nas unidades funcionais
que compõem a UCP (Unidade Central de Processamento). Nesse nível, a granulação
representa o tamanho da unidade de trabalho destinada aos processadores, sendo
diretamente relacionada ao hardware e medida em número de instruções.
A forma de execução paralela tem sido empregada com sucesso em arquiteturas de
hardware que possuem múltiplas unidades funcionais e empregam técnicas de
pipeline. A técnica pipeline representa uma forma de paralelismo temporal,
caracterizado quando existe a execução de eventos sobrepostos no tempo. A tarefa a
ser executada é dividida em subtarefas, cada uma destas sendo executada por um
estágio de hardware especializado, que trabalha de maneira concorrente com os
demais estágios envolvidos na computação.
Outra maneira de obter paralelismo em nível de instruções de máquina é através da
utilização de ambientes de paralelização automática, onde o compilador é responsável
por, a partir de um programa sequencial, gerar um programa paralelo.
Em um nível intermediário, o paralelismo pode ser explorado através de
procedimentos ou subrotinas de programas paralelos que são atribuídos aos
elementos de processamento e executados concorrentemente. Geralmente, o
paralelismo através de procedimentos necessita do suporte explícito de linguagens de
programação paralela.
Embora seja possível aumentar o desempenho no processo computacional utilizando o
paralelismo em níveis de instruções de máquina e procedimentos, uma solução
altamente empregada é a utilização de granulação grossa. Nesse nível mais alto, o
trabalho a ser realizado é dividido em tarefas, que são executadas concorrentemente.
Seguindo essa idéia, uma aplicação paralela é um conjunto de tarefas que interagem
entre si para realizar um determinado trabalho.
A computação paralela realizada em sistemas computacionais distribuídos, ou
computação paralela distribuída, é uma área desafiante. Técnicas e modelos comuns
para construção, partição e mapeamento de programas paralelos utilizados no
passado, muitas vezes possuem sua viabilidade reduzida em sistemas distribuídos.
Características intrínsecas desses sistemas, como heterogeneidade, fraco
acoplamento dos recursos, presença de aplicações com diferentes necessidades
computacionais e satisfação de usuários que utilizam interativamente o sistema,
criam necessidades adicionais para o software paralelo.
Na programação sequencial, os recursos são empregados através de uma linguagem
de montagem, ou, de uma maneira mais usual, através de linguagens de alto nível
como C, Pascal ou Fortran. Essas linguagens permitem o uso de abstrações (por
exemplo if, else, while), que são traduzidas automaticamente em código executável
pelo compilador. A programação paralela necessita de recursos não disponíveis
diretamente nessas linguagens. Essa necessidade é gerada pela inclusão de novas
fontes de complexidade a programação sequencial. Na programação paralela, são
necessários mecanismos para definir quais tarefas serão executadas
concorrentemente, mecanismos para a ativação e finalização dessas tarefas e
métodos para coordenar a interação entre elas.
As linguagens concorrentes permitem a criação de programas paralelos através de
construções próprias da linguagem. Um exemplo dessa categoria é a linguagem
Occam, baseada no paradigma CSP, que permite a criação de aplicações paralelas
com o paralelismo procedural em máquinas com memória distribuída.
O estudo numérico preciso de escoamentos de fluidos pode se tornar muito caro,
principalmente se forem utilizadas a simulação de grandes Escalas -- LES (do inglês:
Large Eddy Simulation) ou a simulação numérica direta -- DNS (do inglês: Direct
Numerical Simulation). Uma das alternativas para estes estudos é a utilização de
técnicas de paralelização para simulação numérica em microcomputadores (cluster de
PC's). O principal objetivo desta pesquisa é a paralelização de códigos numéricos
permitindo o acesso mais rápido ao resultados numéricos. Desta forma pode-se
acessar mais rapidamente os resultados de simulações que levariam um tempo
computacional muito grande se fossem executados em um único microprocessador.
Download