如何知道我的代码正在哪个物理处理器和哪个物理核心上运行
在 C 程序中,我如何知道我的代码正在哪个物理处理器和内核上运行? 我正在使用 Linux 和 gcc 4.4.3。
How can I know in a C program, on which physical processor and core my code is running?
I'm using Linux and gcc 4.4.3.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
调用返回虚拟 CPU 编号。虚拟 CPU 到真实 CPU 信息的映射位于 /proc/cpuinfo 中。
如果您的系统支持 VDSO,则
sched_getcpu()
相对较快。CPU编号也可以使用
CPUID
指令获取,但它比sched_getcpu()
慢。call returns virtual CPU number. Mapping of virtual CPU to real CPU info is in /proc/cpuinfo.
If your system supports VDSO, then
sched_getcpu()
is relatively fast.CPU number can be also obtained using
CPUID
instruction, but it is slower thansched_getcpu()
.请参阅 http://en.wikipedia.org/wiki/CPUID#Accessing_the_id_from_other_languages
你想要什么是 APIC ID...基本上:
See http://en.wikipedia.org/wiki/CPUID#Accessing_the_id_from_other_languages
What you want is the APIC ID... basically:
您可以根据http://www./proc//stat 文件系统检查。 kernel.org/doc/Documentation/filesystems/proc.txt,您应该只检查task_cpu标志。
作为没有正确类型和错误检查的示例:
You may check /proc//stat file system, according to http://www.kernel.org/doc/Documentation/filesystems/proc.txt, you should just check task_cpu flag.
As example without correct types and error checking:
您可以使用 GCC 获取进程与处理器的关联性。 CPU 关联 API 可能会帮助您。您是否正在尝试使用此信息来确保您的流程或此类高优先级任务不会被中断?
You can get the affinity of the process to a processor using GCC. The CPU affinity APIs might help you out. Are you trying to use this information to ensure your process is not interrupted or such high priority task?
总的来说,很难以有意义的方式找到这一点。您的线程在其生命周期中通常会在许多不同的处理器上运行。您可以调用一个函数来询问您所在的处理器,并在该函数执行时获得上下文切换。函数应该返回什么?
By and large it's hard to find this out in a meaningful way. Your thread will often run on many different processors during its life. You could call a function to ask which processor you are on and get a context switch whilst the function is executing. What should the function return?