thrust :: inner_product vs thrust :: transform_reduce用于查找向量范数

时间:2018-06-11 13:26:50

标签: c++ thrust

我试图计算向量的L2范数。最初,我按如下方式定义了自己的square运算符:

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>());

这与Thrust的Git存储库中的norm.cu example非常相似。但是,我发现Thrust提供了计算inner_product的功能。使用这个,我可以按如下方式重新实现我的代码:

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

这更简洁,而且仍然相当可读。是否有任何理由认为第一种方法在Git存储库中是首选的(它们不等同,第一种方法更快,......)?我只是想确保我没有遗漏任何东西。

0 个答案:

没有答案