Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在多核PowerPC上获取CPU ID?_Linux_Multicore_Powerpc - Fatal编程技术网

Linux 如何在多核PowerPC上获取CPU ID?

Linux 如何在多核PowerPC上获取CPU ID?,linux,multicore,powerpc,Linux,Multicore,Powerpc,我有一个多线程应用程序,它在8核PowerPC处理器上的Linux 2.6.30下运行。我想确定启动线程时使用的是哪个CPU。显而易见的答案是打印PID处理器ID专用寄存器。使用mfspr指令访问PID寄存器。我尝试在我的C程序中使用以下asm访问它: asm(" mfspr %0, 286 " : "=r" (cpu_no)); 问题在于mfspr是一条特权指令,即使此应用程序以root用户身份运行,它也会出现非法指令错误。此指令在裸机应用程序上执行时工作正常 虽然可以创建一个在内核空间执行

我有一个多线程应用程序,它在8核PowerPC处理器上的Linux 2.6.30下运行。我想确定启动线程时使用的是哪个CPU。显而易见的答案是打印PID处理器ID专用寄存器。使用mfspr指令访问PID寄存器。我尝试在我的C程序中使用以下asm访问它:

asm(" mfspr %0, 286 " : "=r" (cpu_no));
问题在于
mfspr
是一条特权指令,即使此应用程序以root用户身份运行,它也会出现非法指令错误。此指令在裸机应用程序上执行时工作正常

虽然可以创建一个在内核空间执行这些指令的驱动程序,但当答案返回到线程时,它可能已经移动到了另一个内核


从Linux用户级进程中,是否有任何方法可以获取当前线程正在运行的内核的id?

将满足或足够?

另一种方法是使用WHOAMI寄存器。WHOAMI寄存器返回读取它的内核的CPU ID。

如果我的理解是正确的,pthread\u getaffinity\u np将返回可调度线程运行的内核的位图。我想知道它运行在哪个内核上。我想你可以在启动线程之前设置亲和性。sched_getcpu可能更接近您真正想要的。我试图弄清楚的基本问题是,为什么应用程序仅以12%的CPU运行(正如top所报告的)。我安装了LTTng——对于42个线程中的41个,它报告CPUID是相同的(不同的运行,但看起来41个线程都集中在一个核心上)。然而,lttv中的flow control viewer显示8个线程都处于并发运行模式,这正是我希望发生的事情。我希望linux能够找出线程应该去哪里,而不是手动去做。首先,我想知道(确切地说)是否所有的东西都在一个核心上,或者它们是否正确地分布在各个核心上!!sched_getcpu正是我想要的。谢谢