NUMA++ 0.10.0
Loading...
Searching...
No Matches
makeThreadExample2.cpp
1#include <numapp/memory.hpp>
2#include <numapp/thread.hpp>
3
4template <class F, class... Args>
5auto MakePinnedThread(int cpu, std::string_view name, F&& f, Args... args) -> std::thread {
6 using namespace numapp;
7
8 NumaPolicies policies;
9 policies.SetCpuAffinity(CpuAffinity::MakeBindCpu(cpu));
10 auto node = GetNodeOfCpu(cpu);
11 if (!node.has_value()) {
12 throw std::invalid_argument("cpu invalid");
13 }
14 policies.SetMemPolicy(MemPolicy::MakeBindNode(*node));
15 return MakeThread(name, policies, std::forward<F>(f), std::forward<Args>(args)...);
16}
Combines the the available NUMA policy types in one object.
void SetCpuAffinity(std::optional< CpuAffinity > affinity) noexcept
Set CPU affinity.
void SetMemPolicy(std::optional< MemPolicy > policy) noexcept
Set memory policy.
std::optional< int > GetNodeOfCpu(int cpu) noexcept
Get NUMA node of the given CPU.
Definition memory.cpp:53
std::thread MakeThread(std::string_view thread_name, NumaPolicies const &policies, Func &&func, Args &&... args)
Primary overload accepting string-view for thread_name.
Definition thread.hpp:137
Contains memory function declarations.
Contains declarations for numapp thread utilities.