【发布时间】:2013-03-16 14:17:16
【问题描述】:
这很难说/问,所以请多多包涵:
当我们看到汇编的输出时,这就是将在 CPU 的核心上执行的内容。但是,如果 CPU 有多个内核,那么所有程序集是否都在同一个内核上执行?来自同一程序的程序集何时开始在不同的内核上执行?
所以如果我有(汇编伪):
ADD x, y, z
SUB p, x, q
我如何知道 ADD 和 SUB 是否会在同一个内核上执行?这与亲和力有关吗?我认为亲和力只是将进程固定到 CPU,而不是内核?
我问这个是因为我想尝试了解您是否可以合理地预测连续的汇编指令是否在同一个内核上执行,以及我是否可以控制它们只在同一个内核上执行。我试图了解如何决定将执行相同的程序代码从一个内核更改为不同的内核?
如果程序集可以将执行(即使使用亲和性)从 CPUA Core1 更改为 Core2,QPI 链接速度是否会在此处生效,以及缓存是否在不同 CPU 内核之间共享?
【问题讨论】:
-
我认为您的出发点是错误的。内核对于操作系统来说是一个独立的 CPU 来实现所有效果。例如。如果您使用的是四核,那么对于操作系统来说,没有 1 个具有 4 个内核的 CPU,而实际上是 4 个 CPU。
-
你到底为什么要问?
-
“如何决定将执行相同的程序代码从一个内核更改为不同的内核?” 这不是决定——决定是何时开始并停止进程的执行。它在启动时得到一个核心,这可能与它上次得到的核心不同。 en.wikipedia.org/wiki/Process_scheduler
标签: linux windows assembly x86 cpu