Programação Paralela e por que você deveria se preocupar com isso (Parte 2)

Como defini na parte 1 desta série de publicações, irei descrever, resumidamente, alguns tipos de conceitos e terminologias associados à Programação Paralela e a organização dos computadores que suportam este paradigma.
Supercomputador Janus na
Universidade do Colorado.
Pra começar, é conhecido que existem diferentes caminhos para se classificar computadores paralelos. Exemplos podem ser encontrados aqui. (Fonte: http://vedyadhara.ignou.ac.in/wiki/images/8/8e/B1U2mcse-011.pdf)
Nesta publicação iremos conhecer a classificação de computadores paralelos de acordo com a famosa Taxonomia de Flynn.

A Taxonomia de Flynn

Uma das classificações mais amplamente utilizadas, em uso desde 1966, é nomeada Flynn's Taxonomy. O nome é por causa do carinha da foto ao lado.
Michael J. Flynn, propôs a taxonomia
dos computadores paralelos em 1966.

A taxonomia de Flynn distingue arquiteturas de computadores multi-processadores de acordo com a maneira que eles podem ser classificados dentre duas dimensões independentes de Instruction Stream e Data Stream. Cada uma destas dimensões pode ter apenas um de dois possíveis estados: Single ou Multiple.

A matriz abaixo define os quatro possíveis estados de classificação de acordo com Flynn:

S I S D
Single Instruction Stream
Single Data Stream
M I S D
Multiple Instruction Stream
Single Data Stream
S I M D
Single Instruction Stream
Multiple Data Stream
M I M D
Multiple Instruction Stream
Multiple Data Stream
Lembra da calculadora
que você fez depois do
seu primeiro Hello World?

Single Instruction, Single Data (SISD):

  • Um computador serial;
  • Single Instruction: Somente um fluxo de instrução é acionado pela CPU durante qualquer ciclo de clock;
  • Single Data: Some um fluxo de dado é utilizado como entrada durante qualquer ciclo de clock;
  • Execução determinística;
  • Este é o modelo mais antigo de computador;
  • Exemplos: geração antiga de mainframes, minicomputadores, estações de trabalho e PCs de processador único.

Single Instruction, Multiple Data (SIMD):

Exemplo de execução de aplicação em computador
SIMD com matriz de processadores.
  • Um tipo de computador paralelo;
  • Single Instruction: Todas unidades de processamento executam a mesma instrução em qualquer instante do ciclo de clock;
  • Multiple Data: Cada unidade de processamento pode operar em um elemento de dado diferente;
  • Mais adequado para problemas especializados caracterizados por um alto grau de regularidade, tais como processamento de gráficos ou imagens;
  • Sincronização (bloqueante) e execução determinística;
    Exemplo de execução de aplicação em 
    computador SIMD com pipeline de vetores.

  • Duas variedades: Matriz de Processadores e Pipelines de Vetores;
  • Exemplos:
    • Matriz de Processadores: Thinking Machines CM-2, MasPar MP-1 & MP-2, ILLIAC IV;
    • Pipelines de Vetores: IBM 9000, Cray X-MP, Y-MP & C90, Fujitsu VP, NEC SX-2, Hitachi S820, ETA10.
  • Computadores mais modernos, particularmente aqueles com unidades de processadores gráficos (GPUs) que empregam instruções SIMD e unidades de execução.

Multiple Instruction, Single Data (MISD):

  • Um tipo de computador paralelo;
    Exemplo de execução MISD.
  • Multiple Instruction: Toda unidade de processamento opera em um dado independentemente através de fluxos de instrução separados;
  • Single Data: Um único fluxo de dados alimenta várias unidades de processamento;
  • Alguns (caso exista) exemplos atuais desta classe de computador paralelo nunca existiram;
  • Alguns usos possíveis podem ser:
    • filtros de frequência múltipla operando em um único sinal de fluxo;
    • múltiplos algoritmos de criptografia tentando quebrar uma única mensagem codificada.

Multiple Instruction, Multiple Data (MIMD): 

Exemplo de execução MIMD.

  • Um tipo de computador paralelo;
  • Multiple Instruction: Todo processador deve estar executando um fluxo de instrução diferente; 
  • Multiple Data: Todo processador deve estar trabalhando com um fluxo de dado diferente;
  • Execução pode ser síncrona ou assíncrona, determinística ou não-determinística;
  • Atualmente, o tipo mais comum de computador paralelo - os mais modernos supercomputadores se encaixam nessa categoria;
  • Exemplos: supercomputadores mais atuais, clusters de computadores paralelos em rede e gris, computadores SMP multi-processador, PCs multi-core;
  • Várias arquiteturas MIMD também incluem execução SIMD em sub-componentes.
Em resumo, a classificação MIMD é a que abrange os computadores que iremos executar as aplicações paralelas e os conceitos de paralelismo a serem vistos nesta série aqui no blog.

A próxima parte desta série fala sobre como avaliar a indicação do uso ou não da programação paralela em sistemas.

Felipe Alencar

Felipe Alencar é doutorando em Ciência da Computação na UFPE, professor, desenvolvedor e acredita que só não virou jogador de futebol, surfista ou músico profissional por falta de tempo e talento.

Nenhum comentário:

Postar um comentário