Pular para o conteúdo principal

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.

Comentários

Postagens mais visitadas deste blog

Utilizando o padrão de referências da ABNT no Word

Uma importante funcionalidade do Microsoft Word é o seu Gerenciador de Fontes Bibliográficas. Para aqueles que estão escrevendo algum trabalho acadêmico ou científico, é possível cadastrar todas as referências do trabalho e no final gerar a listagem já enumerada dos documentos que foram consultados na pesquisa. Essa postagem traz os arquivos necessários e as instruções para facilitar essa etapa da elaboração.

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

Creio que a maioria dos desenvolvedores já deve ter ouvido falar de threads, aprendeu um pouco sobre semáforos, monitores e travas. Partindo desse meu pensamento, imagino que essa mesma maioria não utiliza nenhuma forma de programação paralela em suas aplicações. A pergunta que fica é: utilizar paralelismo e lidar com concorrência tem baixa popularidade entre os desenvolvedores porque não tem utilidade ou porque os cursos de graduação em computação estão carentes de uma disciplina que ensine aos graduandos os reais benefícios em ter uma base sólida nesta área?

Esta série de publicações irá trazer uma visão básica sobre Parallel Programming, os exemplos serão baseados em Java e muito do que mostro aqui pode ser encontrado de maneira mais aprofundada no livro "The Art of Multiprocessor Programming", dos autores Maurice Herlihy e Nir Shavit.

Mininet: Uma Rede Virtual Instantânea no Seu PC

Baseado no texto de introdução presente no site oficial do Mininet (www.mininet.org) apresento esta ferramenta que possibilita a desenvolvedores e pesquisadores a criação de uma rede virtual realista, executando um kernel real, switch e código de aplicação, em uma única máquina (VM, cloud ou nativa), em segundos, com comandos simples.

A rede virtual criada pelo Mininet é escalável, uma rede definida por software em um único PC utilizando processos do Linux. Isso possibilita um meio inteligente de realizar testes e simulações de uma rede antes de implementá-la em meio físico, caso esse seja o objetivo.