Как сделать вектор пары из двух массивов, а затем отсортировать по первому элементу пары, используя CUDA / Thrust? - PullRequest
3 голосов
/ 12 августа 2011

Хорошо, это будет глоток.

У меня есть указатель на сериализованный 2D-массив, кроме арифметики с указателем, я хочу создать вектор пар из (по существу) двух массивов (которые я планирую выбрать из 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*

Итак, теперь все, что мне нужно сделать, - это получить два thrust :: device_vectors из двух массивов (которые я должен получить из 2D-массива). Счастливый.

1 Ответ

1 голос
/ 03 мая 2014

Оригинальный плакат нашел решение, используя 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

Приложение в вопросе потребует создания пары входных итераторов, предоставляющих векторы ключа и значения из исходного переданного массива, упомянутого в вопросе.

Этот ответ был добавлен как ответ сообщества вики, чтобы убрать этот вопрос из списка без ответа

...