Desde la perspectiva de la computación paralela, ¿cuál es la diferencia entre MPI y OpenMP?
OpenMP y MPI son dos métodos de programación paralela. La comparación es la siguiente:
OpenMP: nivel de subproceso (granularidad paralela); implícito (método de asignación de datos); escalabilidad.
MPI: nivel de proceso; almacenamiento distribuido; buena escalabilidad. OpenMP utiliza almacenamiento compartido, lo que significa que solo es adecuado para máquinas SMP y DSM y no para clústeres. Aunque MPI es adecuado para varias máquinas, su modelo de programación es complejo.
Los problemas de aplicación deben analizarse y segmentarse, y asignarse a una colección de procesos distribuidos. Es necesario resolver dos problemas principales: el gran retraso en la comunicación y el desequilibrio de carga.
Discusión ampliada:
Creo que para comprender OpenMP y MPI, primero debe tener algunos conocimientos sobre el sistema operativo y una base de programación del sistema: OpenMP en realidad corresponde a un proceso único y subprocesos múltiples. El modelo de programación concurrente puede dividir un programa de un solo subproceso en múltiples subprocesos según un bucle for, equivalente a pthread_create.
Para múltiples subprocesos del mismo proceso, debido a que solo ocupan su propia memoria de pila y la memoria del montón se comparte, el intercambio de datos es muy fácil, directamente a través de variables compartidas Se puede intercambiar, el modelo de programación es muy Simple y fácil de usar, y para el sistema operativo, el costo de cambio de contexto de los subprocesos es mucho menor que el de los procesos.
Sin embargo, por otro lado, dado que los subprocesos no pueden existir independientemente de los procesos y un proceso no puede existir en varias máquinas, OpenMP sólo es adecuado para una única computadora con múltiples núcleos de CPU. Además, existe una sección crítica en la programación de subprocesos múltiples y debe bloquearla usted mismo para resolver el problema de la condición de carrera; de lo contrario, fácilmente tendrá consecuencias impredecibles.
MPI es un modelo de programación concurrente multiproceso, que equivale a llamar a fork usted mismo: el espacio de direcciones de memoria de cada proceso es independiente y no comparten casi nada entre sí, solo los datos de cada uno. intercambiarse a través de comunicación entre procesos (IPC), por lo que la programación es obviamente mucho más difícil.
MPI tiene una ventaja muy significativa, es decir, para un sistema distribuido, los procesos se pueden transferir entre cada computadora en el sistema distribuido, por lo que para una distribución con múltiples computadoras Para sistemas convencionales, su concurrencia es significativamente mejor. que OpenMP.