我有一个5000x500的矩阵,想要使用cuda将每一行分别排序。我可以使用arrayfire,但这只是一个对thrust::sort进行循环的过程,效率不高。
参考链接:https://github.com/arrayfire/arrayfire/blob/devel/src/backend/cuda/kernel/sort.hpp
有没有一种方法可以在thrust中融合操作,以便使排序并行运行?实际上,我正在寻找一种将for循环迭代融合成的通用方法。
参考链接:https://github.com/arrayfire/arrayfire/blob/devel/src/backend/cuda/kernel/sort.hpp
for(dim_type w = 0; w < val.dims[3]; w++) {
dim_type valW = w * val.strides[3];
for(dim_type z = 0; z < val.dims[2]; z++) {
dim_type valWZ = valW + z * val.strides[2];
for(dim_type y = 0; y < val.dims[1]; y++) {
dim_type valOffset = valWZ + y * val.strides[1];
if(isAscending) {
thrust::sort(val_ptr + valOffset, val_ptr + valOffset + val.dims[0]);
} else {
thrust::sort(val_ptr + valOffset, val_ptr + valOffset + val.dims[0],
thrust::greater<T>());
}
}
}
}
有没有一种方法可以在thrust中融合操作,以便使排序并行运行?实际上,我正在寻找一种将for循环迭代融合成的通用方法。
thrust::for_each
中嵌套调用thrust::sort
。 - Jared Hoberock