我正在使用CUDA实现简单的冒泡排序算法,有一个问题。
我执行以下代码以交换数组中相邻的2个元素:
请注意,块中的线程数是数组大小的一半。这是一个好的实现吗?即使有分支,单个warp中的线程是否会并行执行?因此,实际上需要N次迭代才能对数组进行排序?
另请注意,我知道有更好的排序算法可以实现,并且我可以使用Thrust、CUDPP或SDK中的示例排序算法,但在我的情况下,我只需要一个简单的算法来实现。
if(a[threadIdx.x]>a[threadIdx.x + 1])
Swap(a[threadIdx.x] , a[threadIdx.x + 1]);
请注意,块中的线程数是数组大小的一半。这是一个好的实现吗?即使有分支,单个warp中的线程是否会并行执行?因此,实际上需要N次迭代才能对数组进行排序?
另请注意,我知道有更好的排序算法可以实现,并且我可以使用Thrust、CUDPP或SDK中的示例排序算法,但在我的情况下,我只需要一个简单的算法来实现。