我正在 CUDA 中实现中值滤波器。对于特定像素,我提取与该像素周围的窗口相对应的邻居,例如 N x N
(3 x 3
) 窗口,现在有一个 数组code>N x N
元素。我不打算为我的应用程序使用超过 10 x 10 元素的窗口。
该数组现在本地存在于内核中,并且已加载到设备内存中。从我之前读过的 SO 帖子来看,最常见的排序算法是由 Thrust 实现的。但是,Thrust 只能从主机调用。主题 - Thrust inside user written kernels
是否有一种快速有效的方法来对内核内的一小部分 N x N
元素进行排序?
最佳答案
如果元素数量固定且较小,则可以使用排序网络 ( http://pages.ripco.net/~jgamble/nw.html )。它为固定数量的元素提供固定数量的比较/交换操作(例如,8 个元素的 19 次比较/交换迭代)。
关于在 CUDA 中对许多小数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22339936/