thrust :: inner_product против thrust :: transform_reduce для нахождения векторной нормы - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь вычислить норму L2 вектора.Первоначально я определил свой собственный квадратный оператор следующим образом:

template<typename T>                                                            
struct square                                                                   
{                                                                               
    __host__ __device__                                                         
    T operator()(const T& x) const                                              
    {                                                                           
        return x*x;                                                             
    }                                                                           
}; 

, а затем вычислил норму, используя

result = thrust::sqrt(
    thrust::transform_reduce(
        start, end, thrust::plus<T>(), 0, square<T>());

Это очень похоже на пример norm.cu найдено в репозитории Thrust's Git.Однако я только что узнал, что Thrust предоставляет функциональность для вычисления inner_product.Используя это, я мог бы повторно реализовать свой код следующим образом:

result = thrust::sqrt(thrust::inner_product(start, end, start, 0));

Это гораздо более кратко и все еще довольно читабельно.Есть ли какая-то причина, по которой первый метод был предпочтительным в репозитории Git (они не эквивалентны, первый метод быстрее, ...)?Я просто хочу убедиться, что я ничего не пропустил.

...