Я пытаюсь найти индекс первого нулевого или отрицательного значения массива, используя CUDA Thrust. Код последовательного процессора, который я пытаюсь написать с помощью CUDA Thrust, выглядит следующим образом:
for (int i = StartIndex; i <= ArrayLimitIndex; i++)
{
if (Array[i] <= 0) { DesiredIndex = i; break; }
}
Я думаю, что самый простой способ сделать это на графическом процессоре — использовать функцию find_if
в библиотеке Thrust.
Массив уже находится на графическом процессоре, и я пытаюсь найти индекс в этом массиве, используя Thrust как таковой:
struct less_than_or_eq_zero
{
__host__ __device__
bool operator() (double x)
{
return x <= 0;
}
};
thrust::device_vector<double>::iterator iter;
thrust::device_ptr<double> dev_ptr_Col46 = thrust::device_pointer_cast(dev_Col46);
iter = thrust::find_if(thrust::device, dev_ptr_Col46, dev_ptr_Col46 + size,less_than_or_eq_zero());
Теперь я хотел бы использовать значение iter
в качестве аргумента для моего следующего ядра:
newKernel<<<size, 1>>>(*dev_array, iter)
где определение newKernel
имеет форму:
__global__ void newKernel(double *dev_array, iter)
{
int x = blockIdx.x;
if(x <= iter)
{
//process data here...
}
}
Я знаю, что приведенный здесь код неверен, и у меня есть несколько вопросов относительно использования iter
. Во-первых, iter
это device_vector
. Есть ли способ сделать iter
только одним значением, а не вектором? Кроме того, когда я выполнил find_if
, как я могу использовать значение iter
в моем следующем вызове ядра?
Любая помощь в этом будет принята с благодарностью.
Спасибо
iter
не являетсяdevice_vector
- это итератор, указывающий наdevice_vector
. Вы можете использовать его непосредственно вnewKernel
. - person Jared Hoberock   schedule 06.01.2014device_vector
? Я думаю, что мог бы получить лучшую производительность без использованияdevice_vector
. - person user2736519   schedule 06.01.2014iter
в определении моего ядра? Как типаdouble
? - person user2736519   schedule 06.01.2014thrust::device_vector<double>::iterator iter
- person Jared Hoberock   schedule 06.01.2014newKernel
. - person Jared Hoberock   schedule 06.01.2014