可能有一个库或简单的汇编代码块可以获取我正在执行的当前CPU的编号。
sched_getcpu
函数可确定调用线程所在的CPU。请参阅man getcpu
(系统调用)和man sched_getcpu
(库包装器)。但请注意以下内容:放置在cpu中的信息只在调用时保证是当前的:除非使用sched_setaffinity(2)固定了CPU亲和力,否则内核可能随时更改CPU。(通常不会发生,因为调度程序试图最小化在CPU之间的移动以保持缓存热,但是有可能发生。) 调用者必须准备好处理当cpu和node不再是当前CPU和节点时的情况。
sched_setaffinity
+ sched_getcpu
C 示例:https://dev59.com/DGkv5IYBdhLWcg3wlR31#50117787 - Ciro Santilli OurBigBook.com现在,每当需要时,您都可以再次使用CPUID并查找所在的核心。
但我想询问为什么您需要这样做;通常情况下,您希望通过sched_setaffinity来控制,而不是找出您在哪个核心上(即使这也是一个相当罕见的需求/需要)。 (这就是为什么我不知道从CPUID中提取什么关键细节,抱歉!)我不知道有什么方法可以获取当前的核心id。若使用内核级别的任务/进程迁移,不能保证它会在任何时间段内保持不变,除非你正在运行某种实时模式。
如果你想要运行在特定的核心上,你可以使用 sched_setaffinity()
函数或 taskset
命令来启动你的程序。我相信这些需要提升的权限才能工作。在你的程序中,你可以运行 sched_getaffinity()
来查看之前设置的掩码,并将其用作你正在执行的核心的最佳猜测。
sysconf(_SC_NPROCESSORS_ONLN);