Spaces:
Runtime error
Runtime error
template<typename T> | |
struct saxpy_reference | |
{ | |
__host__ __device__ saxpy_reference(const T &aa) | |
: a(aa) | |
{} | |
__host__ __device__ T operator()(const T &x, const T &y) const | |
{ | |
return a * x + y; | |
} | |
T a; | |
}; | |
template<typename Vector> | |
struct TestFunctionalPlaceholdersValue | |
{ | |
void operator()(const size_t) | |
{ | |
const size_t n = 10000; | |
typedef typename Vector::value_type T; | |
T a(13); | |
Vector x = unittest::random_integers<T>(n); | |
Vector y = unittest::random_integers<T>(n); | |
Vector result(n), reference(n); | |
thrust::transform(x.begin(), x.end(), y.begin(), reference.begin(), saxpy_reference<T>(a)); | |
using namespace thrust::placeholders; | |
thrust::transform(x.begin(), x.end(), y.begin(), result.begin(), a * _1 + _2); | |
ASSERT_ALMOST_EQUAL(reference, result); | |
} | |
}; | |
VectorUnitTest<TestFunctionalPlaceholdersValue, ThirtyTwoBitTypes, thrust::device_vector, thrust::device_allocator> TestFunctionalPlaceholdersValueDevice; | |
VectorUnitTest<TestFunctionalPlaceholdersValue, ThirtyTwoBitTypes, thrust::host_vector, std::allocator> TestFunctionalPlaceholdersValueHost; | |
template<typename Vector> | |
struct TestFunctionalPlaceholdersTransformIterator | |
{ | |
void operator()(const size_t) | |
{ | |
const size_t n = 10000; | |
typedef typename Vector::value_type T; | |
T a(13); | |
Vector x = unittest::random_integers<T>(n); | |
Vector y = unittest::random_integers<T>(n); | |
Vector result(n), reference(n); | |
thrust::transform(x.begin(), x.end(), y.begin(), reference.begin(), saxpy_reference<T>(a)); | |
using namespace thrust::placeholders; | |
thrust::transform(thrust::make_transform_iterator(x.begin(), a * _1), | |
thrust::make_transform_iterator(x.end(), a * _1), | |
y.begin(), | |
result.begin(), | |
_1 + _2); | |
ASSERT_ALMOST_EQUAL(reference, result); | |
} | |
}; | |
VectorUnitTest<TestFunctionalPlaceholdersTransformIterator, ThirtyTwoBitTypes, thrust::device_vector, thrust::device_allocator> TestFunctionalPlaceholdersTransformIteratorInstanceDevice; | |
VectorUnitTest<TestFunctionalPlaceholdersTransformIterator, ThirtyTwoBitTypes, thrust::host_vector, std::allocator> TestFunctionalPlaceholdersTransformIteratorInstanceHost; | |