Otra vista, no inconsistente con lo que @Jerry ya ha escrito es que OpenMP es para paralelización de memoria compartida y MPI es para paralelización de memoria distribuida. Emular la memoria compartida en sistemas distribuidos rara vez es convincente o exitoso, pero es un enfoque perfectamente razonable utilizar MPI en un sistema de memoria compartida.
Por supuesto, todos los equipos y servidores multinúcleo (?) Son sistemas de memoria compartida actualmente, por lo que el modelo de ejecución para OpenMP es ampliamente aplicable. MPI tiende a ser independiente en los clústeres en los que los procesadores se comunican entre sí a través de una red (que a veces se denomina interconexión y, a menudo, es de una especificación superior a la de la oficina Ethernet).
En términos de aplicaciones, estimo que una gran proporción de programas paralelos se pueden implementar con éxito con OpenMP o MPI y que su elección entre los dos probablemente se debe mejor a la disponibilidad del hardware. La mayoría de nosotros (paralelos) consideraría que OpenMP es más fácil de acceder que MPI, y es ciertamente (afirmo) más fácil paralelar de forma incremental un programa existente con OpenMP que con MPI.
Sin embargo, si necesita utilizar más procesadores de los que puede obtener en una caja (y cuántos procesadores están aumentando constantemente) entonces MPI es su mejor opción. También puede tropezar con la idea de la programación híbrida; por ejemplo, si tiene un clúster de PC multinúcleo, puede usar MPI entre PC y OpenMP dentro de una PC. No he visto ninguna evidencia de que la complejidad adicional de la programación sea recompensada por un mejor rendimiento, y he visto alguna evidencia de que definitivamente no vale la pena el esfuerzo.
Y, como ya se ha dicho en uno de los comentarios, creo que Fortran es lo suficientemente resistente al futuro en el dominio de las aplicaciones paralelas, de alto rendimiento, científicas y de ingeniería. La última edición (2008) del estándar incorpora co-arrays (es decir, matrices que se distribuyen en un sistema de memoria con acceso no local y local) directamente en el idioma. Incluso hay una o dos implementaciones iniciales de esta característica. Todavía no tengo ninguna experiencia de ellos y espero que haya problemas de dentición durante algunos años.
EDITAR para recoger en una serie de puntos en los comentarios de OP ...
No, no creo que es una mala idea acercarse a la computación en paralelo a través de OpenMP. Creo que OpenMP y MPI (o, más exactamente, los modelos de computación paralela que implementan) son complementarios. Ciertamente uso ambos, y sospecho que la mayoría de los programadores paralelos profesionales también lo hacen. No había hecho mucho OpenMP desde que abandoné la universidad hace unos 6 años hasta hace unos 2 años, cuando las multicores realmente comenzaron a aparecer en todas partes. Ahora probablemente haga cantidades iguales de ambos.
En términos de aprender algo nuevo, (auto) Creo que el libro El uso de OpenMP por Chapman et al es mejor que el de Chandra, aunque sólo sea porque es mucho más hasta la fecha. Creo que el libro de Chandra es anterior a OpenMP 2, y el libro de Chapman es anterior a OpenMP 3, que vale la pena aprender.
En el lado MPI los libros de Gropp et al, Utilizando MPI y Utilizando MPI-2 son indispensables; esto es quizás porque son (hasta donde he llegado) las únicas introducciones al MPI en lugar de su excelencia. No creo que sean malos, pero no tienen mucha competencia. Me gusta Parallel Scientific Computing en C++ y MPI por Karniadakis y Kirby también; Dependiendo de su nivel de conocimiento de computación científica, puede encontrar que gran parte del material es demasiado básico. Pero creo que el campo carece por completo (espero que alguien pueda probar que estoy equivocado aquí) es un buen libro de texto (o un puñado de libros de texto) sobre el diseño de programas para ejecución paralela, algo para ayudar al experimentado Fortran (en caso), el programador realiza el salto del diseño de programas en serie al paralelo. Mucha información sobre cómo paralelizar un bucle o nido de bucles, no tanto sobre las opciones para los cálculos paralelos en matrices semi-definidas positivas estructuradas (o lo que sea). Para ese nivel de información tenemos que profundizar bastante en los trabajos de investigación (las bibliotecas digitales ACM e IEEE bien valen los modestos costos anuales; si estás en una institución académica, tu biblioteca probablemente tenga suscripciones a estas y mucho más, Tengo suerte de que mis empleadores paguen por las membresías y complementos de mi sociedad profesional, pero si no lo hicieran, me pagaría a mí mismo).
En cuanto a sus planes para un nuevo laboratorio con, digamos, 24 procesadores (¿CPUs o núcleos?, Realmente no importa, solo pregunta) entonces la ruta que tome debe depender de las profundidades de su bolsillo.Si puede pagarlo, sugeriría:
- Considere una computadora de memoria compartida, sin duda hace un año Sun, SGI e IBM podrían todos suministrar un sistema de memoria compartida con ese tipo de núcleos, ' No estoy seguro del estado actual del mercado, pero ya que tiene hasta febrero para decidir si vale la pena investigarlo. Un sistema de memoria compartida le brinda la opción de paralelismo de memoria compartida, que un clúster no tiene, y el paso de mensajes en una plataforma de memoria compartida debe funcionar a la velocidad de la luz. (Por cierto, si realiza esta ruta, compare este aspecto del sistema, ha habido algunas malas implementaciones de MPI en las computadoras de memoria compartida). Una buena implementación de MPI en una computadora de memoria compartida (mi última experiencia con esto fue en un procesador 512 SGI Altix) no envía ningún mensaje, solo mueve unos pocos punteros y es, por consiguiente, increíblemente rápido. El problema con el Altix era que más allá de los 128 procesadores, el bus de memoria solía verse abrumado por todo el tráfico; ese era el momento de cambiar a MPI en un clúster o en un cuadro de MPP.
- Una vez más, si puede pagarlo, le recomiendo que un integrador de sistemas le proporcione un sistema que funcione y evite crear un clúster (o lo que sea) usted mismo. Si, como yo, primero eres un programador y un integrador de sistemas reacio en segundo lugar, este es un enfoque más fácil y te proporcionará un sistema en el que puedes comenzar a programar mucho antes.
Si no puede pagar las costosas opciones, entonces iría por tantos servidores montados en bastidor con 4 u 8 núcleos por caja (la elección depende del precio, y tal vez incluso 16 núcleos por caja vale la pena considerar hoy) y, hoy, estaría planeando al menos 4 GB de RAM por núcleo. Entonces necesitas la interconexión más rápida que puedas pagar; GB Ethernet está bien, pero Infiniband (o el otro cuyo nombre olvido) es más fino, aunque el aumento en el precio es notable. Y necesitará una PC para actuar como nodo principal para su nuevo clúster, ejecutar el sistema de administración de trabajos y otras cosas. Hay un montón de material excelente en Internet sobre la creación y el funcionamiento de clusters, a menudo bajo el título de Beowulf, que era el nombre de lo que se considera que fue el primer clúster de "elaboración casera".
Ahora, ya que tiene hasta febrero para poner en funcionamiento su laboratorio, despida a 2 de sus colegas y conviértelos en un mini-Beowulf. Descargue e instale una instalación MPI de aspecto probable (OpenMPI es bueno, pero hay otros a considerar y su o/s puede dictar otra opción). Ahora puede comenzar a prepararse para cuando el laboratorio esté listo.
PD No tiene que despedir a 2 personas si puede buscar 2 PC de otra forma. Y las PC pueden ser viejas e inadecuadas para el uso de escritorio; simplemente serán una plataforma de capacitación para usted y sus colegas (si le queda algo). Cuanto más idénticos sean, mejor.
Fortran no suena "a prueba de futuro" para mí ... – Andrey
La gente ha estado diciendo eso desde los años 80. Aún aquí. Sigue siendo importante para la programación científica y los métodos numéricos. – duffymo