Como reduzir os resultados da complexidade paralela para constantemente vários núcleos?

20

Eu tive problemas para aceitar a visão teórica da complexidade de "resolvido com eficiência por algoritmo paralelo", que é dada pela classe NC :

NC é a classe de problemas que podem ser resolvidos por um algoritmo paralelo em tempo em p ( n ) S ( n k ) processadores com c , k N .O(logcn)p(n)O(nk)c,kN

Podemos assumir uma PRAM .

Meu problema é que isso não parece dizer muito sobre máquinas "reais", ou seja, máquinas com uma quantidade finita de processadores. Agora eu sou dito que "é sabido" que podemos "eficiente" simular um algoritmo processador em p N processadores.O(nk)pN

O que significa "eficientemente" aqui? É folclore ou existe um teorema rigoroso que quantifica a sobrecarga causada pela simulação?

Receio que isso aconteça é que tenho um problema que possui um algoritmo seqüencial e também um algoritmo paralelo "eficiente" que, quando simulado em processadores p , também leva tempo O ( n k ) (o que é tudo isso pode ser esperado nesse nível de análise de granularidade se o algoritmo seqüencial for assintoticamente ideal). Nesse caso, não há aumento de velocidade até onde podemos ver; de fato, o algoritmo paralelo simulado pode ser mais lento que o algoritmo seqüencial. Ou seja, estou realmente procurando por instruções mais precisas que os limites O (ou uma declaração de ausência de tais resultados).O(nk)pO(nk)O

Rafael
fonte
Teorema de Brent?
cic
Você quer dizer ? Nesse caso, isso é aplicável apenas em determinadas circunstâncias e também não permite traduzir imediatamente tempos de execução. Ou, se houver, elaborar uma resposta. Tp<Wp+D
Raphael
A NC responde à pergunta "é possível trocar mais hardware por menos tempo de execução?" Você pode se restringir ao hardware constante e isso é semelhante a se restringir à memória constante, uma melhor modelagem de alguns problemas. Para um uso prático, consulte carry lookhead adders, mais hardware para que a adição de bits seja feita em O ( N ) . NO(N)
AProgrammer

Respostas:

13

Se você presumir que o número de processadores é limitado por uma constante, você está certo de que um problema na NC não significa muito na prática. Uma vez que qualquer algoritmo sobre um carrinho de bebé com k processadores e t tempo paralelo pode ser simulado com uma única RAM-processador em S ( KT ), o tempo, o tempo em paralelo e o tempo sequencial pode diferem apenas por um factor constante se K é uma constante.

No entanto, se você presumir que pode preparar um computador com mais processadores à medida que o tamanho da entrada aumenta, um problema ocorrido na NC significa que, desde que você possa preparar mais processadores, o tempo de execução será "muito curto" ou, mais precisamente, polilogarítmico no tamanho da entrada. Se você acha que essa suposição não é realista, compare-a com a suposição de memória ilimitada: os computadores reais têm apenas uma quantidade finita de espaço, mas, no estudo de algoritmos e complexidade, quase sempre assumimos que um dispositivo computacional não possui uma constante superior. limitado no espaço. Na prática, isso significa que podemos preparar um computador com mais memória à medida que o tamanho da entrada aumenta, e é assim que geralmente usamos computadores no mundo real. NC modela uma situação análoga em computação paralela.

Tsuyoshi Ito
fonte
1
1) Sim, paralelizar constantemente muitos núcleos só pode produzir aceleração constante. Isso é inerente e infelizmente está oculto nos termos- . A pergunta (imho) interessante é: posso obter uma aceleração (ideal) k , ou apenas k / 2 , ou k - 1 ? 2) Embora a suposição de memória infinita possa ser justificada pela disponibilidade de muita RAM (e, tecnicamente, você pode adicionar o disco rígido), isso geralmente não é verdade para os processadores. Máquinas (pessoais) típicas têm 16 ou menos núcleos hoje em dia. Em outras palavras, você pode usar resultados "normais" até tamanhos de problemas relevantes, muitos resultados paralelos apenas até n 20 .Okk/2k1n20
Raphael
4
@ Rafael: A questão de saber se um determinado problema pertence ao NC ou não não modela a sua pergunta. Não estou dizendo que sua pergunta é desinteressante; Estou apenas dizendo que NC não é a classe de complexidade certa para modelar isso.
Tsuyoshi Ito
Estou realmente feliz em ouvir isso; uma pessoa afirma o contrário, no entanto. Não necessariamente com NC, mas com resultados teóricos da complexidade em geral. Como é com outras classes?
Raphael
Uma correção: um problema em NC significa que o tempo de execução é polilogarítmico se o número de processadores for um polinômio suficientemente grande no tamanho da entrada. No cenário discutivelmente mais realista, em que o número de processadores é um polinômio fixo como , ou uma função não constante mais lenta comoO(logn), a associação ao NC não implica formalmente nada. O(n)O(logn)
JeffE
@ Jeff: Isso não é uma correção. Eu apenas escrevi “prepare mais processadores” sem dar seu significado rigoroso (porque pensei que isso obscureceria o ponto).
Tsuyoshi Ito 15/05
10

NC

p=1NC

Mas espere, há mais.

NC

PO(nϵ),0<ϵ<1NCnnn<lg3nn0.5×109NC

Em uma das respostas, observou-se que "Na prática, isso significa que podemos preparar um computador com mais memória à medida que o tamanho da entrada aumenta, e é assim que geralmente usamos computadores no mundo real. NC modela uma situação análoga em computação paralela ".

Concordo parcialmente com este ponto de vista. Compramos um novo computador paralelo com mais memória quando um supercomputador mais antigo é desativado também porque os chips DRAM são mais baratos com o tempo e equilibram um pouco o computador paralelo em relação aos seus principais componentes (processadores, memória, interconexão etc.).

pnp

Portanto, é cada vez mais importante projetar algoritmos paralelos escaláveis ​​de memória, pois eles são práticos para grandes problemas.

n3n

Massimo Cafaro
fonte