65
Identificação de Paralelismo Aleardo Manacero Jr.

Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Identificação de Paralelismo

Aleardo Manacero Jr.

Page 2: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Paralelização de programas

Já vimos como identificar pontos em que não se pode paralelizar tarefas

Falta agora examinar como identificar pontos passíveis de paralelização e como implementar o paralelismo em um programa (sabendo de antemão que não existe receita pronta para isso)

Page 3: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Paralelização de programas

Um programa pode ser paralelizado, sempre que for conveniente, por dois agentes distintos:

Pelo compilador

Pelo programador

Page 4: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Paralelismo pelo compilador

Usualmente é chamado de ILP (Instruction Level Parallelism)

Deve identificar dependências e fazer a paralelização quando, comprovadamente, tivermos códigos independentes

Mais factível para máquinas de memória compartilhada (multiprocessadores), pela ausência de código para troca de mensagens

Page 5: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Paralelismo pelo compilador

O compilador atua se receber parâmetros específicos de paralelização

O usuário pode (e deve) interferir no processo, dirigindo (ou auxiliando) o compilador na identificação dos pontos para paralelização

Page 6: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Exemplos

DO I = 1,N

A(I) = A(I+K) * B(I)

ENDDO

É paralelizável se K>-1

DO I = 1,N

A(K(I)) = A(K(J)) + B(I) * C

ENDDOÉ paralelizável se K(I)K(J) p/ I,J:1,N e IJ

Page 7: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Exemplos

DO I = 1,N

CALL BIGSTUFF(A,B,C,I,J,K)

ENDDO

É paralelizável se a função é independente

DO I = L,N

A(I) = B(I) + C(I)

ENDDO

É paralelizável se N-L for grande

Page 8: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Paralelismo pelo programador

Realizado normalmente para ambientes de memória distribuída (multicomputadores)

Neles é o usuário (programador) quem deve identificar e implementar o paralelismo

A forma em que o paralelismo ocorrerá depende, fundamentalmente, da estrutura de conexão entre processadores

Page 9: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Paralelismo pelo programador

A dependência da estrutura de conexão faz com que o tempo gasto com comunicação limite:

o tamanho do grão de processamento

o grau de paralelismo da máquina

Page 10: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Comunicação X tamanho do grão

Se entre cada grão for necessário trocar valores (existir intersecção entre os conjuntos de saída do primeiro grão e de entrada do segundo), então os grãos devem ser suficientemente grandes para compensar o tempo gasto com comunicação

Page 11: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Grau de paralelismo

Se a velocidade em que se recebe novos dados for menor do que a capacidade de processamento, então não se deve aumentar o grau de paralelismo (aumentaria a ociosidade dos elementos de processamento)

Page 12: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Paralelismo pelo programador

A paralelização de um programa deve sempre levar as restrições de grau de paralelismo e tamanho de grão em consideração

Com isso, a identificação do paralelismo possível passa a ser uma tarefa de dimensionamento do ponto ótimo de particionamento do problema

Page 13: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Contraexemplos

Sistemas com dominação de E/S:

Aqui temos a restrição do tamanho do grão

Quando existe dominação de E/S (pouco processamento, muita E/S) fica impossível paralelizar o sistema, exceto na hipótese remota de E/S em altíssima velocidade

Page 14: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Contraexemplos

Sistemas iterativos de corpo curto:

Aqui temos a restrição de grau de paralelismo

Nos casos em que o corpo de um processo iterativo é muito curto (poucas operações, levando a ociosidade entre iterações), então é também impossível a paralelização

(isso tem mudado com GPUs)

Page 15: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelos de particionamento

Quando a paralelização de um programa é

feita pelo programador é necessário definir

qual o modelo de particionamento a ser

utilizado

Page 16: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelos de particionamento

Modelos de particionamento são modelos que

definem como o processamento paralelo

ocorrerá e de que forma os programas

paralelos irão interagir

Page 17: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelos de particionamento

A decisão sobre qual modelo deve ser utilizado depende de:

características do problema

características da máquina

O que significa depender de qual é o melhor tipo de casamento entre software e hardware

Page 18: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelos de particionamento

Um caso clássico desse casamento surge na

multiplicação de matrizes, em que o caminho

entre linhas e colunas não é feito sempre da

mesma forma, como visto na próxima figura

Page 19: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Multiplicação de matrizes

Page 20: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Multiplicação de matrizes

