создавать обычные ядра CUDA для типов векторов тяги - PullRequest
1 голос
/ 06 ноября 2011

У меня простой вопрос, если, например, я хотел бы использовать ядро ​​cuda, которое я написал для вектора тяги, должен ли я привести свой device_vector к типу обычного указателя?или есть другой способ?

о, и еще одна вещь, касающаяся конструктора device_vector, если у меня есть указатель, выделенный на GPU, есть ли быстрый device_vector, который принимает этот указатель, или я должен перенести все сначалаЦП и только потом объявлять мой device_vector с соответствующими аргументами (переменные, выделенные ЦП)?

Спасибо, игаль!

1 Ответ

1 голос
/ 06 ноября 2011

Я хотел бы использовать ядро ​​cuda, которое я написал для вектора тяги. Должен ли я привести свой device_vector к типу обычного указателя?

У вас есть 2 варианта:

  1. Вы можете использовать функторы и общие алгоритмы.Подробности в руководстве (стр. 18-22).Я также могу посоветовать присмотреться к zip_iterator
  2. Если у вас нестандартный алгоритм или у вас уже есть ядро, тогда будет проще привести вектор к raw_pointer ( manual стр. 11)

если у меня есть указатель, выделенный на GPU, есть ли быстрый device_vector, который принимает этот указатель

Для использования стандартных алгоритмов вы можете заключить указатель в класс device_ptr.Затем вы можете использовать объект так же, как device_vector.

int N = 10;
// raw pointer to device memory
int * raw_ptr;
cudaMalloc((void **) &raw_ptr, N * sizeof(int));
// wrap raw pointer with a device_ptr
thrust::device_ptr<int> dev_ptr(raw_ptr); // use device_ptr in thrust algorithms
thrust::fill(dev_ptr, dev_ptr + N, (int) 0); // access device memory through device_ptr
dev_ptr[0] = 1;
// free memory
cudaFree(raw_ptr);

Код от Руководство стр.12.

...