assembly - 在多核 x86 处理器中设置关联

标签 assembly multicore smp affinity

(我问是因为在认真的 SMP 和多核之前我研究了操作系统。我想对代码的执行方式有一些了解。)

如果我有一个直接启动到我的程序的多核 x86 CPU。有人可以推荐一个网站来描述我必须使用哪些汇编程序命令来控制亲和性吗?

最佳答案

Affinity 不是由 CPU 状态决定的,因此不能被程序集(单独)修改。您需要操作系统的参与。每个操作系统都会有一个特定的调用来执行此操作。

操作系统将做什么:操作系统将有一个调度程序,它实际上是一个程序,用于确定哪个进程何时在哪个处理器上运行。通过将亲和性设置为用户,您可以配置此调度程序。

如果您没有操作系统(我认为这个问题似乎暗示了这一点),那么您将自己编写调度程序,并且您将拥有对配置的控制权,并且您可能会从一个全局运行队列开始,并且对于每个处理器(核心),观察这个运行队列,并检索要从中运行的进程。

那么这是如何工作的呢?在引导过程中,只有一个 CPU 在运行。如果您作为操作系统已准备好,您可以“启动”其他 CPU,它们开始执行您的代码,并且可能会运行某种调度程序。

有关示例实现,请参阅 Linux 2.6.29 arch/x86/kernel/smpboot.c 函数 do_boot_cpu(),它使用 APIC 以多种方式使 CPU 联机。

关于assembly - 在多核 x86 处理器中设置关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/994780/

相关文章:

assembly - 如何使用 APIC 创建 IPI 以唤醒 x86 程序集中的 SMP 的 AP?

linux - SMP 中的 CPU 停顿

c++ - 链接到内核

multithreading - 添加额外的内核或 CPU 根本不会提高性能的点在哪里?

multithreading - 使用 openMP 进行多核处理与多线程

java - 为什么在大约 10 个内核后添加内核会使我的 Java 程序变慢?

assembly - nasm 中源寄存器周围带或不带 [] 括号的 mov 指令的含义

assembly - 汇编程序给出错误 :/a.:无法执行二进制文件:Exec 格式错误

linux - FASM SHR 奇怪的行为

javascript - 使用 Javascript 从 Strobe Media Playback 获取统计信息