思路
把数组分成多段, 把相邻两段的有序数组合并,由于有很多段,因此可以并行的方式同时合并。合并完之后段数减半(每段长度加倍),然后继续上一过程进行并行化地合并,直到最后只剩下一段数组,那就是整个数组都排好序。
代码如下
作为对比,一个CPU串行版本的归并排序,与GPU并行版本的排序对比运行时间。(其中,函数mergeSort_gpu调用了GPU上运行的kernel核函数mergeVec_half;另外手写了一个CPU串行版本的归并排序的函数mergeSort_cpu作为对比)
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <time.h>