Как можно организовать что-то на подобе глобальной переменной в
MPI? Интересует любой вариант (файловая система, межпроцессорное взоимодействие...). Должно быть расширяемым. Тестирование на 4-х процессорах, будет запускаться на 4096-ти.
Заготовка программы:
#include <cstdio>
#include <vector>
#include <mpi.h>
#include "tools.h"
using namespace std;
unsigned long long d = 0;
unsigned long long get_new_d(int ccpu)
{
d++;
return d;
}
int main(int argc, char *argv[])
{
int ccpu, nprocs;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &ccpu);
printf("%d: %lld\n",ccpu,get_new_d(ccpu));
MPI_Finalize();
return 0;
}
Запуск:
#!/bin/bash
N_PROCESSORS=4
mpiexec -n ${N_PROCESSORS} bent_mpi
Что должно быть? Функция
get_new_d должна возвращать каждый раз значение
d на 1 больше, чем максимальное
d среди всех процессов. Что-то типа:
3: 1
0: 2
1: 3
2: 4
Кто подскажет (а лучше покажет) что-то типа семафора (мьютекса) в MPI тоже буду рад.