NUMA++ 0.11.0
Loading...
Searching...
No Matches
General Utilities

NUMA++ General Utilities. More...

Files

file  bitmask.hpp
 Contains declarations for numapp::Bitmask.
 
file  cpumask.hpp
 Contains declarations for CpumaskTrait.
 
file  nodemask.hpp
 Contains declarations for Nodemask.
 

Namespaces

namespace  numapp
 

Classes

class  numapp::Bitmask< Class >
 Generic bitmask. More...
 
class  numapp::Cpumask
 Type-safe CPU mask. More...
 
struct  numapp::Nodemask
 Type-safe NUMA node mask. More...
 

Typedefs

using numapp::NumaBitmaskPtr = std::unique_ptr<struct bitmask, void (*)(struct bitmask*)>
 Lowlevel bitmask type.
 

Functions

template<class Class, class F>
void numapp::ForEach (Bitmask< Class > const &bitmask, F &&f, bool value=true)
 Invoke function for each bit in mask that matches value.
 
template<class Class>
std::ostream & numapp::FormatBitmask (std::ostream &os, Bitmask< Class > const &mask, int min_bits)
 Formats mask and inserts it to os.
 
std::ostream & numapp::FormatBitmask (std::ostream &os, bitmask const *mask, int min_bits)
 Formats mask and inserts it to os.
 
std::ostream & numapp::operator<< (std::ostream &os, Cpumask const &mask)
 Formats mask and inserts it to os.
 
std::ostream & numapp::operator<< (std::ostream &os, Nodemask const &mask)
 Formats mask and inserts it to os.
 
bool numapp::NumaAvailable () noexcept
 Query whether system has NUMA support.
 
template<class Class, class F>
void ForEach (Bitmask< Class > const &bitmask, F &&f, bool value=true)
 Invoke function for each bit in mask that matches value.
 
template<class Class>
std::ostream & FormatBitmask (std::ostream &os, Bitmask< Class > const &mask, int min_bits)
 Formats mask and inserts it to os.
 
std::ostream & FormatBitmask (std::ostream &os, bitmask const *mask, int min_bits)
 Formats mask and inserts it to os.
 

Detailed Description

NUMA++ General Utilities.

Function Documentation

◆ ForEach() [1/2]

template<class Class, class F>
void ForEach ( Bitmask< Class > const & bitmask,
F && f,
bool value = true )
related

Invoke function for each bit in mask that matches value.

Parameters
bitmaskBitmask to iterate over.
ffunction callable as f(position) where position is the unsigned int bit position.
valueto test bit for (true == bit is set, false == bit is unset).

Example that starts a pinned thread for each bit in a CPU mask:

#include <chrono>
#include <iostream>
#include <numapp/numa.hpp>
void ThreadFunc(std::chrono::milliseconds duration) {
std::cout << "Thread affinity: " << numapp::CpuAffinity::MakeFromActive() << std::endl;
std::this_thread::sleep_for(duration);
}
int main() {
using namespace numapp;
using namespace std::chrono_literals;
if (!NumaAvailable()) {
std::cout << "NUMA not available";
return -1;
}
std::vector<std::thread> threads;
std::string name = "thread-";
// Launch thread for each CPU in CPU string
ForEach(Cpumask::MakeFromCpuStringAll("0-3"), [&](unsigned int cpu) {
threads.push_back(MakeThread(
name + std::to_string(cpu), CpuAffinity::MakeBindCpu(cpu), &ThreadFunc, 500ms));
});
for (auto& thread : threads) {
thread.join();
}
}
static CpuAffinity MakeBindCpu(int cpu)
Create CpuAffinity bound to the specified CPU.
static CpuAffinity MakeFromActive()
Create current affinity settings.
static Cpumask MakeFromCpuStringAll(char const *cpustring)
Construct Cpumask from cpustring that does not consider current cpuset.
Definition cpumask.hpp:44
Contains declarations for CpumaskTrait.
bool NumaAvailable() noexcept
Query whether system has NUMA support.
Definition numa.hpp:34
void ForEach(Bitmask< Class > const &bitmask, F &&f, bool value=true)
Invoke function for each bit in mask that matches value.
Definition bitmask.hpp:220
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:144
Contains declarations for numapp thread utilities.
Header file
<numapp/bitmask.hpp>
See also
Cpumask Nodemask

Definition at line 220 of file bitmask.hpp.

◆ ForEach() [2/2]

template<class Class, class F>
void numapp::ForEach ( Bitmask< Class > const & bitmask,
F && f,
bool value = true )
related

