【发布时间】:2022-01-17 15:14:36
【问题描述】:
我们有一个使用 MPI quicksort 实现的快速排序算法。有一个关于代码的问题,我们为什么要这样做
quicksort(chunk, 0, own_chunk_size);
for(int step = 1; step < number_of_process; step = 2 * step)
{
if (rank_of_process % (2 * step) != 0) {
MPI_Send(chunk, own_chunk_size, MPI_INT,
rank_of_process - step, 0,
MPI_COMM_WORLD);
break;
}
if (rank_of_process + step < number_of_process) {
int received_chunk_size
= (number_of_elements
>= chunk_size
* (rank_of_process + 2 * step))
? (chunk_size * step)
: (number_of_elements
- chunk_size
* (rank_of_process + step));
int* chunk_received;
chunk_received = (int*)malloc(
received_chunk_size * sizeof(int));
MPI_Recv(chunk_received, received_chunk_size,
MPI_INT, rank_of_process + step, 0,
MPI_COMM_WORLD, &status);
data = merge(chunk, own_chunk_size,
chunk_received,
received_chunk_size);
free(chunk);
free(chunk_received);
chunk = data;
own_chunk_size
= own_chunk_size + received_chunk_size;
}
}
问题出现在行中:
if (rank_of_process % (2 * step) != 0)
和
if (rank_of_process + step < number_of_process)
为什么我们需要这些条件,它们有什么作用?据我了解,排序是使用块方法实现的(进程对其数据块进行排序)
【问题讨论】:
-
只是好奇,第一句话的“我们”是谁?您似乎在询问有关您自己的代码的问题。
标签: mpi