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 operator()(
13 T _tag,
14 const Kokkos::TeamPolicy<ComputeSpace>::member_type& team_handle) const
15 {
16 (void)team_handle;
17 (void)_tag;
18 }
19
20 // void operator()(
21 // T _tag,
22 // const Kokkos::TeamPolicy<ComputeSpace>::member_type& team_handle)
23 // const
24 // {
25 // (void)_tag;
26 // (void)team_handle;
27 // }
28 TagDetector() = default;
29 };
30} // namespace
31
32namespace Common
33{
34
35 template <typename FunctorType, typename Tag = int>
36 [[deprecated]] Kokkos::TeamPolicy<ComputeSpace, Tag>
37 get_policy(const FunctorType& f, std::size_t range, bool reduce = false)
38 {
39 (void)reduce;
40 Kokkos::TeamPolicy<Tag> _policy;
41
42 const auto recommended_team_size =
43 _policy.team_size_recommended(f, Kokkos::ParallelForTag{});
44
45 const auto team_size =
46 Common::read_env_or("BIOMC_TEAM_SIZE", recommended_team_size);
47
48 const auto league_size =
49 (static_cast<int>(range) + team_size - 1) / team_size;
50
51 return Kokkos::TeamPolicy<ComputeSpace, Tag>(league_size, team_size);
52 }
53
54 template <typename Tag = int>
55 [[deprecated]] Kokkos::TeamPolicy<ComputeSpace, Tag>
56 get_policy(std::size_t range, bool reduce = false)
57 {
58 auto f = TagDetector<Tag>();
59 return get_policy<decltype(f), Tag>(f, range, reduce);
60 }
61
62 template <typename Tag = void>
63 Kokkos::TeamPolicy<ComputeSpace, Tag>
64 get_policy_team(std::size_t league_size = 1)
65 {
66 const auto _league_size = read_env_or("BIOMC_LEAGUE_SIZE", league_size);
67 return Kokkos::TeamPolicy<ComputeSpace, Tag>(_league_size, Kokkos::AUTO);
68 }
69} // namespace Common
70#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:12
Kokkos::TeamPolicy< ComputeSpace, Tag > get_policy(const FunctorType &f, std::size_t range, bool reduce=false)
Definition kokkos_getpolicy.hpp:37
Kokkos::TeamPolicy< ComputeSpace, Tag > get_policy_team(std::size_t league_size=1)
Definition kokkos_getpolicy.hpp:64