BioCMAMC-ST
kokkos_getpolicy.hpp
1#ifndef __COMMON_KOKKOS_GET_POLICY_HPP__
2#define __COMMON_KOKKOS_GET_POLICY_HPP__
3
4#include <Kokkos_Core.hpp>
5#include <common/common.hpp>
6#include <common/env_var.hpp>
7
8namespace
9{
10 template <typename T> struct TagDetector
11 {
12 KOKKOS_FUNCTION void
13 operator()(
14 T _tag,
15 const Kokkos::TeamPolicy<ComputeSpace>::member_type& team_handle) const
16 {
17 (void)team_handle;
18 (void)_tag;
19 }
20
21 // void operator()(
22 // T _tag,
23 // const Kokkos::TeamPolicy<ComputeSpace>::member_type& team_handle)
24 // const
25 // {
26 // (void)_tag;
27 // (void)team_handle;
28 // }
29 TagDetector() = default;
30 };
31} // namespace
32
33namespace Common
34{
35
36 template <typename FunctorType, typename Tag = int>
37 [[deprecated]] Kokkos::TeamPolicy<ComputeSpace, Tag>
38 get_policy(const FunctorType& f, std::size_t range, bool reduce = false)
39 {
40 (void)reduce;
41 Kokkos::TeamPolicy<Tag> _policy;
42
43 const auto recommended_team_size
44 = _policy.team_size_recommended(f, Kokkos::ParallelForTag{});
45
46 const auto team_size
47 = Common::read_env_or("BIOMC_TEAM_SIZE", recommended_team_size);
48
49 const auto league_size
50 = (static_cast<int>(range) + team_size - 1) / team_size;
51
52 return Kokkos::TeamPolicy<ComputeSpace, Tag>(league_size, team_size);
53 }
54
55 template <typename Tag = int>
56 [[deprecated]] Kokkos::TeamPolicy<ComputeSpace, Tag>
57 get_policy(std::size_t range, bool reduce = false)
58 {
59 auto f = TagDetector<Tag>();
60 return get_policy<decltype(f), Tag>(f, range, reduce);
61 }
62
63 template <typename Tag = void>
64 Kokkos::TeamPolicy<ComputeSpace, Tag>
65 get_policy_team(std::size_t league_size = 1)
66 {
67 const auto _league_size = read_env_or("BIOMC_LEAGUE_SIZE", league_size);
68 return Kokkos::TeamPolicy<ComputeSpace, Tag>(_league_size, Kokkos::AUTO);
69 }
70} // namespace Common
71#endif
Definition config_loader.hpp:8
T read_env_or(std::string_view varname, T vdefault)
Wrapper arround get_env to get envariable with fallback to default.
Definition env_var.hpp:49
Kokkos::TeamPolicy< ComputeSpace, Tag > get_policy(const FunctorType &f, std::size_t range, bool reduce=false)
Definition kokkos_getpolicy.hpp:38
Kokkos::TeamPolicy< ComputeSpace, Tag > get_policy_team(std::size_t league_size=1)
Definition kokkos_getpolicy.hpp:65