Este es el comando mpiexec.openmpi que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.
PROGRAMA:
NOMBRE
orterun, mpirun, mpiexec: ejecute trabajos en serie y en paralelo en Open MPI. oshrun, shmemrun
- Ejecutar trabajos en serie y en paralelo en Open SHMEM.
Nota: mpirún, mpiexecy Orterun son sinónimos entre sí, así como oshrun,
shmemrún en caso de que Open SHMEM esté instalado. El uso de cualquiera de los nombres producirá el mismo
comportamiento.
SINOPSIS
Modelo de datos múltiples de proceso único (SPMD):
mpirún [opciones] [ ]
Modelo de datos múltiples de instrucciones múltiples (MIMD):
mpirún [opciones_globales]
[opciones_locales1] [ ]:
[opciones_locales2] [ ]:
...:
[opciones_localesN] [ ]
Tenga en cuenta que en ambos modelos, invocar mpirún a través de un nombre de ruta absoluto es equivalente a
especificando el --prefijo opción con un valor equivalente al directorio donde mpirún
reside, menos su último subdirectorio. Por ejemplo:
% / usr / local / bin / mpirun ...
es equivalente a
% mpirun --prefijo / usr / local
RÁPIDO RESUMEN
Si simplemente está buscando cómo ejecutar una aplicación MPI, probablemente desee utilizar una
línea de comando de la siguiente forma:
% mpirun [-np X] [--archivohost ]
Esto ejecutará X copias de en su entorno de tiempo de ejecución actual (si se ejecuta bajo
un administrador de recursos compatible, Open MPI's mpirún Usualmente usará automáticamente el
correspondiente iniciador del proceso del administrador de recursos, a diferencia de, por ejemplo, rsh or ssh,
que requieren el uso de un archivo host, o por defecto ejecutarán todas las copias X en el
localhost), la programación (de forma predeterminada) de forma rotatoria por ranura de CPU. Ver el resto de
esta página para más detalles.
Tenga en cuenta que mpirun vincula automáticamente los procesos a partir del inicio de la serie v1.8.
Se utilizan dos patrones de enlace en ausencia de otras directivas:
aglutinante a núcleo: cuando el número de procesos es <= 2
aglutinante a enchufe: cuando el número de procesos es> 2
Si su aplicación utiliza subprocesos, probablemente desee asegurarse de que no está
enlazado en absoluto (especificando --bind-to none), o enlazado a múltiples núcleos usando un
nivel de vinculación apropiado o número específico de elementos de procesamiento por aplicación
.
OPCIONES
mpirún enviará el nombre del directorio donde fue invocado en el nodo local a cada
de los nodos remotos e intente cambiar a ese directorio. Consulte el "Trabajo actual
Directorio "a continuación para obtener más detalles.
El programa ejecutable. Este se identifica como el primer argumento no reconocido
a mpirun.
Pase estos argumentos en tiempo de ejecución a cada proceso nuevo. Estos deben ser siempre los
últimos argumentos para mpirún. Si se utiliza un archivo de contexto de aplicación, se mostrarán
ignorado
-h, --ayuda
Mostrar ayuda para este comando
-q, --tranquilo
Suprima los mensajes informativos de orterun durante la ejecución de la aplicación.
-v, --verboso
Sea prolijo
-V, --versión
Imprimir número de versión. Si no se dan otros argumentos, esto también causará
orterun para salir.
-mostrar-mapa, --display-mapa
Muestre una tabla que muestre la ubicación mapeada de cada proceso antes del lanzamiento.
-display-devel-mapa, --display-desarrollo-mapa
Muestre una tabla más detallada que muestre la ubicación mapeada de cada proceso antes
para lanzar (generalmente de interés para los desarrolladores).
-display-asignación, --display-asignación
Muestra la asignación de recursos detectada.
Utilice una de las siguientes opciones para especificar en qué hosts (nodos) del clúster se ejecutará.
Tenga en cuenta que a partir del inicio de la versión v1.8, mpirun lanzará un demonio en cada host.
en la asignación (modificada por las siguientes opciones) al comienzo de
ejecución, independientemente de si los procesos de aplicación eventualmente se asignarán o no a
ejecutar allí. Esto se hace para permitir la recopilación de información de topología de hardware del
nodos remotos, lo que nos permite mapear procesos con topología conocida. Sin embargo, es un
cambio del comportamiento en versiones anteriores donde los demonios solo se lanzaban después del mapeo
estaba completo y, por lo tanto, solo se produjo en nodos donde los procesos de aplicación realmente
estar ejecutando.
-H, -anfitrión, --anfitrión
Lista de hosts en los que invocar procesos.
-archivo host, --archivo de host
Proporcione un archivo host para usar.
-archivo de máquina, - archivo de máquina
Sinónimo de -archivo host.
-cpu-conjunto, --cpu-conjunto
Restrinja los procesos iniciados al cpus lógico especificado en cada nodo. Tenga en cuenta que
las opciones de encuadernación aún se aplicarán dentro del sobre especificado; por ejemplo, puede
elija vincular cada proceso a una sola CPU dentro del conjunto de CPU especificado.
Las siguientes opciones especifican el número de procesos a iniciar. Tenga en cuenta que ninguno de los
Las opciones implican una política de vinculación particular, por ejemplo, solicitar N procesos para cada socket.
no implica que los procesos estarán vinculados al socket.
-c, -n, --norte, -notario público <#>
Ejecute tantas copias del programa en los nodos dados. Esta opción indica que
el archivo especificado es un programa ejecutable y no un contexto de aplicación. Si no
El valor se proporciona para el número de copias a ejecutar (es decir, ni el "-np" ni
sus sinónimos se proporcionan en la línea de comando), Open MPI se ejecutará automáticamente
una copia del programa en cada ranura de proceso (consulte a continuación la descripción de un "proceso
ranura "). Sin embargo, esta función solo se puede utilizar en el modelo SPMD y volverá
un error (sin iniciar la ejecución de la aplicación) de lo contrario.
—Map-by ppr: N:
Lanzamiento N veces el número de objetos del tipo especificado en cada nodo.
-npersocket, --npersocket <#persocket>
En cada nodo, inicie este número de procesos multiplicado por el número de sockets de procesador en
el nodo. los -npersocket La opción también enciende la -enlace a enchufe .
(en desuso a favor de --map-by ppr: n: socket)
-npernodo, --npernodo <#pernodo>
En cada nodo, inicie tantos procesos. (en desuso a favor de --map-by
ppr: n: nodo)
-pernodo, --pernodo
En cada nodo, inicie un proceso, equivalente a -npernodo 1. (obsoleto en
favor de --map-by ppr: 1: nodo)
Para mapear procesos:
--mapa-por
Asignar al objeto especificado, por defecto es enchufe. Las opciones admitidas incluyen ranura,
hwthread, core, L1cache, L2cache, L3cache, socket, numa, placa, nodo, secuencial,
distancia y ppr. Cualquier objeto puede incluir modificadores agregando un: y cualquier
combinación de PE = n (vincular n elementos de procesamiento a cada proceso), SPAN (equilibrio de carga
los procesos a través de la asignación), OVERSUBSCRIBE (permitir más procesos en un nodo
que los elementos de procesamiento) y NOOVERSUBSCRIBE. Esto incluye PPR, donde el
El patrón terminaría con otros dos puntos para separarlo de los modificadores.
-por núcleo, --por núcleo
Asignar procesos por núcleo (en desuso en favor de --map-by core)
-bysocket, --bysocket
Asignar procesos por socket (en desuso a favor de --map-by socket)
-nolocal, --no local
No ejecute ninguna copia de la aplicación iniciada en el mismo nodo que orterun.
corriendo. Esta opción anulará la lista del localhost con --anfitrión o cualquier otro
mecanismo de especificación de host.
-nooversubscribe, --nooversubscribe
No suscriba en exceso ningún nodo; error (sin iniciar ningún proceso) si el
El número solicitado de procesos provocaría una suscripción excesiva. Esta opción implícitamente
establece "max_slots" igual al valor de "ranuras" para cada nodo.
-bynodo, --bynodo
Lanzar procesos uno por nodo, ciclando por nodo en forma de turnos. Esta
distribuye los procesos de manera uniforme entre los nodos y asigna rangos MPI_COMM_WORLD en una ronda-
robin, "por nodo".
Para ordenar los rangos de los procesos en MPI_COMM_WORLD:
--analizar
Clasificar en forma de round-robin de acuerdo con el objeto especificado, por defecto es slot.
Las opciones admitidas incluyen ranura, hwthread, core, L1cache, L2cache, L3cache, socket,
numa, tablero y nodo.
Para el proceso de encuadernación:
--unirse a
Vincular procesos al objeto especificado, por defecto es centro. Las opciones admitidas incluyen
slot, hwthread, core, l1cache, l2cache, l3cache, socket, numa, board y none.
-cpus-por-proc, --cpus-por-proc <#perproc>
Vincule cada proceso al número especificado de cpus. (en desuso a favor de --map-
por : PE = n)
-cpus-por-rango, --cpus por rango <#perrank>
Alias para -cpus-por-proc. (en desuso a favor de --map-by : PE = n)
-enlace-to-core, --enlace al núcleo
Vincular procesos a núcleos (en desuso a favor de --bind-to core)
-enlace a enchufe, --enlace a enchufe
Enlazar procesos a sockets de procesador (obsoleto en favor de --bind-to socket)
-vincular-a-ninguno, - enlazar-a-ninguno
No vincular procesos (en desuso a favor de --bind-to none)
-informe-vinculaciones, --enlaces de informes
Informe cualquier vinculación de los procesos iniciados.
-lista-de-ranuras, --lista-de-ranuras
Lista de ID de procesador que se utilizarán para vincular procesos MPI. Los enlaces especificados
se aplicará a todos los procesos MPI. Consulte la explicación a continuación para conocer la sintaxis.
Para archivos de rango:
-rf, --archivo de clasificación
Proporcione un archivo de clasificación.
Para administrar E / S estándar:
-Nombre del archivo de salida, --Nombre del archivo de salida
Redirigir stdout, stderr y stddiag de todos los procesos a un proceso único
versión del nombre de archivo especificado. Cualquier directorio en el nombre del archivo
se creará automáticamente. Cada archivo de salida constará de filename.id, donde el
id será el rango de los procesos en MPI_COMM_WORLD, lleno a la izquierda con ceros para
ordenamiento correcto en listados.
-stdin, --stdin
El rango MPI_COMM_WORLD del proceso que va a recibir stdin. El valor predeterminado es
reenviar stdin a MPI_COMM_WORLD rango 0, pero esta opción se puede usar para reenviar
stdin a cualquier proceso. También es aceptable especificar ninguna, lo que indica que no
los procesos deben recibir stdin.
-etiqueta-salida, --tag-salida
Etiquete cada línea de salida como stdout, stderr y stddiag con [Identificación del trabajo,
MCW_rank] indicando el ID de trabajo del proceso y el rango MPI_COMM_WORLD del
proceso que generó la salida y el canal que la generó.
-salida de marca de tiempo, - salida de marca de tiempo
Marca la hora de cada línea de salida en stdout, stderr y stddiag.
-xml, --xml
Proporcione toda la salida a stdout, stderr y stddiag en formato xml.
-xtérmino, --xtérmino
Muestre la salida de los procesos identificados por sus rangos MPI_COMM_WORLD en
Ventanas xterm independientes. Los rangos se especifican como una lista separada por comas de
rangos, con un -1 que indica todos. Se creará una ventana separada para cada
proceso especificado. Nota: xterm normalmente terminará la ventana al finalizar
del proceso que se ejecuta dentro de él. Sin embargo, agregando un "!" al final de la lista
de rangos especificados, se proporcionarán las opciones adecuadas para garantizar que xterm mantiene
la ventana abierta después de el proceso termina, lo que le permite ver el proceso '
producción. Posteriormente, cada ventana de xterm deberá cerrarse manualmente. Nota: In
algunos entornos, xterm puede requerir que el ejecutable esté en la ruta del usuario, o
especificarse en términos absolutos o relativos. Por tanto, puede ser necesario especificar un
ejecutable local como "./foo" en lugar de simplemente "foo". Si xterm no encuentra el
ejecutable, mpirun se bloqueará, pero seguirá respondiendo correctamente a un ctrl-c. Si esto
sucede, compruebe que el ejecutable se haya especificado correctamente e intente
de nuevo.
Para administrar archivos y entorno de ejecución:
-camino, --sendero
que se utilizará al intentar localizar los ejecutables solicitados. Esta
se utiliza antes de utilizar la configuración PATH local.
--prefijo
Directorio de prefijo que se utilizará para configurar el TRAYECTORIA y LD_LIBRARY_PATH en
nodo remoto antes de invocar Open MPI o el proceso de destino. Ver el "Remoto
Ejecución ", a continuación.
--precarga-binaria
Copie los ejecutables especificados en máquinas remotas antes de iniciar Remote
Procesos. Los ejecutables se copiarán al directorio de sesión Open MPI y
se eliminará una vez finalizado el trabajo.
--preload-archivos
Precargue la lista de archivos separados por comas en el directorio de trabajo actual del
máquinas remotas donde los procesos se iniciarán antes de iniciar esos procesos.
--precargar-archivos-dest-dir
El directorio de destino que se utilizará para los archivos de precarga, si es diferente al actual
directorio de trabajo. De forma predeterminada, las rutas absolutas y relativas proporcionadas por
--preload-files se utilizan.
--tmpdir
Establezca la raíz del árbol del directorio de sesión solo para mpirun.
-wd
Sinónimo de -wdir.
-wdir
Cambiar al directorio antes de que se ejecute el programa del usuario. Ver la "Actual
"Directorio de trabajo" para obtener notas sobre las rutas relativas. Nota: Si -wdir opción
aparece tanto en la línea de comando como en el contexto de una aplicación, el contexto
tiene prioridad sobre la línea de comando. Por lo tanto, si la ruta al wdir deseado es
diferente en los nodos de backend, entonces debe especificarse como una ruta absoluta que
es correcto para el nodo backend.
-x
Exporte las variables de entorno especificadas a los nodos remotos antes de ejecutar la
programa. Solo se puede especificar una variable de entorno por -x opción. Existente
Se pueden especificar variables de entorno o se pueden especificar nuevos nombres de variable con
valores correspondientes. Por ejemplo:
% mpirun -x DISPLAY -x OFILE = / tmp / out ...
El analizador del -x la opción no es muy sofisticada; ni siquiera entiende
valores cotizados. Se aconseja a los usuarios que establezcan variables en el entorno y luego utilicen
-x exportarlos (no definirlos).
Configuración de los parámetros de MCA:
-gmca, --gmca
Pase parámetros MCA globales que sean aplicables a todos los contextos. son los
nombre del parámetro; es el valor del parámetro.
-mca, --mca
Envíe argumentos a varios módulos MCA. Consulte la sección "MCA", a continuación.
Para depurar:
-depurar, --depurar
Invocar el depurador de nivel de usuario indicado por el orte_base_user_debugger MCA
parámetro.
-depurador, --depurador
Secuencia de depuradores para buscar cuando --depurar se utiliza (es decir, un sinónimo de
orte_base_user_debugger Parámetro MCA).
-televisión, --televisor
Inicie procesos en el depurador TotalView. Compatibilidad con versiones anteriores obsoleta
bandera. Sinónimo de --depurar.
También hay otras opciones:
--permitir-ejecutar-como-root
Permitir mpirún para ejecutar cuando lo ejecute el usuario root (mpirún predeterminado para abortar
cuando se inicia como usuario root).
-abortado, --abortado <#>
Establezca el número máximo de procesos abortados que se mostrarán.
--aplicación
Proporcione un archivo de aplicación, ignorando todas las demás opciones de la línea de comandos.
-cf, --cartofile
Proporcione un archivo de cartografía.
--hetero
Indica que se están proporcionando varios app_contexts que son una combinación de 32/64 bits
binarios.
-dejar-sesión-adjunta, --dejar-sesión-adjunta
No desconecte los demonios OmpiRTE utilizados por esta aplicación. Esto permite mensajes de error
de los demonios, así como del entorno subyacente (por ejemplo, cuando no se puede
lanzar un demonio) para su salida.
-ompi-servidor, --ompi-servidor <uri or archivo>
Especifique el URI del servidor Open MPI (o el mpirun que se utilizará como servidor),
el nombre del archivo (especificado como archivo: nombre de archivo) que contiene esa información, o el
PID (especificado como pid: #) del mpirun que se utilizará como
el servidor. El servidor Open MPI se utiliza para admitir datos de múltiples aplicaciones.
intercambiar a través de las funciones MPI-2 MPI_Publish_name y MPI_Lookup_name.
-informe-pid, --informe-pid
Imprima el PID de mpirun durante el inicio. El canal debe ser un '-' para indicar
Para indicar que el pid debe enviarse a stdout, un '+' para indicar que el pid debe
be outp ut a stderr, o un nombre de archivo en el que se escribirá el pid.
-informe-uri, --informe-uri
Imprima el URI de mpirun durante el inicio. El canal debe ser un '-' para indicar
Para indicar que el URI se enviará a stdout, un '+' para indicar que el URI debe
be outp ut a stderr, o un nombre de archivo en el que se escribirá el URI.
-esperar-al-servidor, --esperar-al-servidor
Pause mpirun antes de iniciar el trabajo hasta que se detecte ompi-server. Esto es útil
en scripts donde ompi-server puede iniciarse en segundo plano, seguido inmediatamente
Por una mpirún comando que desea conectarse a él. Mpirun se detendrá hasta que
se contacta con el servidor ompi especificado o se supera el tiempo de espera del servidor.
-servidor-tiempo-de-espera, --tiempo de espera del servidor
La cantidad máxima de tiempo (en segundos) que debe esperar mpirun para que el servidor ompi
comienzo. El valor predeterminado es 10 segundos.
Las siguientes opciones son útiles para los desarrolladores; generalmente no son útiles para la mayoría
Usuarios de ORTE y / o MPI:
-d, --depuración-desarrollo
Habilite la depuración de OmpiRTE (la capa de tiempo de ejecución en Open MPI). Esto no es
generalmente útil para la mayoría de los usuarios.
--demonios de depuración
Habilite la depuración de cualquier demonio OmpiRTE utilizado por esta aplicación.
--debug-demonios-archivo
Habilite la depuración de cualquier demonio OmpiRTE utilizado por esta aplicación, almacenando la salida en
archivos.
-agente-de-lanzamiento, --agente de lanzamiento
Nombre del ejecutable que se utilizará para iniciar procesos en los nodos remotos.
El valor predeterminado es "orted". Esta opción se puede utilizar para probar nuevos conceptos de demonio o para
devolver las opciones a los demonios sin que el propio mpirun las vea. Para
ejemplo, especificar un agente de lanzamiento de orted -mca odls_base_verbose 5 permite
desarrollador para pedirle al orted que depure la salida sin desorden de mpirun.
--noprefijo
Deshabilitar el comportamiento de prefijo automático
Puede haber otras opciones enumeradas con mpirún --ayuda.
Entorno Variables
MPIEXEC_TIMEOUT
El número máximo de segundos que mpirún (mpiexec) se ejecutará. Después de esto muchos
segundo, mpirún abortará el trabajo iniciado y saldrá.
DESCRIPCIÓN
Una invocación de mpirún inicia una aplicación MPI que se ejecuta en Open MPI. Si el
La aplicación es un solo proceso de datos múltiples (SPMD), la aplicación se puede especificar en
de la forma más mpirún línea de comando.
Si la aplicación es de múltiples instrucciones, múltiples datos (MIMD), que comprende múltiples
programas, el conjunto de programas y argumentos se pueden especificar de dos formas: Extendido
Argumentos de la línea de comandos y contexto de la aplicación.
Un contexto de aplicación describe el conjunto de programas MIMD que incluye todos los argumentos en un
archivo separado. Este archivo contiene esencialmente varios mpirún líneas de comando, menos el
nombre del comando en sí. La capacidad de especificar diferentes opciones para diferentes
La creación de instancias de un programa es otra razón para utilizar un contexto de aplicación.
Los argumentos extendidos de la línea de comando permiten la descripción del diseño de la aplicación en el
línea de comando usando dos puntos (:) para separar la especificación de programas y argumentos.
Algunas opciones se configuran globalmente en todos los programas especificados (por ejemplo, --hostfile), mientras que
otros son específicos de un solo programa (por ejemplo, -np).
Especificación Host Nodes
Los nodos de host se pueden identificar en el mpirún línea de comando con el -anfitrión opción o en una
archivo de host.
Por ejemplo,
mpirun -H aa, aa, bb ./a.out
lanza dos procesos en el nodo aa y uno en bb.
O, considere el archivo host
% gato myhostfile
aa ranuras = 2
ranuras bb = 2
ranuras cc = 2
Aquí, enumeramos los nombres de host (aa, bb y cc), pero también cuántas "ranuras" hay para
cada. Las ranuras indican cuántos procesos se pueden ejecutar potencialmente en un nodo. Para mejor
rendimiento, el número de ranuras se puede elegir para que sea el número de núcleos en el nodo o
el número de sockets del procesador. Si el archivo host no proporciona información sobre las ranuras,
se asume el valor predeterminado de 1. Cuando se ejecuta bajo administradores de recursos (p. Ej., SLURM, Torque,
etc.), Open MPI obtendrá tanto los nombres de host como el número de ranuras directamente del
administrador de recursos.
mpirun -hostfile mihostfile ./a.out
lanzará dos procesos en cada uno de los tres nodos.
mpirun -hostfile mihostfile -host aa ./a.out
lanzará dos procesos, ambos en el nodo aa.
mpirun -hostfile miarchivohost -host dd ./a.out
no encontrará hosts para ejecutar y abortará con un error. Es decir, el host especificado dd
no está en el archivo host especificado.
Especificación Número of Procesos
Como acabamos de ver, el número de procesos a ejecutar se puede configurar utilizando el archivo host. Otro
existen mecanismos.
El número de procesos iniciados se puede especificar como un múltiplo del número de nodos o
zócalos de procesador disponibles. Por ejemplo,
mpirun -H aa, bb -npersocket 2 ./a.out
lanza los procesos 0-3 en el nodo aa y el proceso 4-7 en el nodo bb, donde aa y bb son ambos
nodos de doble socket. los -npersocket La opción también enciende la -enlace a enchufe opción,
que se analiza en una sección posterior.
mpirun -H aa, bb -npernodo 2 ./a.out
lanza los procesos 0-1 en el nodo aa y los procesos 2-3 en el nodo bb.
mpirun -H aa, bb -npernodo 1 ./a.out
lanza un proceso por nodo host.
mpirun -H aa, bb -pernodo ./a.out
es el mismo que -npernodo 1.
Otra alternativa es especificar el número de procesos con el -notario público opción. Considerar
ahora el archivo host
% gato myhostfile
aa ranuras = 4
ranuras bb = 4
ranuras cc = 4
Ahora,
mpirun -hostfile mihostfile -np 6 ./a.out
lanzará los procesos 0-3 en el nodo aa y los procesos 4-5 en el nodo bb. El restante
ranuras en el archivo host no se utilizarán ya que el -notario público La opción indicó que solo 6
los procesos deben ser lanzados.
Mapeo Procesos a nodos: Gracias a Normas
Los ejemplos anteriores ilustran el mapeo predeterminado de procesos de proceso a nodos. Esta
El mapeo también se puede controlar con varios mpirún opciones que describen las políticas de mapeo.
Considere el mismo archivo host que el anterior, nuevamente con -notario público 6:
nodo aa nodo bb nodo cc
mpirun 0 1 2 3 4 5
mpirun: mapa por nodo 0 3 1 4 2 5
mpirun-nolocal 0 1 2 3 4 5
El sistema --mapa-por nodo La opción equilibrará la carga de los procesos en los nodos disponibles,
numerando cada proceso de forma rotatoria.
El sistema -nolocal La opción evita que los procesos se mapeen en el host local (en este
caso nodo aa). Tiempo mpirún normalmente consume pocos recursos del sistema, -nolocal puede ser
útil para iniciar trabajos muy grandes donde mpirún en realidad, puede necesitar usar notable
cantidades de memoria y / o tiempo de procesamiento.
Así como -notario público puede especificar menos procesos que espacios, también puede sobresuscribirse
las ranuras. Por ejemplo, con el mismo archivo host:
mpirun -hostfile mihostfile -np 14 ./a.out
lanzará los procesos 0-3 en el nodo aa, 4-7 en bb y 8-11 en cc. Luego agregará el
los dos procesos restantes a los nodos que elija.
También se pueden especificar límites a la suscripción excesiva. Por ejemplo, con el mismo archivo host:
mpirun -hostfile mihostfile -np 14 -nooversubscribe ./a.out
producirá un error ya que -nooversubscribe evita el exceso de suscripción.
Los límites a la suscripción excesiva también se pueden especificar en el propio archivo host:
% cat miarchivohost
aa ranuras = 4 max_slots = 4
bb max_slots = 4
ranuras cc = 4
El sistema ranuras_máximas campo especifica tal límite. Cuando lo hace, el ranuras el valor predeterminado es el
límite. Ahora:
mpirun -hostfile mihostfile -np 14 ./a.out
hace que los primeros 12 procesos se inicien como antes, pero los dos restantes
los procesos se forzarán en el nodo cc. Los otros dos nodos están protegidos por
hostfile contra la suscripción excesiva de este trabajo.
Usando el --nooversubscribe La opción puede ser útil ya que Open MPI actualmente no obtiene
Valores "max_slots" del administrador de recursos.
Por supuesto, -notario público también se puede utilizar con el -H or -anfitrión opción. Por ejemplo,
mpirun -H aa, bb -np 8 ./a.out
lanza 8 procesos. Dado que solo se especifican dos hosts, después de los dos primeros
los procesos están mapeados, uno a aa y uno a bb, los procesos restantes se sobrescriben
los hosts especificados.
Y aquí hay un ejemplo de MIMD:
mpirun -H aa -np 1 nombre de host: -H bb, cc -np 2 tiempo de actividad
iniciará el proceso 0 en ejecución hostname en el nodo aa y los procesos 1 y 2, cada uno en ejecución
el tiempo de actividad en los nodos bb y cc, respectivamente.
Cartografía, Clasificación, y Encuadernación: Oh ¡Mi!
Open MPI emplea un procedimiento de tres fases para asignar ubicaciones y rangos de procesos:
cartografía Asigna una ubicación predeterminada a cada proceso
clasificación Asigna un valor de rango MPI_COMM_WORLD a cada proceso
uniéndose Restringe cada proceso para que se ejecute en procesadores específicos
El sistema cartografía El paso se utiliza para asignar una ubicación predeterminada a cada proceso según el mapeador.
ser empleado. El mapeo por ranura, nodo y secuencialmente da como resultado la asignación de
procesos a nivel de nodo. Por el contrario, el mapeo por objeto permite al mapeador asignar
el proceso a un objeto real en cada nodo.
Nota: la ubicación asignada al proceso es independiente de a dónde se dirigirá: el
La asignación se utiliza únicamente como entrada al algoritmo de vinculación.
El mapeo de los procesos de proceso a los nodos se puede definir no solo con políticas generales
pero también, si es necesario, usando mapeos arbitrarios que no pueden ser descritos por un simple
política. Se puede usar el "mapeador secuencial", que lee el archivo host línea por línea,
asignar procesos a los nodos en cualquier orden que especifique el archivo host. Utilizar el -mca mapas
ss opción. Por ejemplo, usando el mismo archivo host que antes:
mpirun -hostfile mihostfile -mca rmaps seq ./a.out
lanzará tres procesos, uno en cada uno de los nodos aa, bb y cc, respectivamente. El hueco
los recuentos no importan; se inicia un proceso por línea en cualquier nodo que se enumere en el
la línea.
Otra forma de especificar asignaciones arbitrarias es con un archivo de rango, que le brinda información detallada
control sobre la unión del proceso también. Los archivos de rango se analizan a continuación.
La segunda fase se centra en la clasificación del proceso dentro del MPI_COMM_WORLD del trabajo.
Open MPI separa esto del procedimiento de mapeo para permitir más flexibilidad en el
ubicación relativa de los procesos MPI. Esto se ilustra mejor si se considera lo siguiente
dos casos en los que usamos la opción —map-by ppr: 2: socket:
nodo aa nodo bb
rango por núcleo 0 1! 2 3 4 5! 6 7
zócalo de rango 0 2! 1 3 4 6! 5 7
zócalo de rango: span 0 4! 1 5 2 6! 3 7
La clasificación por núcleo y por ranura proporciona el resultado idéntico: una simple progresión de
MPI_COMM_WORLD se clasifica en cada nodo. La clasificación por socket hace una clasificación por turnos dentro de
cada nodo hasta que a todos los procesos se les haya asignado un rango MCW, y luego progrese a la
siguiente nodo. Añadiendo el lapso El modificador de la directiva de clasificación hace que el algoritmo de clasificación
para tratar toda la asignación como una sola entidad, por lo tanto, los rangos de MCW se asignan
en todos los enchufes antes de dar la vuelta al principio.
El sistema uniéndose fase realmente une cada proceso a un conjunto dado de procesadores. Esto puede
mejorar el rendimiento si el sistema operativo coloca los procesos de manera subóptima. Para
ejemplo, podría suscribir en exceso algunos sockets de procesador de múltiples núcleos, dejando otros sockets
inactivo; esto puede llevar a los procesos a competir innecesariamente por recursos comunes. O es
podría extender los procesos demasiado ampliamente; esto puede ser subóptimo si el rendimiento de la aplicación
es sensible a los costos de comunicación entre procesos. La unión también puede mantener el funcionamiento
sistema de migrar procesos excesivamente, independientemente de cuán óptimos esos procesos
se colocaron para empezar.
Los procesadores que se utilizarán para la unión se pueden identificar en términos de agrupaciones topológicas
- por ejemplo, la vinculación a un caché l3 vinculará cada proceso a todos los procesadores dentro del alcance de
una única caché L3 dentro de su ubicación asignada. Por tanto, si un proceso es asignado por el
mapeador a un determinado socket, luego un -unirse a l3caché directiva hará que el proceso sea
vinculado a los procesadores que comparten una única caché L3 dentro de ese socket.
Para ayudar a equilibrar las cargas, la directiva de vinculación utiliza un método por turnos cuando se vincula a
niveles más bajos que los utilizados en el mapeador. Por ejemplo, considere el caso en el que se asigna un trabajo
al nivel del zócalo, y luego enlazado al núcleo. Cada socket tendrá varios núcleos, así que si
se asignan varios procesos a un socket dado, el algoritmo de enlace asignará cada uno
proceso ubicado en un zócalo a un núcleo único de manera rotatoria.
Alternativamente, los procesos mapeados por l2cache y luego vinculados a socket simplemente estarán vinculados
a todos los procesadores en el socket donde se encuentran. De esta manera, los usuarios pueden
ejercer un control detallado sobre la ubicación y la unión del rango de MCW relativo.
Finalmente, --enlaces de informes se puede utilizar para informar enlaces.
Como ejemplo, considere un nodo con dos zócalos de procesador, cada uno con cuatro núcleos. Nosotros
run mpirún con -notario público 4 --enlaces de informes y las siguientes opciones adicionales:
% mpirun... --map-by core --bind-to core
[...] ... vinculante hijo [..., 0] a cpus 0001
[...] ... vinculante hijo [..., 1] a cpus 0002
[...] ... vinculante hijo [..., 2] a cpus 0004
[...] ... vinculante hijo [..., 3] a cpus 0008
% mpirun... --map-by socket --bind-to socket
[...] ... vinculando hijo [..., 0] al zócalo 0 cpus 000f
[...] ... vinculando hijo [..., 1] al zócalo 1 cpus 00f0
[...] ... vinculando hijo [..., 2] al zócalo 0 cpus 000f
[...] ... vinculando hijo [..., 3] al zócalo 1 cpus 00f0
% mpirun ... --map-by core: PE = 2 --bind-to core
[...] ... vinculante hijo [..., 0] a cpus 0003
[...] ... vinculante hijo [..., 1] a cpus 000c
[...] ... vinculante hijo [..., 2] a cpus 0030
[...] ... vinculante hijo [..., 3] a cpus 00c0
% mpirun... --bind-to none
Aquí, --enlaces de informes muestra la unión de cada proceso como una máscara. En el primer caso,
los procesos se unen a núcleos sucesivos como lo indican las máscaras 0001, 0002, 0004 y
0008. En el segundo caso, los procesos se unen a todos los núcleos en sockets sucesivos como se indica
por las máscaras 000f y 00f0. Los procesos pasan por los zócalos del procesador en una ronda-
robin fashion tantas veces como sea necesario. En el tercer caso, las máscaras nos muestran que 2
los núcleos se han unido por proceso. En el cuarto caso, la encuadernación está desactivada y no
se informan las uniones.
El soporte de Open MPI para el enlace de procesos depende del sistema operativo subyacente.
Por lo tanto, es posible que algunas opciones de enlace de procesos no estén disponibles en todos los sistemas.
El enlace de proceso también se puede configurar con parámetros MCA. Su uso es menos conveniente que
que de mpirún opciones. Por otro lado, los parámetros MCA se pueden configurar no solo en el
mpirún línea de comandos, pero alternativamente en un sistema o usuario archivo mca-params.conf o como
variables de entorno, como se describe en la sección MCA a continuación. Algunos ejemplos incluyen:
Valor de la clave del parámetro MCA de la opción mpirun
--mapa-por núcleo rmaps_base_mapping_policy núcleo
--map-by socket rmaps_base_mapping_policy socket
--núcleo de clasificación por núcleo rmaps_base_ranking_policy
--bind-to core hwloc_base_binding_policy core
--bind-to socket hwloc_base_binding_policy socket
--bind-to none hwloc_base_binding_policy ninguno
Archivos de clasificación
Los Rankfiles son archivos de texto que especifican información detallada sobre cómo los procesos individuales
deben asignarse a los nodos y a qué procesadores deben estar vinculados. Cada línea de un
rankfile especifica la ubicación de un proceso (para trabajos MPI, el "rango" del proceso se refiere
a su rango en MPI_COMM_WORLD). La forma general de cada línea en el archivo de rango es:
rango = ranura =
Por ejemplo:
$ gato mi archivo de clasificación
rango 0 = aa ranura = 1: 0-2
rango 1 = ranura bb = 0: 0,1
rango 2 = espacio cc = 1-2
$ mpirun -H aa, bb, cc, dd -rf myrankfile ./a.out
Significa que
El rango 0 se ejecuta en el nodo aa, vinculado al socket lógico 1, núcleos 0-2.
El rango 1 se ejecuta en el nodo bb, vinculado al socket lógico 0, núcleos 0 y 1.
El rango 2 se ejecuta en el nodo cc, vinculado a los núcleos lógicos 1 y 2.
Los Rankfiles se pueden utilizar alternativamente para especificar los libros físicos ubicaciones del procesador. En este caso,
la sintaxis es algo diferente. Los sockets ya no se reconocen y el número de ranura
dado debe ser el número de la PU física, ya que la mayoría de los sistemas operativos no asignan una
identificador de cada núcleo en el nodo. Por lo tanto, un archivo de rango físico adecuado se parece a
el seguimiento:
$ gato mi archivo de clasificación física
rango 0 = aa ranura = 1
rango 1 = ranura bb = 8
rango 2 = ranura cc = 6
Esto significa que
El rango 0 se ejecutará en el nodo aa, vinculado al núcleo que contiene la PU física 1
El rango 1 se ejecutará en el nodo bb, vinculado al núcleo que contiene la PU 8 física
El rango 2 se ejecutará en el nodo cc, vinculado al núcleo que contiene la PU 6 física
Los archivos de rango se tratan como lógico por defecto, y el parámetro MCA
rmaps_rank_file_physical debe establecerse en 1 para indicar que el archivo de rango debe ser
considerado como los libros físicos.
Los nombres de host enumerados anteriormente son "absolutos", lo que significa que los nombres de host
especificado. Sin embargo, los nombres de host también se pueden especificar como "relativos", lo que significa que son
especificado en relación con una lista de nombres de host especificada externamente (por ejemplo, por mpirun's
- argumento de host, un archivo host o un programador de trabajos).
La especificación "relativa" tiene la forma "+ n ", donde X es un número entero que especifica el
Xth nombre de host en el conjunto de todos los nombres de host disponibles, indexados desde 0. Por ejemplo:
$ gato mi archivo de clasificación
rank 0=+n0 slot=1:0-2
rango 1 = + n1 ranura = 0: 0,1
rango 2 = + n2 espacio = 1-2
$ mpirun -H aa, bb, cc, dd -rf myrankfile ./a.out
A partir de Open MPI v1.7, todas las ubicaciones de las ranuras de socket / core se especifican como lógico
índices (la serie Open MPI v1.6 utilizada los libros físicos índices). Puede utilizar herramientas como
"Lstopo" de HWLOC para encontrar los índices lógicos de socket y núcleos.
Application Contexto or Ejecutable ¿Programa?
Para distinguir las dos formas diferentes, mpirún busca en la línea de comandos --aplicación .
Si se especifica, se asume que el archivo nombrado en la línea de comando es un
contexto de la aplicación. Si no se especifica, se asume que el archivo es un ejecutable
.
Localización archivos
Si no se especifica una ruta relativa o absoluta para un archivo, Open MPI buscará primero
archivos buscando en los directorios especificados por el --sendero opción. Si no hay --sendero
conjunto de opciones o si el archivo no se encuentra en el --sendero ubicación, luego Open MPI buscará
la variable de entorno PATH del usuario tal como se define en los nodos de origen.
Si se especifica un directorio relativo, debe ser relativo al directorio de trabajo inicial
determinado por el motor de arranque específico utilizado. Por ejemplo, al utilizar los iniciadores rsh o ssh,
el directorio inicial es $ HOME por defecto. Otros principiantes pueden establecer el directorio inicial en
el directorio de trabajo actual de la invocación de mpirún.
Current Acoplar Directory
El sistema -wdir opción mpirun (y su sinónimo, -wd) permite al usuario cambiar a un arbitrario
directorio antes de que se invoque el programa. También se puede utilizar en archivos de contexto de aplicaciones.
para especificar directorios de trabajo en nodos específicos y / o para aplicaciones específicas.
Si -wdir La opción aparece tanto en un archivo de contexto como en la línea de comando, el contexto
El directorio de archivos anulará el valor de la línea de comandos.
Si -wdir se especifica la opción, Open MPI intentará cambiar a la especificada
directorio en todos los nodos remotos. Si esto falla, mpirún abortará.
Si -wdir opción es no especificado, Open MPI enviará el nombre del directorio donde mpirún
se invocó a cada uno de los nodos remotos. Los nodos remotos intentarán cambiar a eso
directorio. Si no pueden (por ejemplo, si el directorio no existe en ese nodo), entonces
Open MPI utilizará el directorio predeterminado determinado por el iniciador.
Todo cambio de directorio ocurre antes de que se invoque el programa del usuario; no espera hasta
MPI_INIT se llama.
Estándar I / O
Open MPI dirige la entrada estándar de UNIX a / dev / null en todos los procesos excepto el
Proceso de rango 0 de MPI_COMM_WORLD. El proceso de rango 0 de MPI_COMM_WORLD hereda la entrada estándar
obtenidos de mpirún. Nota: El nodo que invocó mpirún no es necesario que sea el mismo que el nodo donde
reside el proceso de rango 0 de MPI_COMM_WORLD. Open MPI maneja la redirección de mpirún's
entrada estándar al proceso de rango 0.
Open MPI dirige la salida estándar de UNIX y el error de los nodos remotos al nodo que invocó
mpirún y lo imprime en la salida / error estándar de mpirún. Los procesos locales heredan la
salida estándar / error de mpirún y transferirlo directamente.
Por lo tanto, es posible redirigir la E / S estándar para aplicaciones Open MPI utilizando el
procedimiento típico de redirección de shell en mpirún.
% mpirun -np 2 my_app <my_input> my_output
Tenga en cuenta que en este ejemplo only el proceso de rango 0 de MPI_COMM_WORLD recibirá la transmisión
obtenidos de mi_entrada en stdin. El stdin en todos los demás nodos estará vinculado a / dev / null.
Sin embargo, la salida estándar de todos los nodos se recopilará en el mi_salida archivo.
Signal Propagación
Cuando orterun recibe un SIGTERM y SIGINT, intentará acabar con todo el trabajo
enviando todos los procesos en el trabajo un SIGTERM, esperando una pequeña cantidad de segundos, luego
enviando todos los procesos en el trabajo a SIGKILL.
Las señales SIGUSR1 y SIGUSR2 recibidas por orterun se propagan a todos los procesos en el
trabajo.
Se puede activar el reenvío de SIGSTOP y SIGCONT al programa ejecutado por mpirun por
configurando el parámetro MCA orte_forward_job_control en 1. Una señal SIGTSTOP a mpirun
luego haga que se envíe una señal SIGSTOP a todos los programas iniciados por mpirun y
Asimismo, una señal SIGCONT a mpirun hará que se envíe un SIGCONT.
Orterun no propaga actualmente otras señales.
Procesos Terminación / Signal Manejo
Durante la ejecución de una aplicación MPI, si algún proceso muere de forma anormal (ya sea al salir
antes de invocar MPI_FINALIZAR, o morir como resultado de una señal), mpirún imprimirá
un mensaje de error y elimine el resto de la aplicación MPI.
Los manejadores de señales de usuario probablemente deberían evitar intentar limpiar el estado de MPI (Open MPI es
actualmente no es seguro para señales asíncronas; ver MPI_Init_thread(3) para obtener detalles sobre
MPI_THREAD_MULTIPLE y seguridad del hilo). Por ejemplo, si se produce una falla de segmentación en
MPI_ENVIAR (tal vez porque se pasó un búfer defectuoso) y un manejador de señales de usuario es
invocado, si este controlador de usuario intenta invocar MPI_FINALIZAR, Pueden pasar cosas malas
ya que Open MPI ya estaba "en" MPI cuando ocurrió el error. Ya que mpirún se dará cuenta
que el proceso murió debido a una señal, probablemente no sea necesario (y más seguro) para el
usuario para limpiar solo el estado no MPI.
Procesos Entorno
Los procesos en la aplicación MPI heredan su entorno del demonio Open RTE al
el nodo en el que se están ejecutando. El medio ambiente se hereda típicamente del
shell del usuario. En los nodos remotos, el entorno exacto lo determina el módulo de arranque MCA
usó. La rsh El módulo de lanzamiento, por ejemplo, usa rsh/ssh para iniciar el Open RTE
demonio en nodos remotos, y normalmente ejecuta uno o más de los archivos de configuración de shell del usuario
antes de lanzar el demonio Open RTE. Al ejecutar aplicaciones vinculadas dinámicamente que
requieren el LD_LIBRARY_PATH variable de entorno que se va a establecer, se debe tener cuidado para garantizar
que está configurado correctamente al arrancar Open MPI.
Consulte la sección "Ejecución remota" para obtener más detalles.
Remote Ejecución
Open MPI requiere que el TRAYECTORIA la variable de entorno se configura para encontrar ejecutables en remoto
nodos (esto normalmente solo es necesario en rsh- o ssh-ambientes basados en -
Los entornos por lotes / programados suelen copiar el entorno actual a la ejecución de
trabajos remotos, por lo que si el entorno actual ha TRAYECTORIA y/o LD_LIBRARY_PATH configurado correctamente,
los nodos remotos también lo tendrán configurado correctamente). Si Open MPI se compiló con shared
apoyo de la biblioteca, también puede ser necesario tener el LD_LIBRARY_PATH Variable ambiental
establecer en nodos remotos también (especialmente para encontrar las bibliotecas compartidas necesarias para ejecutar el usuario
Aplicaciones MPI).
Sin embargo, no siempre es deseable o posible editar los archivos de inicio de shell para configurar TRAYECTORIA
y/o LD_LIBRARY_PATH. --prefijo se proporciona la opción para algunas configuraciones simples
donde esto no es posible.
El sistema --prefijo La opción toma un solo argumento: el directorio base en el nodo remoto donde
Open MPI está instalado. Open MPI usará este directorio para configurar el control remoto TRAYECTORIA y
LD_LIBRARY_PATH antes de ejecutar cualquier Open MPI o aplicaciones de usuario. Esto permite correr
Abrir trabajos MPI sin haber preconfigurado el TRAYECTORIA y LD_LIBRARY_PATH en el control remoto
nodos
Open MPI agrega el nombre base del "bindir" del nodo actual (el directorio donde Open MPI's
ejecutables están instalados) al prefijo y lo utiliza para establecer el TRAYECTORIA en el nodo remoto.
De manera similar, Open MPI agrega el nombre base del "libdir" del nodo actual (el directorio donde
Las bibliotecas de Open MPI están instaladas) con el prefijo y lo usa para configurar el LD_LIBRARY_PATH
en el nodo remoto. Por ejemplo:
Bindir local: / local / nodo / directorio / bin
Libdir local: / local / nodo / directorio / lib64
Si se utiliza la siguiente línea de comando:
% mpirun --prefijo / remoto / nodo / directorio
Open MPI agregará "/ remote / node / directory / bin" al TRAYECTORIA y
"/ remote / node / directory / lib64" a D_LIBRARY_PATH en el nodo remoto antes de intentar
para ejecutar cualquier cosa.
El sistema --prefijo La opción no es suficiente si las rutas de instalación en el nodo remoto son
diferente al nodo local (p. ej., si "/ lib"se utiliza en el nodo local, pero"/ lib64"es
utilizado en el nodo remoto), o si las rutas de instalación no son
subdirectorio bajo un prefijo común.
Tenga en cuenta que ejecutar mpirún a través de un nombre de ruta absoluto es equivalente a especificar --prefijo
sin el último subdirectorio en la ruta absoluta a mpirún. Por ejemplo:
% / usr / local / bin / mpirun ...
es equivalente a
% mpirun --prefijo / usr / local
Exportado Entorno Variables
Todas las variables de entorno que se nombran en el formulario OMPI_ * se exportarán automáticamente
a nuevos procesos en los nodos locales y remotos. Los parámetros ambientales también pueden ser
establecer / reenviar a los nuevos procesos utilizando el parámetro MCA mca_base_env_list. -x
opción de mpirún ha sido desaprobado, pero la sintaxis del parámetro MCA sigue que antes
ejemplo. Mientras que la sintaxis del -x La opción y el parámetro MCA permiten la definición de nuevos
variables, tenga en cuenta que el analizador de estas opciones actualmente no es muy sofisticado:
ni siquiera comprende los valores cotizados. Se aconseja a los usuarios que establezcan variables en el
entorno y utilice la opción para exportarlos; no para definirlos.
Fijar MCA parámetros
El sistema -mca El interruptor permite el paso de parámetros a varios MCA (Componente Modular
Arquitectura) módulos. Los módulos MCA tienen un impacto directo en los programas MPI porque permiten
parámetros ajustables que se establecerán en tiempo de ejecución (como qué controlador de dispositivo de comunicación BTL
usar, qué parámetros pasar a ese BTL, etc.).
El sistema -mca switch toma dos argumentos: y . argumento en general
especifica qué módulo MCA recibirá el valor. Por ejemplo, el se utiliza "btl"
para seleccionar qué BTL se utilizará para transportar mensajes MPI. los argumento es el
valor que se pasa. Por ejemplo:
mpirun -mca btl tcp, self -np 1 foo
Le dice a Open MPI que use los BTL "tcp" y "self", y que ejecute una sola copia de "foo" y
nodo asignado.
mpirun -mca btl auto -np 1 foo
Le dice a Open MPI que use el BTL "self" y que ejecute una única copia de "foo" y
nodo.
El sistema -mca El interruptor se puede utilizar varias veces para especificar diferentes y/o
argumentos. Si el mismo se especifica más de una vez, el s están concatenados
con una coma (",") separándolos.
Tenga en cuenta que -mca Switch es simplemente un atajo para configurar variables de entorno. los
El mismo efecto se puede lograr estableciendo las variables de entorno correspondientes antes
correr mpirún. La forma de las variables de entorno que establece Open MPI es:
OMPI_MCA_ =
Por lo tanto, la -mca el conmutador anula cualquier variable de entorno establecida previamente. los -mca
los ajustes anulan de forma similar los parámetros de MCA establecidos en $ OPAL_PREFIX / etc / openmpi-mca-
params.conf o archivo $ HOME / .openmpi / mca-params.conf.
Desconocido Los argumentos todavía se establecen como variables de entorno, no se verifican (por
mpirún) para la corrección. Ilegal o incorrecto Los argumentos pueden o no ser
informado: depende del módulo MCA específico.
Para encontrar los tipos de componentes disponibles bajo la arquitectura MCA, o para encontrar los
parámetros para un componente específico, utilice el ompi_info mando. Ver el ompi_info(1) hombre
página para obtener información detallada sobre el comando.
Correr as raíz
El equipo de Open MPI desaconseja encarecidamente ejecutar mpirún como usuario root. MPI
las aplicaciones deben ejecutarse como usuarios habituales (no root).
Como reflejo de este consejo, mpirun se negará a ejecutarse como root de forma predeterminada. Para anular esto
predeterminado, puede agregar el --permitir-ejecutar-como-root opción a la mpirún línea de comando.
Exit estado
No existe una definición estándar de lo que mpirún debe volver como estado de salida. Después
considerable discusión, nos decidimos por el siguiente método para asignar el mpirún salida
estado (nota: en la siguiente descripción, el trabajo "principal" es la aplicación inicial
iniciado por mpirun: todos los trabajos generados por ese trabajo se designan como "secundarios"
trabajos):
· Si todos los procesos en el trabajo principal normalmente terminan con el estado de salida 0, devolvemos 0
· Si uno o más procesos en el trabajo principal normalmente terminan con una salida distinta de cero
estado, devolvemos el estado de salida del proceso con el rango MPI_COMM_WORLD más bajo a
tener un estado distinto de cero
· Si todos los procesos en el trabajo principal normalmente terminan con el estado de salida 0, y uno o
más procesos en un trabajo secundario normalmente terminan con un estado de salida distinto de cero, nosotros (a)
devolver el estado de salida del proceso con el rango MPI_COMM_WORLD más bajo en el más bajo
jobid para tener un estado distinto de cero, y (b) generar un mensaje que resuma el estado de salida de
los trabajos primarios y secundarios.
· Si se establece la opción de línea cmd --report-child-jobs-por separado, devolveremos -sólo- el
estado de salida del trabajo principal. Cualquier estado de salida distinto de cero en trabajos secundarios será
informado únicamente en una declaración impresa resumida.
De forma predeterminada, OMPI registra y observa que los procesos de MPI salieron con una terminación distinta de cero
estado. Por lo general, esto no se considera una "terminación anormal", es decir, OMPI no
abortar un trabajo MPI si uno o más procesos devuelven un estado distinto de cero. En cambio, el valor predeterminado
comportamiento simplemente informa el número de procesos que terminan con un estado distinto de cero al
finalización del trabajo.
Sin embargo, en algunos casos puede ser deseable que el trabajo se interrumpa cuando cualquier proceso
termina con un estado distinto de cero. Por ejemplo, un trabajo que no es MPI puede detectar un mal resultado de
un cálculo y quiere abortar, pero no quiere generar un archivo central. O un trabajo de MPI
podría continuar después de una llamada a MPI_Finalize, pero indicar que todos los procesos deben abortar
debido a algún resultado post-MPI.
No se prevé que esta situación ocurra con frecuencia. Sin embargo, en el interés
de servir a la comunidad en general, OMPI ahora tiene un medio para permitir que los usuarios dirijan
los trabajos se abortarán ante cualquier proceso que salga con un estado distinto de cero. Configuración del parámetro MCA
"orte_abort_on_non_zero_status" a 1 hará que OMPI anule todos los procesos una vez
salidas con estado distinto de cero.
Las terminaciones causadas de esta manera se informarán en la consola como un "anormal
terminación ", con el primer proceso para salir identificado junto con su estado de salida.
EJEMPLOS
Asegúrese también de ver los ejemplos en las secciones anteriores.
mpirun -np 4 -mca btl ib, tcp, autoprog1
Ejecute 4 copias de prog1 usando los BTL "ib", "tcp" y "self" para el transporte de MPI
mensajes.
mpirun -np 4 -mca btl tcp, sm, self
--mca btl_tcp_if_include eth0 prog1
Ejecute 4 copias de prog1 usando los BTL "tcp", "sm" y "self" para el transporte de MPI
mensajes, con TCP usando solo la interfaz eth0 para comunicarse. Tenga en cuenta que otros BTL
tienen parámetros if_include MCA similares.
DEVOLUCION VALOR
mpirún devuelve 0 si todos los procesos iniciados por mpirún salir después de llamar a MPI_FINALIZE. A
Se devuelve un valor distinto de cero si se produjo un error interno en mpirun, o uno o más
los procesos salieron antes de llamar a MPI_FINALIZE. Si ocurrió un error interno en mpirun,
se devuelve el código de error correspondiente. En el caso de que uno o más procesos salgan
antes de llamar a MPI_FINALIZE, el valor de retorno del rango MPI_COMM_WORLD del proceso
que mpirún Se devolverán los primeros avisos que murieron antes de llamar a MPI_FINALIZE. Tenga en cuenta que,
en general, este será el primer proceso que falleció, pero no se garantiza que sea así.
Utilice mpiexec.openmpi en línea utilizando los servicios de onworks.net