我想使用 cub 为我在每个块中排序一个数组。我用多个块调用内核,每个块有 32 个线程,每个线程都有一个 27 个整数的数组。根据 cubs github 页面的标准排序如下所示:
__global__ void foo(...){
int cells[27];
typedef cub::BlockRadixSort<int, 32, 27> BlockRadixSort;
__shared__ typename BlockRadixSort::TempStorage temp_storage;
BlockRadixSort(temp_storage).Sort(cells);
...}
稍后我需要将单元格放在共享内存中,如下所示:
__global__ void foo(...){
__shared__ int cells[32 * 27];
...
}
是否可以在 cub 中对已经驻留在共享内存中的数组进行排序?还是我必须在排序后将所有数组加载到共享内存中。
或者是否可以选择将所有单元格存储在全局内存中,并通过 cub 设备函数对它们进行排序,但由特定大小的块分隔?