| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #if defined(__CUDA_ARCH__) && __CUDA_ARCH__ < 700 |
| | # error "CUDA synchronization primitives are only supported for sm_70 and up." |
| | #endif |
| |
|
| | #ifndef _CUDA_SEMAPHORE |
| | #define _CUDA_SEMAPHORE |
| |
|
| | #include "atomic" |
| |
|
| | #include "detail/__config" |
| |
|
| | #include "detail/__pragma_push" |
| |
|
| | #include "detail/libcxx/include/semaphore" |
| |
|
| | _LIBCUDACXX_BEGIN_NAMESPACE_CUDA |
| |
|
| | template<thread_scope _Sco, ptrdiff_t __least_max_value = INT_MAX> |
| | class counting_semaphore : public std::__semaphore_base<__least_max_value, _Sco> |
| | { |
| | static_assert(__least_max_value <= std::__semaphore_base<__least_max_value, _Sco>::max(), ""); |
| | public: |
| | _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR |
| | counting_semaphore(ptrdiff_t __count = 0) : std::__semaphore_base<__least_max_value, _Sco>(__count) { } |
| | ~counting_semaphore() = default; |
| |
|
| | counting_semaphore(const counting_semaphore&) = delete; |
| | counting_semaphore& operator=(const counting_semaphore&) = delete; |
| | }; |
| |
|
| | template<thread_scope _Sco> |
| | using binary_semaphore = counting_semaphore<_Sco, 1>; |
| |
|
| | _LIBCUDACXX_END_NAMESPACE_CUDA |
| |
|
| | #include "detail/__pragma_pop" |
| |
|
| | #endif |
| |
|