У меня проблемы с завершением моей программы с использованием MS-MPI.
Все возвращаемые значения выглядят нормально, но мне нужно нажать Ctrl + C в cmd, чтобы завершить его (не похоже, что он все еще вычисляется, поэтому условие выходавыглядит хорошо).
Я хочу запустить программу, используя N процессов.Когда один из них находит решение, он должен установить флаг как false, отправить его всем остальным, а затем на следующей итерации все они остановятся и программа завершится.
Программа на самом деле выполняет более сложные вычисления, и я работаюв упрощенном варианте для ясности.Я просто хотел убедиться, что связь работает.
int main(int argc, char* argv[])
{
MPI_Init(&argc, &argv);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
//sets as 0 -> (N-1) depending on number of processes running
int c = world_rank;
bool flag = true;
while (flag) {
std::cout << "process: " << world_rank << " value: " << c << std::endl;
c += world_size;
//dummy condition just to test stop
if (c == 13) {
flag = false;
}
MPI_Barrier(MPI_COMM_WORLD);
//I have also tried using MPI_Bcast without that if
if(!flag) MPI_Bcast(&flag, 1, MPI_C_BOOL, world_rank, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
} //end of while
MPI_Finalize();
return 0;
}
Как мне кажется, что она работает: она начинается с каждого процесса, определяющего его c и флаг, затем на каждом (пока) проходе она увеличивает свой c на фиксированныйчисло.Затем, когда он достигает условия остановки, он устанавливает флаг как ложный и отправляет его всем остальным процессам.Что я получаю, когда запускаю его с 4 процессами:
процесс: 0 значение: 0
процесс: 2 значение: 2
процесс: 1 значение: 1
процесс: 3 значение: 3
процесс: 1 значение: 5
процесс: 3 значение: 7
процесс: 0 значение: 4
процесс: 2 значение: 6
процесс: 3 значение: 11
процесс:1 значение: 9
процесс: 2 значение: 10
процесс: 0 значение: 8
процесс: 3 значение: 15
процесс: 2 значение: 14
процесс: 0 значение: 12
(я в порядке с этими несколькими дополнительными значениями)
Но после этого я должен вручную завершить его с помощью Ctrl + C.При запуске на 1 процессе он плавно переходит от 1 до 12 и выходит.