Programacao Paralela

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.

Pthreads
OpenMP
GPGPU

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

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.