Kokkos Core Kernels Package Version of the Day
Loading...
Searching...
No Matches
Kokkos_Timer.hpp
1//@HEADER
2// ************************************************************************
3//
4// Kokkos v. 4.0
5// Copyright (2022) National Technology & Engineering
6// Solutions of Sandia, LLC (NTESS).
7//
8// Under the terms of Contract DE-NA0003525 with NTESS,
9// the U.S. Government retains certain rights in this software.
10//
11// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions.
12// See https://kokkos.org/LICENSE for license information.
13// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
14//
15//@HEADER
16
17#ifndef KOKKOS_TIMER_HPP
18#define KOKKOS_TIMER_HPP
19#ifndef KOKKOS_IMPL_PUBLIC_INCLUDE
20#define KOKKOS_IMPL_PUBLIC_INCLUDE
21#define KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_TIMER
22#endif
23
24#include <Kokkos_Macros.hpp>
25// gcc 10.3.0 with CUDA doesn't support std::chrono,
26// see https://github.com/kokkos/kokkos/issues/4334
27#if defined(KOKKOS_COMPILER_GNU) && (KOKKOS_COMPILER_GNU == 1030) && \
28 defined(KOKKOS_COMPILER_NVCC)
29#include <sys/time.h>
30#else
31#include <chrono>
32#endif
33
34namespace Kokkos {
35
38#if defined(KOKKOS_COMPILER_GNU) && (KOKKOS_COMPILER_GNU == 1030) && \
39 defined(KOKKOS_COMPILER_NVCC)
40class Timer {
41 private:
42 struct timeval m_old;
43
44 public:
45 inline void reset() { gettimeofday(&m_old, nullptr); }
46
47 inline ~Timer() = default;
48
49 inline Timer() { reset(); }
50
51 Timer(const Timer&) = delete;
52 Timer& operator=(const Timer&) = delete;
53
54 inline double seconds() const {
55 struct timeval m_new;
56
57 gettimeofday(&m_new, nullptr);
58
59 return ((double)(m_new.tv_sec - m_old.tv_sec)) +
60 ((double)(m_new.tv_usec - m_old.tv_usec) * 1.0e-6);
61 }
62};
63#else
64class Timer {
65 private:
66 std::chrono::high_resolution_clock::time_point m_old;
67
68 public:
69 inline void reset() { m_old = std::chrono::high_resolution_clock::now(); }
70
71 inline ~Timer() = default;
72
73 inline Timer() { reset(); }
74
75 Timer(const Timer&);
76 Timer& operator=(const Timer&);
77
78 inline double seconds() const {
79 std::chrono::high_resolution_clock::time_point m_new =
80 std::chrono::high_resolution_clock::now();
81 return std::chrono::duration_cast<std::chrono::duration<double> >(m_new -
82 m_old)
83 .count();
84 }
85};
86#endif
87
88} // namespace Kokkos
89
90#ifdef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_TIMER
91#undef KOKKOS_IMPL_PUBLIC_INCLUDE
92#undef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_TIMER
93#endif
94#endif /* #ifndef KOKKOS_TIMER_HPP */
A thread safe view to a bitset.
Time since construction.