Рассмотрим следующий код:
thrust::device_ptr<uint> dev_ptr_keys(ptrCellIDs);
thrust::device_ptr<uint> dev_ptr_offset(ptrOffset);
thrust::pair<thrust::discard_iterator<>, thrust::device_ptr<uint>> end;
end = thrust::reduce_by_key(dev_ptr_keys, dev_ptr_keys + 10,
thrust::make_constant_iterator(1),
thrust::make_discard_iterator(),
dev_ptr_offset, binary_pred, binary_op);
Функция reduce_by_key
в этом случае должна создать массив смещений равных значений в массиве, на который указывает указатель устройства dev_ptr_keys
, и сохранить его в массив на dev_ptr_offset
. Поэтому:
Intput (dev_ptr_keys): { 1, 4, 4, 4, 2, 2, 1 }
Выход (dev_ptr_offset): { 1, 3, 2, 1 }
Пока все хорошо, однако мне также нужно знать размер нового действительного массива вывода, который должен быть сохранен в end.second
. Но мне не удается получить эту информацию. Я пытался играть с thrust::raw_pointer_cast()
, но мне не удается получить значение ни в пределах моего ядра (путем доступа указателя обернутого указателя устройства тяги), ни в моем коде хоста.
Как я могу получить информацию о размере моего вывода в этом конкретном случае?