MPI no es un lenguaje de programación. MPI define un conjunto de rutinas de biblioteca que se pueden llamar desde programas C y Fortran. Los programas MPI suelen emplear un enfoque de programa único y datos múltiples. Múltiples instancias, o rangos MPI, del mismo programa se ejecutan simultáneamente. Cada rango calcula una parte diferente del problema más grande y usa MPI para comunicar datos entre rangos. Desde la perspectiva de un programador de MPI, los rangos pueden ejecutarse en el mismo nodo o en diferentes nodos; la ruta de comunicación puede ser diferente, pero eso es transparente para el programa MPI.
Los mecanismos de inicio de las aplicaciones MPI no forman parte del Estándar. Demostramos cómo manejar los programas Intel MPI en Linux, pero la mayoría de las otras distribuciones tienen una semántica y características similares. La forma básica de ejecutar un programa Intel MPI es (con
$ mpirun –n < N > ./prg.x
Esto será suficiente para un nodo de memoria compartida o un clúster con un sistema de gestión de lotes estándar. Si encuentra el siguiente error:
mpirun.openmpi: command not found
puede intentar instalar el siguiente paquete según su elección de distribución.
Distribución | Comando |
---|---|
Debian | apt-get install openmpi-bin |
Ubuntu | apt-get install openmpi-bin |
Kali Linux | apt-get install openmpi-bin |
Raspbian | apt-get install openmpi-bin |
Resumen
El modelo de programación MPI se adapta naturalmente a los clústeres que contienen coprocesadores Intel Xeon Phi. El programador puede acelerar los rangos MPI individuales descargando los núcleos computacionales clave al coprocesador. Sin embargo, se debe tener cuidado para evitar conflictos de recursos y amortizar la mayor cantidad de comunicación. Alternativamente, el coprocesador tiene las características de otro nodo de clúster, aunque con capacidades computacionales diferentes a las del host, y los rangos de MPI pueden ejecutarse de forma nativa en el coprocesador. Cualquiera de los enfoques introduce nuevos grados de heterogeneidad y la probabilidad de desequilibrio de carga como un cuello de botella en el rendimiento.