我试图计算向量的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存储库中是首选的(它们不等同,第一种方法更快,......)?我只是想确保我没有遗漏任何东西。