результат снижения тяги в памяти устройства

Можно ли оставить возвращаемое значение операции Thrust::Reduce в памяти, выделенной устройством? Если это так, это так же просто, как присвоить значение области cudaMalloc, или мне следует использовать тягу::device_ptr?


person Orgrim    schedule 13.02.2014    source источник


Ответы (2)


Можно ли оставить возвращаемое значение операции Thrust::Reduce в памяти, выделенной устройством?

Короткий ответ: нет.

thrust reduce возвращает количество, результат редукции. Это количество должно быть помещено в резидентную переменную хоста. :

Возьмем, к примеру, сокращение, которое является синхронным и всегда возвращает результат ЦП:

template<typename Iterator, typename T> 
T reduce(Iterator first, Iterator last, T init); 

Как только результат операции будет возвращен в ЦП, вы можете скопировать его в ГП, если хотите:

#include <iostream>
#include <thrust/device_vector.h>
#include <thrust/reduce.h>

int main(){

    thrust::device_vector<int> data(256, 1);
    thrust::device_vector<int> result(1);
    result[0] = thrust::reduce(data.begin(), data.end());
    std::cout << "result = " << result[0] << std::endl;
    return 0;
}

Другой возможной альтернативой является использование thrust::reduce_by_key, которое вернет результат сокращения в память устройства, а не скопирует его в память хоста. Если вы используете один ключ для всего массива, конечным результатом будет один вывод, аналогичный thrust::reduce

person Robert Crovella    schedule 14.02.2014
comment
Хороший ответ, если вы действительно хотите использовать сокращение и вернуть результат в память устройства, вы можете либо использовать библиотеку cuda npp, либо создать сокращение самостоятельно, ищите сокращение в примере cuda. - person TripleS; 15.02.2014
comment
reduce_by_key с константным_итератором - отличное решение вопроса, спасибо - person Michael; 08.02.2019

Да, это должно быть возможно, если вместо этого использовать тягу::reduce_by_key с помощью тяги::constant_iterator для ключей.

person surban    schedule 12.02.2016
comment
Я знаю, что это старо, но спасибо за это предложение, это отличное решение вопроса - person Michael; 08.02.2019