Spaces:
Runtime error
Runtime error
/* | |
* Copyright 2008-2013 NVIDIA Corporation | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
/*! \file thrust/future.h | |
* \brief `thrust::future`, an asynchronous value type. | |
*/ | |
/* | |
// #include the host system's pointer.h header. | |
#define __THRUST_HOST_SYSTEM_POINTER_HEADER <__THRUST_HOST_SYSTEM_ROOT/pointer.h> | |
#include __THRUST_HOST_SYSTEM_POINTER_HEADER | |
#undef __THRUST_HOST_SYSTEM_POINTER_HEADER | |
*/ | |
// #include the device system's pointer.h header. | |
/* | |
// #include the host system's future.h header. | |
#define __THRUST_HOST_SYSTEM_FUTURE_HEADER <__THRUST_HOST_SYSTEM_ROOT/future.h> | |
#include __THRUST_HOST_SYSTEM_FUTURE_HEADER | |
#undef __THRUST_HOST_SYSTEM_FUTURE_HEADER | |
*/ | |
// #include the device system's future.h header. | |
namespace thrust | |
{ | |
/////////////////////////////////////////////////////////////////////////////// | |
// `select_unique_(future|event)_type` is a hook for choosing the | |
// `unique_eager_event`/`unique_eager_future` type for a system. `decltype` is | |
// used to determine the return type of an ADL call to | |
// `select_unique_eager_(future|event)_type(system)`; that return type should | |
// be the correct event/future type for `system`. Overloads should only be | |
// declared, not defined. | |
namespace unimplemented | |
{ | |
struct no_unique_eager_event_type_found {}; | |
inline __host__ | |
no_unique_eager_event_type_found | |
unique_eager_event_type(...) noexcept; | |
struct no_unique_eager_future_type_found {}; | |
template <typename T> | |
__host__ | |
no_unique_eager_future_type_found | |
unique_eager_future_type(...) noexcept; | |
} // namespace unimplemented | |
namespace unique_eager_event_type_detail | |
{ | |
using unimplemented::unique_eager_event_type; | |
template <typename System> | |
using select = decltype( | |
unique_eager_event_type(std::declval<System>()) | |
); | |
} // namespace unique_eager_event_type_detail | |
namespace unique_eager_future_type_detail | |
{ | |
using unimplemented::unique_eager_future_type; | |
template <typename System, typename T> | |
using select = decltype( | |
unique_eager_future_type<T>(std::declval<System>()) | |
); | |
} // namespace unique_eager_future_type_detail | |
/////////////////////////////////////////////////////////////////////////////// | |
template <typename System> | |
using unique_eager_event = unique_eager_event_type_detail::select<System>; | |
template <typename System> | |
using event = unique_eager_event<System>; | |
/////////////////////////////////////////////////////////////////////////////// | |
template <typename System, typename T> | |
using unique_eager_future = unique_eager_future_type_detail::select<System, T>; | |
template <typename System, typename T> | |
using future = unique_eager_future<System, T>; | |
/* | |
/////////////////////////////////////////////////////////////////////////////// | |
using host_unique_eager_event = unique_eager_event_type_detail::select< | |
thrust::system::__THRUST_HOST_SYSTEM_NAMESPACE::tag | |
>; | |
using host_event = host_unique_eager_event; | |
/////////////////////////////////////////////////////////////////////////////// | |
template <typename T> | |
using host_unique_eager_future = unique_eager_future_type_detail::select< | |
thrust::system::__THRUST_HOST_SYSTEM_NAMESPACE::tag, T | |
>; | |
template <typename T> | |
using host_future = host_unique_eager_future<T>; | |
*/ | |
/////////////////////////////////////////////////////////////////////////////// | |
using device_unique_eager_event = unique_eager_event_type_detail::select< | |
thrust::system::__THRUST_DEVICE_SYSTEM_NAMESPACE::tag | |
>; | |
using device_event = device_unique_eager_event; | |
/////////////////////////////////////////////////////////////////////////////// | |
template <typename T> | |
using device_unique_eager_future = unique_eager_future_type_detail::select< | |
thrust::system::__THRUST_DEVICE_SYSTEM_NAMESPACE::tag, T | |
>; | |
template <typename T> | |
using device_future = device_unique_eager_future<T>; | |
/////////////////////////////////////////////////////////////////////////////// | |
struct new_stream_t final {}; | |
THRUST_INLINE_CONSTANT new_stream_t new_stream{}; | |
/////////////////////////////////////////////////////////////////////////////// | |
using thrust::system::__THRUST_DEVICE_SYSTEM_NAMESPACE::when_all; | |
/////////////////////////////////////////////////////////////////////////////// | |
} // end namespace thrust | |