Kokkos Core Kernels Package
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
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
34
namespace
Kokkos {
35
37
38
#if defined(KOKKOS_COMPILER_GNU) && (KOKKOS_COMPILER_GNU == 1030) && \
39
defined(KOKKOS_COMPILER_NVCC)
40
class
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
64
class
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 */
Kokkos::Timer
Time since construction.
Definition
Kokkos_Timer.hpp:64
Generated by
1.17.0