Я тестировал некоторый код тяги и обнаружил, что transform_reduce дает немного другой результат вычисления, который полностью смутил меня.Почему transform_reduce дает отличный результат, чем преобразование & сокращение?
Вот выборочное тестирование кода: (вычислить сумму (ехр (х)))
Это было выполнено и запустить в VS2012 + CUDA 6,0
#include <iostream>
#include <cmath>
#include <thrust/device_vector.h>
using namespace std;
template <typename T>
struct exponential
{
__host__ __device__
T operator()(const T& x) const {
return exp(x);
}
};
void main() {
thrust::device_vector<double> f(7), g(7);
f[0]=0.0; f[1]=1.0; f[2]=2.0; f[3]=3.0; f[4]=5.0; f[5]=5.0; f[6]=5.0;
double d = thrust::transform_reduce(f.begin(), f.end(), exponential<double>(), 0, thrust::plus<double>());
cout<<"transform_reduce result: " d<<endl;
thrust::transform(f.begin(), f.end(), g.begin(), exponential<double>());
double e = thrust::reduce(g.begin(), g.end());
cout<<"transform+reduce result: "<<e;
}
Выход я получил, что
transform_reduce result: 474
transform+reduce result: 476.432
Правильное значение должно быть 476.432 Я не знаю, что произошло в transform_reduce. Это не только дает целое число, но и неверный ответ. Предполагается, что transform_reduce не будет таким же, как transform + reduce?
Пожалуйста, помогите мне объяснить, что произошло ...
Спасибо! Я не заметил этого 0 -_-. Но почему это не скомпилировалось ... Я копирую и вставляю их из vs2010 – Chris
Я не думаю, что это допустимый синтаксис: 'cout <<" transform_reduce result: "d << endl;' –
right. Я добавил их сюда. глупые ошибки :), но вы должны понимать, что я на самом деле имел в виду – Chris