Тип возврата тяги CUDA - PullRequest
3 голосов
/ 25 июля 2011

В настоящее время я пытаюсь использовать библиотеку Thrust и у меня возникают проблемы с типами возвращаемых данных.

  device_vector<int> input(5);

  input[0] = 0;
  input[1] = 2;
  input[2] = 5;
  input[3] = 7;
  input[4] = 8;

  pair<int*, int*> result= minmax_element(input.begin(), input.end());

выдает ошибку:

 error : no suitable conversion function from "const thrust::detail::normal_iterator<thrust::device_ptr<int>>" to "int *" exists

Может кто-нибудь объяснить мне, как определить тип возвращаемого значения?

согласно документации тип возврата

thrust::pair<ForwardIterator,ForwardIterator>

Однако это не работает для меня, может кто-нибудь объяснить, пожалуйста!

Спасибо!

1 Ответ

3 голосов
/ 27 июля 2011

При именовании параметра шаблона, ForwardIterator не называет какого-либо конкретного типа. Для наших целей мы можем рассматривать его как заполнитель для типа итератора, заданного для thrust::minmax_element:

template<typename ForwardIterator>
  thrust::pair<ForwardIterator,ForwardIterator> minmax_element(ForwardIterator first, ForwardIterator last);

Таким образом, minmax_element возвращает pair любого типа итератора, заданного в качестве аргументов.

В вашем случае minmax_element возвращает pair из device_vector<int>::iterator с. Вы можете сделать свой код компиляцией, сделав result соответствующий pair:

device_vector<int> input(5);

input[0] = 0;
input[1] = 2;
input[2] = 5;
input[3] = 7;
input[4] = 8;

// we can use a typedef for brevity
typedef pair<device_vector<int>::iterator, device_vector<int>::iterator> result_type;

result_type result = minmax_element(input.begin(), input.end());

// check the results
assert(0 == *result.first);
assert(8 == *result.second);
...