2010-03-09 22 views
5

recenty me hizo una pregunta acerca de los algoritmos de programación paralela que se cierran muy rápido debido a mi mala capacidad de comunicar mi intención:Algoritmo de programación en paralelo más útil?

https://stackoverflow.com/questions/2407631/what-is-the-most-useful-parallel-programming-algorithm-closed

Había también recientemente hizo otra pregunta, en concreto:

Is MapReduce just a generalisation of another programming principle?

La otra pregunta era específicamente sobre la reducción de mapas y para ver si mapreduce era una versión más específica de algún otro concepto en programación paralela. Esta pregunta (acerca de un útil algoritmo de programación en paralelo) trata más sobre toda la serie de algoritmos para programación paralela. Sin embargo, tendréis que disculparme ya que soy bastante nuevo en programación paralela, así que tal vez MapReduce o algo que es una forma más general de mapreduce es el "único" constructo de programación paralelo que está disponible, en cuyo caso me disculpo por mi ignorancia.

+1

esto es imho subjetivo –

+0

Estoy de acuerdo @Gabriel, gracias. Me olvidé de marcar la casilla "wiki de la comunidad" – Zubair

+0

Yo diría 'make -j ' –

Respuesta

1

Probablemente haya dos construcciones de programación paralelas "principales".

Mapa/Reducir es uno. En un nivel alto, ultra genérico, es solo una división y conquista paralela. Envíe los bits individuales a los controladores paralelos y combine los resultados cuando lleguen.

La otra construcción principal de programación paralela es la tubería ... las piezas de trabajo pasan por una serie de etapas, cada una de las cuales se puede ejecutar en una rosca paralela.

Creo que casi cualquier algoritmo de paralelización se reducirá a uno de esos dos. Podría estar equivocado, por supuesto.

+0

No se reduce el mapa exactamente igual que el algoritmo de canalización, usando dos tuberías, una para enviar el cálculo y otra para obtener la respuesta ? – Zubair

+0

@Zubair: No realmente ... map reduce envía cosas a múltiples "tuberías" en paralelo, mientras que una tubería enviará todo por la misma serie secuencial de tuberías. Entonces, map/reduce se ve como A -> (B, C, D, E) -> F (B, C, D, E obtienen la solicitud en paralelo, y su respuesta va directamente a F), mientras que una tubería se ve como A-> B-> C-> D-> E-> F - cada elemento envía sus datos al siguiente elemento, por lo que todo lo que llega a F ya pasó por A a E. IOW, en una tubería, cada paso toma la salida del paso anterior. – kyoryu

+0

Gracias por la aclaración. Si todo en una tubería tiene que procesarse en serie, ¿dónde está el paralelismo? – Zubair

Cuestiones relacionadas