Programação paralela é aquela que usa diversos processadores que executam código concorrentemente a fim de se aproveitar do poder computacional para acelerar a computação de algo.
Table of Contents
|
Conceitos
Comunicação
Conceito referente ao compartilhamento de informações que ocorrem entre cada atividade que ocorre em paralelo.
Sincronização
Conceito referente ao momento de execução das tarefas de modo que o programa exiba resultados corretos. A sincronização é a forma pela qual decidir como quando que cada unidade computacional acessa as variáveis compartilhadas. (REVER para verificar se é isso mesmo)
Granularidade
A granularidade no contexto de programação paralela se refere ao quão frequente a comunicação ocorre entre as diversas atividades paralelads do sistema. Se há muita comunicação então podemos dizer que há paralelismo de grão fino. Se não há muita comunicação então o paralelismo é de grão esparso. Caso não haja praticamente comunicação dizemos que o programa é embaraçosamente paralelos.
Paralelismo a nivel de bit
xx
Paralelismo a nivel de instrução
xxx
Paralelismo a nivel de tarefa
O paralelismo a nível de tarefa é a execução de mais de uma tarefa (função) simultaneamente. Há duas ou mais tarefas sendo executadas de forma concorrente pelos elementos de processamento havendo ou não dependência entre a computação realizada entre eles. Um exemplo deste tipo de paralelismo é a execução de um jogo em que a física e a inteligência artifical do jogo são executadas concorrentemente e cada uma por um processador.
Paralelismo a nivel de dado
Neste tipo de paralelismo o processador executa a mesma função, mas sobre uma quantidade variada de dados. Um exemplo basico seria a adição de dois vetores inteiros de mesmo tamanho. Para este tipo de paradigma cada elemento de processamento paralelo faria a adição de dois elementos sobre uma parte do vetor, ou seja, todos executariam a mesma função (adição de componentes dos dois vetores) sobre dados diferentes (elementos distintos do vetor).
Taxonomia de Flynn
Classificação dos programas paralelos em relacão ao paralelismo de instruções e dados
SISD | SIMD |
MISD | MIMD |
SISD
SISD (Single Instruction Single Data) é a tradicional programação sequencial, na qual uma única instrução é emitida por vez e esta instrução age sobre um único dado.
SIMD
SIMD (Single Instruction Multiple Data) é a abreviatura das instruções que apesar de serem especificadas individualmente agem sobre um conjunto de dados. Exemplo: Tenhho 4 números inteiros e executo uma instrução Duplicar que age sobre os quatro números. Ou seja uma única instrução afeta mais de um dado.
SPMD
SPMD (Single Program Multiple Data) é relacionada a SIMD. Enquanto um programa pode executar diversos estilos de instruções, há certos que apenas exedutam instruções SIMD. Tais programas são muito utilizados pelas GPU, por exemplo.
MISD (Multiple Instruction Single Data) é uma arquitetura onde um único dado pode estar sobre o controle de diversas operações por vez.
MIMD (Multiple Instruction Multiple Data) é uma arquitetura onde mais de uma instrução podem agir sobre mais de um dado por vez.
Pesquisadores/pessoas
http://www.oscarbg.blogspot.com/
Materiais fora do reinado dos videogames
http://gpgpu.org/2011/06/26/intel-ispc-release
http://brendaneich.com/2011/09/capitoljs-rivertrail/ Javascript e o ambiente multi-core/manycore
http://en.wikipedia.org/wiki/Parallel_computing