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

问题描述 投票:3回答:1

好的,这将是一个满口。

我有一个指向序列化二维数组的指针,除了指针算法之外,我想从(基本上)两个数组(我打算离开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_vector(我必须从2D数组中取出)。快乐。

c++ sorting vector cuda thrust
1个回答
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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.