esta es la forma de uso MPI_Init función

int main(int argc, char **argv)
{
    MPI_Init(&argc, &argv);
…
}

¿por qué MPI_Init el uso de punteros a argc y argv en lugar de los valores de argv?

  • Se pasan por referencia, para permitir una implementación de MPI para proveer de ellos en entornos donde los argumentos de línea de comandos no son proporcionados principal. mpi-forum.org/docs/mpi-11-html/node151.html alguien puede arrojar más luz sobre esto con un ejemplo?
InformationsquelleAutor Rohit Banga | 2010-04-15

5 Comentarios

  1. 19

    De acuerdo a la respuesta indica aquí:

    Paso de argumentos a través de la línea de comandos con MPI

    La mayoría de las implementaciones de MPI va a quitar las mpirun-relacionados con los argumentos de esta función, así que, después de llamar, usted puede tratar argumentos de línea de comandos como si se tratase de una normal (no mpirun) la ejecución de comandos.

    es decir, después de

    mpirun -np 10 myapp myparam1 myparam2
    

    argc = 7(?) debido a la mpirun parámetros (parece también agregar algunos) y los índices de myparam1 y myparam2 son desconocidos

    pero después de

    MPI_Init(&argc, &argv)
    

    argc = 3 y myparam1 es en argv[1] y myparam2 es en argv[2]

    Al parecer esto está fuera de la norma, pero lo he probado en linux mpich y ciertamente parece ser el caso. Sin este comportamiento sería muy difícil (¿imposible?) para distinguir los parámetros de aplicación de mpirun parámetros.

    • Al menos mpirun de OpenMPI 3.1.1 tiras de sus parámetros, incluso antes de llamar a los subprogramas, de manera que obtendrá argc = 3 incluso antes de llamar MPI_Init.
  2. 4

    supongo que potencialmente permiten eliminar mpi argumentos de línea de comandos.
    pasando argumento de conteo puntero permite modificar su valor desde el punto de principal.

    • ¿por qué habría de hacer eso? lo que si me examinar los argumentos antes de llamar a MPI_Init
    • Para analizar MPI argumentos específicos. No tengo ejemplo para MPI, pero GTK GUI toolkit tiene casi idénticos gtk_init función, que los filtros comunes a X de la línea de comandos opciones, tales como --display y --screen.
    • Usted puede examinar el contenido de argc y argv antes de llamadas MPI_Init. Además, usted puede pasar ficticio argumentos para MPI_Init si desea guardar los originales. 🙂 (Estoy de acuerdo en que no es muy elegante pero no es una solución.)
  3. 1

    Yo no soy un experto pero creo que la respuesta simple es que cada nodo que se está trabajando, está trabajando con su propia copia del código. Pasando estos argumentos permite a cada uno de los nodos para tener acceso a argc y argv incluso a pesar de que no les pasa a través de la interfaz de línea de comandos.
    El original o nodo maestro que llama MPI_Init es pasado estos argumentos. MPI_Init permite a los otros nodos, para acceder a ellos.

  4. -5

    Es menos sobrecarga para pasar dos punteros.

    • en realidad me refería a invocar a la función como MPI_Init(argc, argv);
    • que es también una menor sobrecarga.
    • Bien, muchas veces, en la práctica, el MPI código es el conjunto ejecutable por lo que no tendría sentido aprobar todos los argumentos de línea de comandos. Recuerde, sin embargo, argc y argv son sólo los nombres de variables locales. Dentro de su código antes de llamar MPI_Init() puede pasar lo que quiera.

Dejar respuesta

Please enter your comment!
Please enter your name here