Files
Jungfraujoch/common/NUMAHWPolicy.h

40 lines
1018 B
C++

// Copyright (2019-2023) Paul Scherrer Institute
#ifndef JUNGFRAUJOCH_NUMAHWPOLICY_H
#define JUNGFRAUJOCH_NUMAHWPOLICY_H
#include <cstdint>
#include <vector>
#include <string>
#include <atomic>
struct NUMABinding {
int32_t cpu_node;
int32_t mem_node;
int32_t gpu;
};
class NUMAHWPolicy {
std::string name;
std::vector<NUMABinding> bindings;
std::atomic<uint32_t> curr_thread = 0;
public:
NUMAHWPolicy() = default;
explicit NUMAHWPolicy(const std::string& policy);
NUMAHWPolicy(const NUMAHWPolicy& other);
NUMAHWPolicy& operator=(const NUMAHWPolicy& other);
NUMABinding GetBinding(uint32_t thread);
NUMABinding GetBinding(); // round-robin
const std::string &GetName() const;
void Bind(uint32_t thread);
void Bind(); // round-robin
static void Bind(const NUMABinding &binding);
static void RunOnNode(int32_t cpu_node);
static void MemOnNode(int32_t mem_node);
static void SelectGPU(int32_t gpu);
};
#endif //JUNGFRAUJOCH_NUMAHWPOLICY_H