Gibt es eine progmatische Methode, CPU-Affinität für einen Prozess in C/C++ für das Linux-Betriebssystem festzulegen.CPU-Affinität
Antwort
Sie müssen sched_setaffinity(2)
verwenden.
Zum Beispiel auf CPUs 0 und 2 nur auszuführen:
#define _GNU_SOURCE
#include <sched.h>
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(0, &mask);
CPU_SET(2, &mask);
result = sched_setaffinity(0, sizeof(mask), &mask);
(0
für den ersten Parameter bedeutet den aktuellen Prozess, liefern eine PID, wenn es ein anderer Prozess ist Sie steuern möchten).
Siehe auch sched_getcpu(3)
.
Verwenden Sie sched_setaffinity auf der Prozessebene oder pthread_attr_setaffinity_np für einzelne Threads.
Kurz
unsigned long mask = 7; /* processors 0, 1, and 2 */
unsigned int len = sizeof(mask);
if (sched_setaffinity(0, len, &mask) < 0) {
perror("sched_setaffinity");
}
Blick in CPU Affinity für mehr Details
hinzu. Sie sollten den richtigen Typ und die entsprechenden Makros (z 'cpu_set_t' und' CPU_SET') - es gibt keine Garantie, dass die Bits in einem 'long' an der richtigen Stelle sind. – Alnitak
Ich habe viele Mühe gemacht zu realisieren, was passiert ist, so füge ich diese Antwort für Leute wie mich helfen (ich benutze gcc
Compiler unter Linux Minze)
#include <sched.h>
cpu_set_t mask;
inline void assignToThisCore(int core_id)
{
CPU_ZERO(&mask);
CPU_SET(core_id, &mask);
sched_setaffinity(0, sizeof(mask), &mask);
}
int main(){
//cal this:
assignToThisCore(2);//assign to core 0,1,2,...
return 0;
}
Aber vergessen Sie nicht, diese Optionen für den Compiler-Befehl hinzuzufügen: -D _GNU_SOURCE
Da Betriebssystem könnte einen Prozess auf den jeweiligen Kern zuordnen, können Sie in /etc/default
und der Lauf sudo update-grub
in Terminal diese GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=2,3"
in die grub-Datei hinzufügen, die Kerne Sie
möchten reservieren Dies könnte Kompliment an die Technik: die CPU abfragen der Thread läuft gerade auf benutze dies: –
ScrollerBlaster
Vergessen Sie nicht, _GNU_SOURCE_ zu definieren, wenn Sie –
kompilieren. ZB fügen Sie dem gcc-Befehl "-D _GNU_SOURCE" – Simon