我需要计算 CUDA 内核中大小为 p 的数组的中位数(在我的情况下,p 很小,例如 p = 10)。为了简单起见,我使用了 O(p^2) 算法,但代价是时间性能。
是否有一个“函数”可以有效地找到我可以在 CUDA 内核中调用的中位数?
我知道我可以实现一个选择算法,但我正在寻找一个函数和/或测试代码。
谢谢!
我需要计算 CUDA 内核中大小为 p 的数组的中位数(在我的情况下,p 很小,例如 p = 10)。为了简单起见,我使用了 O(p^2) 算法,但代价是时间性能。
是否有一个“函数”可以有效地找到我可以在 CUDA 内核中调用的中位数?
我知道我可以实现一个选择算法,但我正在寻找一个函数和/或测试代码。
谢谢!
这里有一些提示:
您还可以进行许多其他优化。确保您通读了CUDA 文档,尤其是编程指南和最佳实践指南。当您真的想追求高性能时,不要忘记仔细查看 CUDA 分析器,例如Visual Profiler。
即使在单个线程中,也可以对数组进行排序并在 O(p*log(p)) 中选择中间的值,这使得 O(p^2) 看起来过多。如果您有 p 个线程可供使用,也可以像 O(log(p)) 一样快地对数组进行排序,尽管这可能不是小 p 的最快解决方案。在此处查看最佳答案: