Я пытаюсь выполнить параллельную сортировку bitoni c с использованием mpi и C, но я получил взаимоблокировку или любое другое состояние блока при отправке массива recv в comp_exchange_max или в функции comp_exchange_min. вы можете помочь мне решить эту проблему? спасибо
void comp_exchange_max(int j, int rank, int *local_numbers, int dim_array, int *ordered_array)
{
int message_receive[dim_array];
int i, k, q;
if (rank > 0)
{
MPI_Recv(&message_receive, dim_array, MPI_INT, rank ^ (1 << j), 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
MPI_Send(local_numbers, dim_array, MPI_INT, rank ^ (1 << j), 0, MPI_COMM_WORLD);
}
/* comparison */
k = dim_array - 1;
q = dim_array - 1;
for (i = dim_array - 1; i >= 0; --i)
{
if (local_numbers[k] > message_receive[q])
{
ordered_array[i] = local_numbers[k];
--k;
}
else
{
ordered_array[i] = message_receive[q];
--q;
}
}
}
void comp_exchange_min(int j, int rank, int *local_numbers, int dim_array, int *ordered_array)
{
int message_receive[dim_array];
int i, k, q;
if (rank > 0)
{
MPI_Send(local_numbers, dim_array, MPI_INT, rank ^ (1 << j), 0, MPI_COMM_WORLD);
MPI_Recv(&message_receive, dim_array, MPI_INT, rank ^ (1 << j), 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
/* comparison */
k = 0;
q = 0;
for (i = 0; i < dim_array; ++i)
{
if (local_numbers[k] < message_receive[q])
{
ordered_array[i] = local_numbers[k];
++k;
}
else
{
ordered_array[i] = message_receive[q];
++q;
}
}
}
весь код здесь https://pastebin.com/DrR5SGxv