1 #ifndef ISIMUD_EXCHANGES_COMMON_THREAD_TRAITS_HPP
2 # define ISIMUD_EXCHANGES_COMMON_THREAD_TRAITS_HPP
22 #include "core/numa_traits.hpp"
29 struct thread_traits {
30 using api_threading_traits=libjmmcg::
ppd::api_threading_traits<libjmmcg::
ppd::platform_api, libjmmcg::
ppd::heavyweight_threading>;
33 const api_threading_traits::api_params_type::priority_type priority{};
35 friend std::ostream &operator<<(
std::ostream &os, thread_info
const &ti)
noexcept(
false);
44 static inline constexpr auto numa_index=(libjmmcg::ppd::numa_cpu_traits::is_numa ? libjmmcg::ppd::numa_cpu_traits::node_mapping.max_size()-1 : 0);
45 static inline constexpr auto max_threads_on_node=libjmmcg::ppd::numa_cpu_traits::node_mapping[numa_index].max_size();
51 libjmmcg::ppd::numa_cpu_traits::node_mapping[0][0%max_threads_on_node],
52 api_threading_traits::api_params_type::priority_type::idle
55 libjmmcg::ppd::numa_cpu_traits::node_mapping[numa_index][0%max_threads_on_node],
56 api_threading_traits::api_params_type::priority_type::idle
59 libjmmcg::ppd::numa_cpu_traits::node_mapping[numa_index][1%max_threads_on_node],
60 api_threading_traits::api_params_type::priority_type::normal
63 libjmmcg::ppd::numa_cpu_traits::node_mapping[numa_index][2%max_threads_on_node],
64 api_threading_traits::api_params_type::priority_type::time_critical
66 static inline constexpr auto exchange_simulator_thread=thread_info{
67 libjmmcg::ppd::numa_cpu_traits::node_mapping[numa_index][3%max_threads_on_node],
68 api_threading_traits::api_params_type::priority_type::idle
73 operator<<(
std::ostream &os, thread_traits::thread_info
const &ti)
noexcept(
false) {
74 os<<
"core="<<ti.core<<
", priority="<<ti.priority;