BioCMAMC-ST
common.hpp
1#ifndef __COMMON_EXPORT_HPP__
2#define __COMMON_EXPORT_HPP__
3
4#include "Kokkos_Macros.hpp"
5#include <biocma_cst_config.hpp>
6#include <common/alg.hpp>
7#include <common/execinfo.hpp>
8#include <common/traits.hpp>
9#include <string_view>
10
11using ComputeSpace = Kokkos::DefaultExecutionSpace;
12using HostSpace = Kokkos::HostSpace;
13
14#ifdef ENABLE_KOKKOS_PROFILING
15# include <Kokkos_Profiling_ScopedRegion.hpp>
16# define PROFILE_SECTION(__label_section__) \
17 Kokkos::Profiling::ScopedRegion region(__label_section__);
18#else
19# define PROFILE_SECTION(__label_section__) ;
20#endif
21
22#define EIGEN_INDEX(__VALUE__) static_cast<int>(__VALUE__)
23
24#ifndef NDEBUG
25# include <iostream>
26# include <source_location>
27class Canary
28{
29public:
30 Canary() = delete;
31 Canary(const Canary&) = delete;
32 Canary(Canary&&) = delete;
33 Canary& operator=(const Canary&) = delete;
34 Canary& operator=(Canary&&) = delete;
35
36 explicit Canary(std::string_view lbl, std::source_location location)
37 : _lbl(lbl)
38 {
39 // std::cout << "\033[1;31m" << location.function_name() << "\033[0m " <<
40 // lbl << std::endl;
41 std::cout << location.function_name() << ": " << lbl << std::endl;
42 }
43
45 {
46 std::cout << "END " << _lbl << std::endl;
47 }
48
49private:
50 std::string _lbl;
51};
52# define MkCanary(x) Canary(x, std::source_location());
53#else
54# define MkCanary(x)
55#endif
56
57inline Kokkos::TeamPolicy<ComputeSpace> get_policy_auto(std::size_t range)
58{
59
60 Kokkos::TeamPolicy<ComputeSpace> _policy;
61
62 int recommended_team_size = _policy.team_size_recommended(
63 KOKKOS_LAMBDA(
64 const Kokkos::TeamPolicy<ComputeSpace>::member_type& team_handle) {
65 std::size_t idx = team_handle.league_rank() * team_handle.team_size() +
66 team_handle.team_rank();
67 if (idx >= range)
68 {
69 return;
70 }
71 },
72 Kokkos::ParallelForTag());
73 int league_size = (static_cast<int>(range) + recommended_team_size - 1) /
74 recommended_team_size;
75
76 _policy =
77 Kokkos::TeamPolicy<ComputeSpace>(league_size, recommended_team_size);
78
79 return _policy;
80}
81
82#endif //__COMMON_EXPORT_HPP__
Canary & operator=(const Canary &)=delete
~Canary()
Definition common.hpp:44
Canary(Canary &&)=delete
Canary()=delete
Canary(std::string_view lbl, std::source_location location)
Definition common.hpp:36
Canary(const Canary &)=delete
Canary & operator=(Canary &&)=delete
std::string _lbl
Definition common.hpp:50