Я пытаюсь вычислить норму 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 (они не эквивалентны, первый метод быстрее, ...)?Я просто хочу убедиться, что я ничего не пропустил.