| |
|
|
| |
|
|
| |
|
|
| |
| |
| |
|
|
| |
| struct THRUST_PP_CAT2(name, _fn) \ |
| { \ |
| template <typename ForwardIt, typename Sentinel, typename UnaryFunction> \ |
| __host__ \ |
| auto operator()( \ |
| ForwardIt&& first, Sentinel&& last, UnaryFunction&& f \ |
| ) const \ |
| THRUST_RETURNS( \ |
| ::thrust::async::for_each( \ |
| __VA_ARGS__ \ |
| THRUST_PP_COMMA_IF(THRUST_PP_ARITY(__VA_ARGS__)) \ |
| THRUST_FWD(first), THRUST_FWD(last), THRUST_FWD(f) \ |
| ) \ |
| ) \ |
| }; \ |
| /**/ |
| |
| DEFINE_ASYNC_FOR_EACH_CALLABLE( |
| invoke_async_for_each |
| ); |
| |
| DEFINE_ASYNC_FOR_EACH_CALLABLE( |
| invoke_async_for_each_device, thrust::device |
| ); |
| |
| #undef DEFINE_ASYNC_FOR_EACH_CALLABLE |
| |
| /////////////////////////////////////////////////////////////////////////////// |
|
|
| struct inplace_divide_by_2 |
| { |
| template <typename T> |
| __host__ __device__ |
| void operator()(T& x) const |
| { |
| x /= 2; |
| } |
| }; |
|
|
| /////////////////////////////////////////////////////////////////////////////// |
|
|
| template <typename AsyncForEachCallable, typename UnaryFunction> |
| struct test_async_for_each |
| { |
| template <typename T> |
| struct tester |
| { |
| __host__ |
| void operator()(std::size_t n) |
| { |
| thrust::host_vector<T> h0_data(unittest::random_integers<T>(n)); |
| thrust::device_vector<T> d0_data(h0_data); |
|
|
| thrust::for_each(h0_data.begin(), h0_data.end(), UnaryFunction{}); |
|
|
| auto f0 = AsyncForEachCallable{}( |
| d0_data.begin(), d0_data.end(), UnaryFunction{} |
| ); |
|
|
| f0.wait(); |
|
|
| ASSERT_EQUAL(h0_data, d0_data); |
| } |
| }; |
| }; |
| DECLARE_GENERIC_SIZED_UNITTEST_WITH_TYPES_AND_NAME( |
| THRUST_PP_EXPAND_ARGS( |
| test_async_for_each< |
| invoke_async_for_each_fn |
| , inplace_divide_by_2 |
| >::tester |
| ) |
| , NumericTypes |
| , test_async_for_each |
| ); |
| DECLARE_GENERIC_SIZED_UNITTEST_WITH_TYPES_AND_NAME( |
| THRUST_PP_EXPAND_ARGS( |
| test_async_for_each< |
| invoke_async_for_each_device_fn |
| , inplace_divide_by_2 |
| >::tester |
| ) |
| , NumericTypes |
| , test_async_for_each_policy |
| ); |
|
|
| |
|
|
|
|