Я написал ядра, используя обычный код CUDA, который не использует векторы тяговых устройств. Ядра выводят некоторые результаты, хранящиеся в массиве на устройстве, скажем, в массиве X. Я бы хотел сделать сокращение на X. Есть ли способ использовать функцию thrust :: reduction без первого копирования X в упор: переменная device_vector?Cuda тяга без использования device_vectors?
0
A
ответ
3
Традиционный способ сделать это - обернуть указатель устройства в thrust::device_ptr
и передать его алгоритмам тяги. Модель шаблона, основанная на тегах в Thrust, гарантирует, что выполнение устройства будет вызвано типом входной последовательности, входящей в вызов.
#include <thrust/device_ptr.h>
#include <thrust/reduce.h>
int* X;
cudaMalloc((void **)&X, sizeof(int) * size_t(N));
// Do stuff with X
thrust::device_ptr X_ptr(X);
int result = thrust::reduce(X_ptr, X_ptr+N);
От Thrust 1.7 начиная с концепции внедрения политики. Это устраняет необходимость явной упаковки адреса устройства с помощью device_ptr
. Таким образом, вместо этого вы можете использовать для thrust::device
политики, чтобы указать, что входные итераторы на устройстве и сделать что-то вроде
#include <thrust/reduce.h>
#include <thrust/execution_policy.h>
int* X;
cudaMalloc((void **)&X, sizeof(int) * size_t(N));
// Do stuff with X
int result = thrust::reduce(thrust::device, X, X+N);
Какой путь вы выбираете, чтобы сделать это следует руководствоваться тем, что версия Thrust у вас есть и какой код стиль Вы предпочитаете.
Смежные вопросы
- 1. CUDA тяга: скопировать от устройства к устройству
- 2. OpenCV с поддержкой CUDA без использования CUDA?
- 3. Создание Thrust :: device_vectors в __host__ __device__ functor
- 4. CUDA или тяга: получение n максимальных чисел в сгруппированном массиве
- 5. CUDA: nvcc без инструмента CUDA
- 6. тяга copy_if: неполный тип не допускается
- 7. тяга :: exclusive_scan_by_key неожиданное поведение
- 8. Преимущество использования потока CUDA
- 9. лучший способ использования CUDA
- 10. NPP CUDA без freeImage
- 11. тяга исключение bulk_kernel_by_value в transform_reduce
- 12. Как создать общую таблицу тяги :: device_vectors
- 13. Запуск программ CUDA на машинах без CUDA
- 14. Как синхронизировать потоки в CUDA без использования атома
- 15. Как сделать вычисления суммы без использования атома в CUDA
- 16. тяга copy_if с сопзЬ источника
- 17. Скажите, что за тяга транспортиратора?
- 18. тяга :: unique_by_key съедает последний элемент
- 19. Отслеживание использования регистра ядра cuda
- 20. Возможность использования общей памяти CUDA
- 21. CUDA + VS2010 без VS2008
- 22. Установка Cuda без корня
- 23. Удерживать OpenMP без CUDA?
- 24. тяга функтор: «слишком много ресурсов, запрашиваемых для запуска»
- 25. Custa-библиотека CUDA и cudaDeviceReset()
- 26. Тяга настолько медленная, как поиск макс и мин массива?
- 27. Установка CUDA без замены DisplayDriver
- 28. Установка CUDA без gcc-4.3
- 29. Сравнить в CUDA без ветвления
- 30. Файл журнала профайлера Interpret CUDA