我必须让特定的核心忙等待。
例如,cpu中有4个核心(core_1,core_2,core_3,core_4),我需要让core_2忙等待t纳秒,同时其他核心仍处理他们的没有忙等待的任务。
那么,有没有办法实现这个目标?
cpu的型号名称是 Intel(R)Xeon(R)CPU E5-2650 v3 @ 2.30GHz
答案 0 :(得分:0)
此代码将您当前的线程绑定到特定的核心。 这是直到线程结束或你调用类似的东西。
仅当您的操作系统允许
时此处使用4.9.11-1-ARCH
和Intel(R) Core(TM) i5-3320M CPU
#include <pthread.h>
#include <iostream>
#define handle_error(msg) \
do { std::cerr << msg << std::endl; exit(-1); } while (0)
void bindToSingleCore(int core)
{
pthread_t thread = pthread_self();
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(core, &cpuset);
//bind this thread to one core
int s = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
if (s != 0)
{
handle_error("Cannot write cpuset");
}
}
int main()
{
bindToSingleCore(1); //replace with your core
//(0==first core, 1==second, ...)
unsigned int j;
for(unsigned int i=0; i<-1; i++)
{
j+=i;
//usleep(100); //when uncommented core is not at 100% anymore..
}
}
使用以下内容编译并运行:
g++ prog.cpp -pthread && ./a.out
打开您最喜爱的进程监视器并观察您的核心。它应该是100%负载。