Pregunta

Entiendo las diferencias entre un programa multiproceso y un programa que se basa en la comunicación entre máquinas. Mi problema es que tengo un buen programa multiproceso escrito en 'C' que funciona y funciona muy bien en una máquina de 8 núcleos. Ahora existe la oportunidad de portar este programa a un clúster para obtener acceso a más núcleos. ¿Vale la pena el esfuerzo de extraer el material pthread y adaptar MPI (que nunca he usado) o es mejor recodificar todo (o la mayor parte) desde cero? Supongamos que estamos "atascados" con C, por lo que un cambio de idioma general no es una opción.

¿Fue útil?

Solución

Dependiendo de cómo esté escrito su software, puede haber o no ventajas de ir a MPI en lugar de mantener su implementación pthread.

Desafortunadamente (o afortunadamente), pasar mensajes es una bestia muy diferente a pthreading: la suposición básica es bastante diferente. Me encanta esta cita de Joshua Phillips del equipo Maestro : " La diferencia entre pasar mensajes y la comunicación de estado compartido es equivalente a la diferencia entre enviar un correo electrónico a una colega para pedirle que complete una tarea y abrir arriba su organizador para anotar la tarea directamente en su lista de tareas pendientes. Más allá de ser grosero, es probable que este último la confunda & # 8211; ella podría borrarlo, no notarlo, o accidentalmente priorizarlo incorrectamente. "

Desafortunadamente, la forma en que comparte datos es muy diferente. No hay acceso directo a los datos en otros subprocesos (ya que puede estar en otras máquinas), por lo que puede ser una tarea muy desalentadora migrar de pthreads a MPI. Por otro lado, si el código está escrito de manera que cada hilo esté aislado, puede ser una tarea fácil y definitivamente vale la pena.

Para determinar qué tan útil será esto, deberá comprender el código y lo que espera lograr al cambiar. Puede valer la pena como una experiencia de aprendizaje (aprende MUCHO sobre sincronización y subprocesos trabajando en MPI), pero puede no ser práctico si las ganancias serán menores.

Otros consejos

Re. tu comentario a Reed: esto suena como una conversión fácil y de bajo costo a MPI. Solo tenga cuidado: no todas las API de MPI admiten la creación dinámica de procesos, es decir, inicia su programa con N procesos (especificados al inicio) y está atascado con N procesos a lo largo de la vida útil del programa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top