| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #ifndef _CUDA_CHRONO |
| #define _CUDA_CHRONO |
|
|
| #ifndef __CUDACC_RTC__ |
| #include <chrono> |
| #endif |
|
|
| #include "ctime" |
| #include "type_traits" |
| #include "ratio" |
| #include "limits" |
| #include "version" |
|
|
| #include "detail/__config" |
|
|
| #include "detail/__pragma_push" |
|
|
| |
| |
|
|
| |
| |
| |
| |
| #if defined(_LIBCUDACXX_COMPILER_NVCC) |
| # if (CUDART_VERSION >= 11050) |
| # pragma nv_diag_suppress cuda_demote_unsupported_floating_point |
| # else |
| # pragma diag_suppress cuda_demote_unsupported_floating_point |
| # endif |
| #endif |
|
|
| #include "detail/libcxx/include/chrono" |
|
|
| _LIBCUDACXX_BEGIN_NAMESPACE_STD |
|
|
| namespace chrono { |
|
|
| inline _LIBCUDACXX_INLINE_VISIBILITY |
| system_clock::time_point system_clock::now() _NOEXCEPT |
| { |
| #ifdef __CUDA_ARCH__ |
| uint64_t __time; |
| asm volatile("mov.u64 %0, %globaltimer;":"=l"(__time)::); |
| return time_point(duration_cast<duration>(nanoseconds(__time))); |
| #else |
| return time_point(duration_cast<duration>(nanoseconds( |
| ::std::chrono::duration_cast<::std::chrono::nanoseconds>( |
| ::std::chrono::system_clock::now().time_since_epoch() |
| ).count() |
| ))); |
| #endif |
| } |
|
|
| inline _LIBCUDACXX_INLINE_VISIBILITY |
| time_t system_clock::to_time_t(const system_clock::time_point& __t) _NOEXCEPT |
| { |
| return time_t(duration_cast<seconds>(__t.time_since_epoch()).count()); |
| } |
|
|
| inline _LIBCUDACXX_INLINE_VISIBILITY |
| system_clock::time_point system_clock::from_time_t(time_t __t) _NOEXCEPT |
| { |
| return time_point(seconds(__t));; |
| } |
| } |
|
|
| _LIBCUDACXX_END_NAMESPACE_STD |
|
|
| #include "detail/__pragma_pop" |
|
|
| #endif |
|
|
|
|
|
|