C ++ MPI отправляет истину, но получает ложь - PullRequest
1 голос
/ 19 февраля 2020

Я пытаюсь построить игру из MPI-версии Life. Однако когда я отправляю true , я получаю false , поскольку MPI_BOOL отсутствует, я использовал MPI_C_BOOL. Ниже приведен фрагмент кода.

vector<bool> send_data_top;
vector<bool> recv_data_top(n);
vector<bool> send_data_down;
vector<bool> recv_data_down(n);

request = new MPI_Request[4];
for (int j = 0; j < n; j++) {
    send_data_top.push_back(neigh_grid[n + j + 3]);
    send_data_down.push_back(neigh_grid[last_row_index * (n + 2) + j + 1]);
    cout << "send data: " << send_data_down[j] << endl;
    cout << "send data top: " << send_data_top[j] << endl;
}
MPI_Isend(&send_data_top[0], n, MPI_C_BOOL, id - 1, 0, MPI_COMM_WORLD, &request[0]);
MPI_Isend(&send_data_down[0], n, MPI_C_BOOL, 0, 0, MPI_COMM_WORLD, &request[1]);
MPI_Irecv(&recv_data_top[0], n, MPI_C_BOOL, id - 1, 0, MPI_COMM_WORLD, &request[2]);
MPI_Irecv(&recv_data_down[0], n, MPI_C_BOOL, 0, 0, MPI_COMM_WORLD, &request[3]);
MPI_Waitall(4, request, MPI_STATUS_IGNORE);
delete[] request;
//assign receive values to neigh_grid
for (int j = 0; j < n; j++) {
    neigh_grid[j + 1] = recv_data_top[j];
    neigh_grid[(last_row_index + 1) * (n + 2) + j + 1] = recv_data_down[j];
    cout << recv_data_top[j] << endl;
    cout << recv_data_down[j] << endl;
}

Вывод

send data: 1
send data top: 1
0
0

Я попытался изменить тип на MPI_CXX_BOOL и MPI_INT, но ни один из них не работает, и я не могу найти похожая ситуация в интернете. Кто-нибудь может понять, что вызвало это?

...