Я создаю программу MPI на C, имитирующую сеть Wi-Fi. В этом сетевом узле ранжированный 0 является базовой станцией, в то время как узлы с 1 по 20 являются устройствами Wi-Fi. Каждый узел с рангом 1 и выше отправляет случайное число некоторым другим конкретным ненулевым узлам. Затем принимающие узлы сравнивают эти числа и, если они равны, отправляют сообщение на узел 0. Моя цель - получить все сообщения на узле 0 и сразу записать их в текстовый файл, но я не знаю, как я могуубедитесь, что больше сообщений не будет получено, чтобы мой процесс записи не прерывался или не происходило никаких состязаний. Я пытался установить MPI_Barrier после всех приемов в моем коде, но это не работает. Вот псевдокод моей программы:
MPI_Init
While some expression is true {
if rank > 0 {
for loop {
send random numbers to specific non-zero ranks using MPI_Isend
}
for loop {
receive random numbers from specific non-zero ranks using MPI_Irecv
}
wait for all send and receives to complete using MPI_Waitall
if numbers received are equal {
send the number to rank 0 using MPI_Isend
wait for send to complete using MPI_Wait
}
MPI_Barrier(MPI_COMM_WORLD);
} else {
Receive numbers from any source that sends data with MPI_Irecv and MPI_ANY_SOURCE
Wait to receive messages using MPI_Wait
MPI_Barrier(MPI_COMM_WORLD);
*AFTER ALL MESSAGES ARE RECEIVED WRITE MESSAGES TO A TEXT FILE*
}
}
MPI_Finalize