Tipo de retorno de empuje de Cuda
Pregunta
Actualmente estoy tratando de usar la biblioteca de empuje y tengo problemas con los tipos de devolución.
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());
da el error:
error : no suitable conversion function from "const thrust::detail::normal_iterator<thrust::device_ptr<int>>" to "int *" exists
¿Alguien podría explicarme cómo debe ser el tipo de devolución?
de acuerdo con la documentación El tipo de retorno es
thrust::pair<ForwardIterator,ForwardIterator>
Sin embargo, esto no funciona para mí, ¿podría alguien explicarlo?
¡Gracias!
Solución
Al nombrar un parámetro de plantilla, ForwardIterator
no nombra ningún tipo en particular. Para nuestros propósitos, podemos considerarlo como un marcador de posición para el tipo de iterador dado a thrust::minmax_element
:
template<typename ForwardIterator>
thrust::pair<ForwardIterator,ForwardIterator> minmax_element(ForwardIterator first, ForwardIterator last);
Asi que minmax_element
Devuelve un pair
de cualquier tipo de iterador que se le entregue como argumentos.
En tu caso, minmax_element
Devuelve un pair
de device_vector<int>::iterator
s. Puede hacer que su código se compile haciendo result
La Apropiada 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);