| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #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 |
|
|