我想并行合并排序的分区部分,但我不知道如何继续。请根据我的情况给我一些想法,谢谢!
序列部分:
void Partition(int arr[], int low, int high)
{
int mid;
if(low < high)
{
mid = (low + high)/2;
Partition(arr, low, mid); //first half of data
Partition(arr, mid+1, high);//second half of data
MergeSort(arr, low, mid, high);
}
}
对于并行版本我有什么:
void *PartitionTask(void* rank)
{
long my_rank = (long)rank;
if(my_rank == 0)
{
int mid;
if(low < high)
{
mid = (low + high)/2;
Partition(arr, low, mid); //first half of data
Partition(arr, mid+1, high);//second half of data
MergeSort(arr, low, mid, high);
}
}
else
{
}
}
答案 0 :(得分:2)
最简单直接的解决方案可能是为一个分区生成一个新线程,然后在调用线程中输入另一个分区。
pthread_create(&low_pid, NULL, Partition, (void *)ptr_argument)
使用ptr_argument
作为指向共享内存结构的指针,该结构包含指向arr和低/高值的指针。
当调用线程返回时,请在pthread_join
之前调用low_pid
进行同步,然后才能进行合并。