40 lines
1018 B
C++
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
|