MPI - изменение количества запущенных процессов

Я начинаю с MPI. Я хотел попробовать классическую программу «Hello, world», которая также будет печатать номер каждого процесса и кое-какую другую информацию. Моя программа работает, но я немного не понимаю, как на самом деле работает mpiexec. Проблема в том, что когда я указываю количество процессов, иногда они просто не запускаются. Например, я использую эту команду:

mpiexec -np 4 ./hello

но запускаются только 2 или 3 процесса, а не 4. Это количество запущенных процессов меняется, поэтому я действительно запутался. Проблема в моем компе (у меня только дуалкор) или это нормально?


привет.c:

#include <stdio.h>
#include <mpi.h>

int main(){
    MPI_Init(NULL, NULL);

    // Number of processes
    int world_size;
    MPI_Comm_size( MPI_COMM_WORLD, &world_size );

    // Number of current process
    int process_id;
    MPI_Comm_rank( MPI_COMM_WORLD, &process_id );

    // Processor name
    char processor_name[ MPI_MAX_PROCESSOR_NAME ];
    int name_len;
    MPI_Get_processor_name( processor_name, &name_len );

    printf("Hello! - sent from process %d running on processor %s.\n\
        Number of processes is %d.\n\
        Length of proc name is %d.\n\
        ***********************\n",
        process_id, processor_name, world_size, name_len);

    return 0;
}

person Eenoku    schedule 21.12.2014    source источник


Ответы (1)


Моя ошибка была довольно глупой. Мне просто не хватало функции MPI_Finalize() перед return.


Правильный код:

#include <stdio.h>
#include <mpi.h>

int main(){
    MPI_Init(NULL, NULL);

    // Number of processes
    int world_size;
    MPI_Comm_size( MPI_COMM_WORLD, &world_size );

    // Number of current process
    int process_id;
    MPI_Comm_rank( MPI_COMM_WORLD, &process_id );

    // Processor name
    char processor_name[ MPI_MAX_PROCESSOR_NAME ];
    int name_len;
    MPI_Get_processor_name( processor_name, &name_len );

    printf("Hello! - sent from process %d running on processor %s.\n\
        Number of processes is %d.\n\
        Length of proc name is %d.\n\
        ***********************\n",
        process_id, processor_name, world_size, name_len);

    MPI_Finalize();
    return 0;
}
person Eenoku    schedule 21.12.2014