对数组进行排序,而不是对下一个数组进行相同的更改

时间:2012-12-29 22:37:00

标签: cuda thrust

我正在寻找最简单,最快速的方法来对一个10 ^ 5个条目的数组进行排序,然后对下一个数组执行相同的操作。阵列大小都相同。 例如:

1 a    6 c
   3 b

我必须对第一列进行排序,但是6必须与c:

在同一行

1 a    3 b    6 c

我想我找到了一些东西,但实施起来看起来很奇怪:

How to sort two arrays/vectors in respect to values in one of the arrays, using CUDA/Thrust

1 个答案:

答案 0 :(得分:2)

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, thrust::greater<int>());
  // keys is now   {  8,   7,   5,   4,   2,   1}
  // values is now {'d', 'f', 'e', 'b', 'c', 'a'}

如果你已经在gpu上有数据,你也可以使用device_ptr做同样的事。