mirror of
https://github.com/Dr-Noob/cpufetch.git
synced 2026-03-25 16:00:39 +01:00
[v1.05] Move bind_to_cpu from x86-specific to global (merging measure-freq #220)
This commit is contained in:
@@ -1,3 +1,14 @@
|
|||||||
|
#ifdef _WIN32
|
||||||
|
#define NOMINMAX
|
||||||
|
#include <windows.h>
|
||||||
|
#elif defined __linux__
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <sched.h>
|
||||||
|
#elif defined __FreeBSD__
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/cpuset.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -199,6 +210,34 @@ void* erealloc(void *ptr, size_t size) {
|
|||||||
return newptr;
|
return newptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef __APPLE__
|
||||||
|
bool bind_to_cpu(int cpu_id) {
|
||||||
|
#ifdef _WIN32
|
||||||
|
HANDLE process = GetCurrentProcess();
|
||||||
|
DWORD_PTR processAffinityMask = 1 << cpu_id;
|
||||||
|
return SetProcessAffinityMask(process, processAffinityMask);
|
||||||
|
#elif defined __linux__
|
||||||
|
cpu_set_t currentCPU;
|
||||||
|
CPU_ZERO(¤tCPU);
|
||||||
|
CPU_SET(cpu_id, ¤tCPU);
|
||||||
|
if (sched_setaffinity (0, sizeof(currentCPU), ¤tCPU) == -1) {
|
||||||
|
printWarn("sched_setaffinity: %s", strerror(errno));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
#elif defined __FreeBSD__
|
||||||
|
cpuset_t currentCPU;
|
||||||
|
CPU_ZERO(¤tCPU);
|
||||||
|
CPU_SET(cpu_id, ¤tCPU);
|
||||||
|
if(cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, sizeof(cpuset_t), ¤tCPU) == -1) {
|
||||||
|
printWarn("cpuset_setaffinity: %s", strerror(errno));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void print_version(FILE *restrict stream) {
|
void print_version(FILE *restrict stream) {
|
||||||
#ifdef GIT_FULL_VERSION
|
#ifdef GIT_FULL_VERSION
|
||||||
fprintf(stream, "cpufetch %s (%s %s)\n", GIT_FULL_VERSION, OS_STR, ARCH_STR);
|
fprintf(stream, "cpufetch %s (%s %s)\n", GIT_FULL_VERSION, OS_STR, ARCH_STR);
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ char *strremove(char *str, const char *sub);
|
|||||||
void* emalloc(size_t size);
|
void* emalloc(size_t size);
|
||||||
void* ecalloc(size_t nmemb, size_t size);
|
void* ecalloc(size_t nmemb, size_t size);
|
||||||
void* erealloc(void *ptr, size_t size);
|
void* erealloc(void *ptr, size_t size);
|
||||||
|
#ifndef __APPLE__
|
||||||
|
bool bind_to_cpu(int cpu_id);
|
||||||
|
#endif
|
||||||
void print_version(FILE *restrict stream);
|
void print_version(FILE *restrict stream);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -72,34 +72,6 @@ uint32_t get_apic_id(bool x2apic_id) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef __APPLE__
|
|
||||||
bool bind_to_cpu(int cpu_id) {
|
|
||||||
#ifdef _WIN32
|
|
||||||
HANDLE process = GetCurrentProcess();
|
|
||||||
DWORD_PTR processAffinityMask = 1 << cpu_id;
|
|
||||||
return SetProcessAffinityMask(process, processAffinityMask);
|
|
||||||
#elif defined __linux__
|
|
||||||
cpu_set_t currentCPU;
|
|
||||||
CPU_ZERO(¤tCPU);
|
|
||||||
CPU_SET(cpu_id, ¤tCPU);
|
|
||||||
if (sched_setaffinity (0, sizeof(currentCPU), ¤tCPU) == -1) {
|
|
||||||
printWarn("sched_setaffinity: %s", strerror(errno));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
#elif defined __FreeBSD__
|
|
||||||
cpuset_t currentCPU;
|
|
||||||
CPU_ZERO(¤tCPU);
|
|
||||||
CPU_SET(cpu_id, ¤tCPU);
|
|
||||||
if(cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, sizeof(cpuset_t), ¤tCPU) == -1) {
|
|
||||||
printWarn("cpuset_setaffinity: %s", strerror(errno));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
int get_total_cores_module(int total_cores, int module) {
|
int get_total_cores_module(int total_cores, int module) {
|
||||||
int total_modules = 2;
|
int total_modules = 2;
|
||||||
|
|||||||
@@ -17,10 +17,6 @@ struct apic {
|
|||||||
bool get_topology_from_apic(struct cpuInfo* cpu, struct topology* topo);
|
bool get_topology_from_apic(struct cpuInfo* cpu, struct topology* topo);
|
||||||
uint32_t is_smt_enabled_amd(struct topology* topo);
|
uint32_t is_smt_enabled_amd(struct topology* topo);
|
||||||
|
|
||||||
#ifndef __APPLE__
|
|
||||||
bool bind_to_cpu(int cpu_id);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
int get_total_cores_module(int total_cores, int module);
|
int get_total_cores_module(int total_cores, int module);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user