Invoke function for each bit in mask that matches value.

Parameters
bitmaskBitmask to iterate over.
ffunction callable as f(position) where position is the unsigned int bit position.
valueto test bit for (true == bit is set, false == bit is unset).

Example that starts a pinned thread for each bit in a CPU mask:

#include <chrono>
#include <iostream>
#include <numapp/numa.hpp>
void ThreadFunc(std::chrono::milliseconds duration) {
std::cout << "Thread affinity: " << numapp::CpuAffinity::MakeFromActive() << std::endl;
std::this_thread::sleep_for(duration);
}
int main() {
using namespace numapp;
using namespace std::chrono_literals;
if (!NumaAvailable()) {
std::cout << "NUMA not available";
return -1;
}
std::vector<std::thread> threads;
std::string name = "thread-";
// Launch thread for each CPU in CPU string
ForEach(Cpumask::MakeFromCpuStringAll("0-3"), [&](unsigned int cpu) {
threads.push_back(MakeThread(
name + std::to_string(cpu), CpuAffinity::MakeBindCpu(cpu), &ThreadFunc, 500ms));
});
for (auto& thread : threads) {
thread.join();
}
}
Header file
<numapp/bitmask.hpp>
See also
Cpumask Nodemask

Definition at line 220 of file bitmask.hpp.

◆ FormatBitmask() [1/4]

template<class Class>
std::ostream & FormatBitmask ( std::ostream & os,
bitmask const * mask,
int min_bits )
related

Formats mask and inserts it to os.

Parameters
osoutput stream to insert into.
maskBitmask to format.
min_bitsMinimum number of bits to format.
Returns
os

Definition at line 13 of file bitmask.cpp.

◆ FormatBitmask() [2/4]

template<class Class>
std::ostream & FormatBitmask ( std::ostream & os,
Bitmask< Class > const & mask,
int min_bits )
related

Formats mask and inserts it to os.

Parameters
osoutput stream to insert into.
maskBitmask to format.
min_bitsMinimum number of bits to format.
Returns
os

Definition at line 215 of file bitmask.hpp.

◆ FormatBitmask() [3/4]

std::ostream & FormatBitmask ( std::ostream & os,
bitmask const * mask,
int min_bits )
related

Formats mask and inserts it to os.

Parameters
osoutput stream to insert into.
maskBitmask to format.
min_bitsMinimum number of bits to format.
Returns
os

Definition at line 13 of file bitmask.cpp.

◆ FormatBitmask() [4/4]

template<class Class>
std::ostream & numapp::FormatBitmask ( std::ostream & os,
Bitmask< Class > const & mask,
int min_bits )
related

Formats mask and inserts it to os.

Parameters
osoutput stream to insert into.
maskBitmask to format.
min_bitsMinimum number of bits to format.
Returns
os

Definition at line 215 of file bitmask.hpp.

◆ NumaAvailable()

bool numapp::NumaAvailable ( )
inlinenodiscardnoexcept

Query whether system has NUMA support.

Example use:

#include <iostream>
#include <numapp/numa.hpp>
int main() {
std::cout << "NUMA not available";
return -1;
}
auto policy = StaticScheduler(StaticScheduler::Policy::Fifo, 99);
// Set CPU affinity for main thread
if (auto ec = numapp::thisThread::Apply(policy); ec) {
std::cout << "Failed to apply policy: " << ec.message() << std::endl;
return 1;
}
}
Static priority scheduler (real-time).
std::error_code Apply(CpuAffinity const &affinity) noexcept
Apply policy to calling thread.
Contains scheduler declarations.
Returns
true if system has NUMA support available.
false otherwise which makes result of any other NUMA++ function unspecified.
Related man-page(s):
Header file
<numapp/numa.hpp>

Definition at line 34 of file numa.hpp.

◆ operator<<() [1/2]

std::ostream & numapp::operator<< ( std::ostream & os,
Cpumask const & mask )
inline

Formats mask and inserts it to os.

Mask up to number of configured CPUs are formatted if no higher bits are set.

Parameters
osoutput stream to insert into.
maskCpumask to format.
Returns
os

Definition at line 96 of file cpumask.hpp.

◆ operator<<() [2/2]

std::ostream & numapp::operator<< ( std::ostream & os,
Nodemask const & mask )
inline

Formats mask and inserts it to os.

Mask up to number of configured NUMA nodes are formatted if no higher bits are set.

Parameters
osoutput stream to insert into.
maskNodemask to format.
Returns
os

Definition at line 94 of file nodemask.hpp.