2011-11-06 3 views
1

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

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

Спасибо, igal!

ответ

1

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

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

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

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

чтобы использовать алгоритмы Standart можно обернуть указатель класса 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); 

Код с manual p. 12.

 Смежные вопросы

  • Нет связанных вопросов^_^