如何使用CUDA / Thrust从两个数组中生成一对向量,然后按该对的第一个元素进行排序?

时间:2011-08-12 14:59:54

标签: c++ sorting vector cuda thrust

好的,这将是一个满口的。

我有一个指向序列化二维数组的指针,除了指针算术之外,我想从(基本上)两个数组(我计划从2D数组中取出)制作一对矢量。但是,我需要使用 Thrust 库。

这样我就可以在向量上使用thrust :: sort(),基于该对的第一个元素的值。在设备上。

所以,我需要一个矢量(最好是thrust :: device_vector)对(大小与arrayOne和arrayTwo的大小相匹配),其中第一个元素来自arrayOne,第二个元素来自arrayTwo。这样我就可以使用thrust :: sort()来按该对的第一个元素进行排序。

很抱歉,由于缺少代码,但我仍在努力弄清楚如何实现这一点的细节,因此问题。随着我的进展,我会发布我的尝试。提前谢谢!

#UPDATE

我认为我实际上很幸运并找到了解决方案,因为我发布了这个问题(某种程度上,这是一个比使用对更好的解决方案 - 这反过来是我之前提出的问题向我提出的), 事实证明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(我必须离开2D数组)。高兴。

1 个答案:

答案 0 :(得分:1)

原始海报使用thrust::sort_by_key找到了一个解决方案,如下所示:

#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

问题中的应用程序需要创建一对输入迭代器,提供问题中提到的原始音调数组中的键和值向量。

此答案已添加为社区维基解答,以便将此问题从未答复的列表中删除