多核汇编语言是什么样子的?

309

从前,在写x86汇编语言时,例如,你需要指令说明“将EDX寄存器加载为值5”,“增加EDX”寄存器等。

对于现代拥有4个核心(甚至更多)的CPU,在机器代码级别上是否看起来就像有4个单独的CPU(即是否只有4个不同的“EDX”寄存器)?如果是这样,当你说“增加EDX寄存器”时,是什么决定了哪个CPU的EDX寄存器被增加?在x86汇编中现在是否有“CPU上下文”或“线程”概念?

多核心之间的通信/同步是如何工作的?

如果您要编写操作系统,硬件公开了哪种机制可以允许您在不同的核心上调度执行?这是一些特殊的特权指令吗?

如果您要为多核心CPU编写优化编译器/字节码VM,那么您需要特别了解,比如x86,以使其生成在所有核心上高效运行的代码?

x86机器代码已经做出哪些改变以支持多核功能?


2
这里有一个类似的问题(虽然不完全相同): https://dev59.com/53RB5IYBdhLWcg3wHkPi - Nathan Fellman
11个回答

0
每个支持多处理器的架构相比之前的单处理器变体都添加了用于在核心之间进行同步的指令。此外,还有用于处理缓存一致性、刷新缓冲区和类似低级操作的指令,这些是操作系统必须处理的。在像IBM POWER6、IBM Cell、Sun Niagara和Intel“超线程”这样的同时多线程架构中,您还会看到用于优先处理线程的新指令(例如设置优先级和在没有任务时显式地让出处理器)。
但基本的单线程语义是相同的,只是添加了额外的功能来处理与其他核心的同步和通信。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接