我试图使用GPU加速我的Matlab程序,但是因为功能" knnsearch"不支持GPU,我决定编写自己的暴力函数
(当然还有其他选择,比如编写CUDA内核,或使用现有的库,但是设置它们必须花一些时间,而且我在Windows 10上,甚至设置matlab来处理mex文件是痛苦,错误不断出现....所以我现在会坚持使用蛮力方法。)
尽管它只是强力搜索,但我看到了一些很大的改进(代码运行速度提高了2倍)。 这是我的功能,以及分析结果(它真的很短) 该函数接受单个查询点,并在参考点中找到K-最近邻居(所有点都存储在gpuArray中)。起初,我认为距离的计算花费的时间最多,但是正如您在剖面仪结果中看到的那样,排序部分是最耗时的。
我想通过优化您在阵列中找到最小K元素的部分来改进代码。请注意,K非常小(K <= 50),而数据点的数量非常大(> = 10000)。我知道有针对这个特定任务定制的算法(例如,heapsort,但你只需要堆扩展部分),但我不确定如何使用GPU实现它们而不是减慢速度。谁能帮我?非常感谢你:)
答案 0 :(得分:0)
knnsearch
。