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 .
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 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).
Respostas:
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.
fonte
Mas espere, há mais.
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.).
Portanto, é cada vez mais importante projetar algoritmos paralelos escaláveis de memória, pois eles são práticos para grandes problemas.
fonte