Nesse caso o particionamento do problema deve minimizar a necessidade de se percorrer muitas linhas ou colunas em ordem inversa

Ou ainda minimizar as trocas de cache

Uma forma de se fazer isso é multiplicar a matriz através de blocos

Page 21: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Multiplicação em blocos

Page 22: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Multiplicação em blocos

Para os casos em que as matrizes se tornam grandes demais deve-se considerar a possibilidade de outras formas de divisão em blocos

Page 23: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Multiplicação em blocos

Page 24: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Multiplicação em blocos

Para os casos em que as matrizes se tornam grandes demais deve-se considerar a possibilidade de outras formas de divisão em blocos

Essas formas devem, sempre, levar em consideração o tamanho dos blocos de cache

Outros métodos, como Strassen, são usados...

Page 25: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Paradigmas para interação

Pode-se considerar a existência de três paradigmas básicos de interação entre processos paralelos, que são:

Saco de Tarefas (Bag-of-Tasks)

Batimento (Heartbeat)

Linha de Produção (Pipeline)

Page 26: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelo “bag of tasks”

Implementado através de algoritmos centralizados, em que um processo assume o controle e os demais fazem o processamento de fato

A idéia de saco de tarefas vem de sua forma de operação, em que os trabalhadores buscam novas tarefas com o coordenador (que tem o saco com as tarefas)

Page 27: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelo “bag of tasks”

As tarefas são usualmente novos dados a serem processados pelo trabalhador

Após a manipulação desses dados, o trabalhador devolve os resultados ao coordenador

O sincronismo entre coordenador e trabalhadores é feito por requisições dos trabalhadores

Page 28: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelo “bag of tasks”

A interação entre trabalhadores deve ser evitada, diminuindo assim a necessidade de comunicação entre esses processos

Uma consequência desse modelo é o balanceamento da carga entre trabalhadores, pois novas tarefas apenas são recebidas após a conclusão do trabalho atual

Page 29: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Funcionamento do modelo

Page 30: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Funcionamento do modelo

Page 31: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Funcionamento do modelo

Page 32: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Funcionamento do modelo

Page 33: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelo “heartbeat”

Nesse modelo o gerenciamento é normalmente descentralizado

Isso exige um volume maior de comunicação e de interação entre os programas paralelos

Page 34: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelo “heartbeat”

O nome do modelo vem de sua estrutura de funcionamento que imita, de certo modo, os batimentos cardíacos

Cada processador trabalha em três fases (expansão, contração e processamento), que se repetem iterativamente até se chegar à solução

Page 35: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelo “heartbeat”

Durante a fase expansão ocorre o envio de dados por todos os processos

Page 36: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Funcionamento do modelo

Page 37: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelo “heartbeat”

Durante a fase expansão ocorre o envio de dados por todos os processos

Na contração cada processo recebe os dados enviados pelos demais processos

Page 38: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Funcionamento do modelo

Page 39: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelo “heartbeat”

Durante a fase expansão ocorre o envio de dados por todos os processos

Na contração cada processo recebe os dados enviados pelos demais processos

Na fase de processamento ocorre, obviamente, o processamento dos dados recém-recebidas

Page 40: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Funcionamento do modelo

Page 41: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelo “pipeline”

Nesse modelo simula-se, em software, a operação de um pipeline de hardware, numa estrutura de paralelismo de tarefa

Cada elemento de processamento executa ações sobre os dados de um problema, de forma que os resultados sejam a entrada para o próximo elemento de processamento

Page 42: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelo “pipeline”

Sistemas pipeline se prestam bem para problemas como filtros de ordenação, em que cada processador faz o merge (intercalação) da operação realizada em outros dois processadores

Outra aplicação interessante é a implementação de redes neurais paralelas

Page 43: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Modelo “pipeline”

Pipelines podem ser de três tipos:

Aberto

Fechado sem coordenador

Fechado com coordenador

Page 44: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Funcionamento do modelo

Page 45: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Funcionamento do modelo

Page 46: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Funcionamento do modelo

Page 47: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Programando em paralelo

Além da forma de atribuição de atividades aos elementos de processamento podemos pensar em como as atividades se relacionam

Nesse sentido temos:

Tarefas independentes

Tarefas em workflow

Page 48: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Tarefas independentes

Qualquer dos modelos anteriores pode ser usado

Bag of Tasks se encaixa perfeitamente para essas tarefas

