这是一个关于编程的概念性问题。
总而言之,我有两个数组/向量,我需要对一个数组/向量进行排序,其中一个也传播到另一个数组中,这样如果我对 arrayOne 进行排序,对于排序中的每个交换,同样的事情也会发生在 arrayTwo 上。现在,我知道 std::sort 允许您定义一个比较函数(对于我假设的自定义对象),我正在考虑定义一个来同时交换 arrayTwo。
所以我想要的是 -使用 CUDA 根据其中一个向量中的值对这两个向量进行排序。
这是我不确定性上升的地方,本质上我想使用 Thrust 库进行排序。是否支持自定义比较函数的定义?如果是这样,我仍然没有弄清楚如何在 arrayTwo 中传播更改(因为它将基于 CUDA)。
我真的没有时间在 CUDA 上实现自定义并行快速排序,就像我应该/想要的那样。
原因
本质上,我需要对一堆变量数组与单个数组(想想回归树)进行排序和计算。当然,我需要尽快这样做,基于 CPU 的排序还不够快。
#更新
我应该强调,我在主机上对两者进行排序没有问题,我正在寻找使用CUDA的解决方案。谢谢。
#更新 2
我想我实际上很幸运并找到了解决方案,因为我发布了这个问题,事实证明 Thrust 实际上提供了我正在寻找的默认内容:
#include <thrust/sort.h>
...
const int N = 6;
int keys[N] = { 1, 4, 2, 8, 5, 7};
char values[N] = {'a', 'b', 'c', 'd', 'e', 'f'};
thrust::sort_by_key(keys, keys + N, values);
// keys is now { 1, 2, 4, 5, 7, 8}
// values is now {'a', 'c', 'b', 'e', 'f', 'd'}
*取自http://code.google.com/p/thrust/wiki/QuickStartGuide#Fancy_Iterators *
所以,现在我要做的就是从两个数组中取出两个推力::device_vectors(我必须从二维数组中取出)。快乐的。