timemory 3.3.0
Modular C++ Toolkit for Performance Analysis and Logging. Profiling API and Tools for C, C++, CUDA, Fortran, and Python. The C++ template API is essentially a framework to creating tools: it is designed to provide a unifying interface for recording various performance measurements alongside data logging and interfaces to other tools.
macros.hpp
Go to the documentation of this file.
1// MIT License
2//
3// Copyright (c) 2020, The Regents of the University of California,
4// through Lawrence Berkeley National Laboratory (subject to receipt of any
5// required approvals from the U.S. Dept. of Energy). All rights reserved.
6//
7// Permission is hereby granted, free of charge, to any person obtaining a copy
8// of this software and associated documentation files (the "Software"), to deal
9// in the Software without restriction, including without limitation the rights
10// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11// copies of the Software, and to permit persons to whom the Software is
12// furnished to do so, subject to the following conditions:
13//
14// The above copyright notice and this permission notice shall be included in all
15// copies or substantial portions of the Software.
16//
17// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23// SOFTWARE.
24
25#pragma once
26
29
30//======================================================================================//
31//
32// Define macros for ert
33//
34//======================================================================================//
35//
36#if defined(TIMEMORY_USE_EXTERN) && !defined(TIMEMORY_USE_ERT_EXTERN)
37# define TIMEMORY_USE_ERT_EXTERN
38#endif
39//
40#if defined(TIMEMORY_ERT_SOURCE)
41# define TIMEMORY_ERT_LINKAGE(...) __VA_ARGS__
42#elif defined(TIMEMORY_USE_ERT_EXTERN)
43# define TIMEMORY_ERT_LINKAGE(...) __VA_ARGS__
44#else
45# define TIMEMORY_ERT_LINKAGE(...) inline __VA_ARGS__
46#endif
47//
48//--------------------------------------------------------------------------------------//
49//
50#if !defined(TIMEMORY_DECLARE_ERT_EXTERN_TEMPLATE)
51# define TIMEMORY_DECLARE_ERT_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;
52#endif
53//
54#if !defined(TIMEMORY_INSTANTIATE_ERT_EXTERN_TEMPLATE)
55# define TIMEMORY_INSTANTIATE_ERT_EXTERN_TEMPLATE(...) template __VA_ARGS__;
56#endif
57//
58#if defined(TIMEMORY_ERT_SOURCE)
59# if !defined(TIMEMORY_ERT_EXTERN_TEMPLATE)
60# define TIMEMORY_ERT_EXTERN_TEMPLATE(...) \
61 TIMEMORY_INSTANTIATE_ERT_EXTERN_TEMPLATE(__VA_ARGS__)
62# endif
63#elif defined(TIMEMORY_USE_ERT_EXTERN)
64# if !defined(TIMEMORY_ERT_EXTERN_TEMPLATE)
65# define TIMEMORY_ERT_EXTERN_TEMPLATE(...) \
66 TIMEMORY_DECLARE_ERT_EXTERN_TEMPLATE(__VA_ARGS__)
67# endif
68#else
69# if !defined(TIMEMORY_ERT_EXTERN_TEMPLATE)
70# define TIMEMORY_ERT_EXTERN_TEMPLATE(...)
71# endif
72#endif
73//
74//--------------------------------------------------------------------------------------//
75//
76#if !defined(TIMEMORY_DECLARE_ERT_EXTERN_TEMPLATE_CPU)
77# if defined(TIMEMORY_USE_ERT_EXTERN) || defined(TIMEMORY_ERT_SOURCE)
78# define TIMEMORY_DECLARE_ERT_EXTERN_TEMPLATE_CPU(...) \
79 TIMEMORY_DECLARE_ERT_EXTERN_TEMPLATE(__VA_ARGS__)
80# else
81# define TIMEMORY_DECLARE_ERT_EXTERN_TEMPLATE_CPU(...)
82# endif
83#endif
84
85#if !defined(TIMEMORY_INSTANTIATE_ERT_EXTERN_TEMPLATE_CPU)
86# if defined(TIMEMORY_USE_ERT_EXTERN) || defined(TIMEMORY_ERT_SOURCE)
87# define TIMEMORY_INSTANTIATE_ERT_EXTERN_TEMPLATE_CPU(...) \
88 TIMEMORY_INSTANTIATE_ERT_EXTERN_TEMPLATE(__VA_ARGS__)
89# else
90# define TIMEMORY_INSTANTIATE_ERT_EXTERN_TEMPLATE_CPU(...)
91# endif
92#endif
93//
94//--------------------------------------------------------------------------------------//
95//
96#if !defined(TIMEMORY_DECLARE_ERT_EXTERN_TEMPLATE_GPU)
97# if(defined(TIMEMORY_USE_ERT_EXTERN) && \
98 (defined(TIMEMORY_USE_CUDA) || defined(TIMEMORY_USE_HIP))) || \
99 (defined(TIMEMORY_ERT_SOURCE) && defined(TIMEMORY_GPUCC))
100# define TIMEMORY_DECLARE_ERT_EXTERN_TEMPLATE_GPU(...) \
101 TIMEMORY_DECLARE_ERT_EXTERN_TEMPLATE(__VA_ARGS__)
102# else
103# define TIMEMORY_DECLARE_ERT_EXTERN_TEMPLATE_GPU(...)
104# endif
105#endif
106
107#if !defined(TIMEMORY_INSTANTIATE_ERT_EXTERN_TEMPLATE_GPU)
108# if(defined(TIMEMORY_USE_ERT_EXTERN) && \
109 (defined(TIMEMORY_USE_CUDA) || defined(TIMEMORY_USE_HIP))) || \
110 (defined(TIMEMORY_ERT_SOURCE) && defined(TIMEMORY_GPUCC))
111# define TIMEMORY_INSTANTIATE_ERT_EXTERN_TEMPLATE_GPU(...) \
112 TIMEMORY_INSTANTIATE_ERT_EXTERN_TEMPLATE(__VA_ARGS__)
113# else
114# define TIMEMORY_INSTANTIATE_ERT_EXTERN_TEMPLATE_GPU(...)
115# endif
116#endif