Normalmente resulta no que se chama “embarrasingly parallel system”

Page 49: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Tarefas em workflow

Qualquer dos modelos anteriores pode ser usado

O problema aqui é determinar quando uma tarefa se torna apta a ser executada

Demanda cuidados com sincronismo

Page 50: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Programando em paralelo

Além dos modelos de particionamento podemos definir estratégias na forma de programar

Nesse sentido podemos pensar em:

Paralelismo por dados

Paralelismo por eventos/tarefas

Page 51: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Paralelismo por tarefas

Aparece tipicamente quando se programa em sistemas MIMD, com cada elemento de processamento executando tarefas diferentes para dados iguais ou diferentes

Enfatiza a natureza distribuída de processamento

Page 52: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Paralelismo por dados

Aqui o programa paralelo é construído considerando que em todos os elementos de processamento se executa o mesmo código, sobre dados diferentes

É a estratégia básica para SIMD/SPMD

É também a estratégia em MapReduce

Page 53: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Hadoop MapReduce

Projetado para tarefas independentes, executadas em batch

Grandes quantidades de dados, contidos em um DFS

Framework faz a distribuição dos dados e agrupamento das “respostas”

Page 54: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Hadoop MapReduce

Sua ideia básica é dividir o problema em duas fases:

Uma embaraçosamente paralela, que é a função map

Outra de composição, dada pela função reduce

Estrutura básica de dados formada por pares chave-valor

Page 55: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Hadoop MapReduce

Page 56: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Hadoop MapReduce – exemplo

class Mapper

method Map(doc_id a, doc d)

for all term t in doc d do

Emit (term t, count 1)

class Reducer

method Reduce(term t, counts[c1, c2, …])

sum = 0

for all count c in counts[c1,c2,…] do

sum = sum + c

Emit (term t, count sum)

Page 57: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Transactional Memory

Busca aplicar a ideia de transações (de bancos de dados) na paralelização

Conceito proposto na década de 80, mas recebendo mais atenção recentemente

Tarefas em paralelo são executadas como se fossem independentes e sua validade é verificada no final (commit)

Page 58: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Transactional Memory

A principal vantagem é a abordagem otimista em relação aos conflitos em regiões críticas

Desvantagens aparecem quando esse otimismo não se confirma

Page 59: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Transactional Memory

Primeiros usos vieram com implementações em software (STM), nos anos 90

Linguagens como Haskell, Scala, Clojure, C/C++ (gcc 4.7) apresentam construções para a programação de STM

Page 60: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Transactional Memory

Implementações em hardware surgiram em 2007

Sun sparc v9, mas era ineficiente e com alto consumo de energia

PowerPC A2 (2011), com HTM operando na cache L2

Page 61: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Transactional Memory

Maiores avanços nesta década

Power 8 (2013), também operando em cache, com tratamento de exceções por software

Intel Haswell (2013), com HTM operando na cache L1, usando HLE (hardware lock ellision) e RTM (restricted TM),

Page 62: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Transactional Memory

Lock ellision é uma técnica em que se executa a região crítica como uma transação e, caso não ocorra o commit dela, então bloqueia a thread que a executava

Próximo slide ilustra uma possível implementação de lock ellision

Page 63: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Transactional Memory

void elided_lock_wrapper(lock) {if (_xbegin() == _XBEGIN_STARTED) { /* Start transaction */ if (lock is free) /* Check lock and put into read-set */

return; /* Execute lock region in transaction */

_xabort(0xff); /* Abort transaction as lock is busy */} /* Abort comes here */take fallback lock

}

void elided_unlock_wrapper(lock) {if (lock is free) _xend(); /* Commit transaction */else unlock lock;

}

Page 64: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Considerações finais

O paralelismo existente em cada problema varia bastante, exigindo sempre uma análise cuidadosa de como tal problema pode ser resolvido

A solução desse problema depende, na prática, da identificação da melhor forma de particionamento do problema

Page 65: Identificação de Paralelismoaleardo/cursos/hpc/paralelo2020.pdfProgramando em paralelo Além dos modelos de particionamento ... Sua ideia básica é dividir o problema em duas fases:

Considerações finais

Felizmente existem poucas formas básicas de particionamento, que são “facilmente” mapeáveis aos problemas típicos de computação de alto desempenho

A escolha pelo modelo correto implica em bons ganhos de eficiência e desempenho