我有两个问题: 1. 一台机器可以有两个或多个不同型号的CPU吗? 2. 如果我调用CPUID指令,不同的CPU执行时结果会有什么不同呢?(如果问题1的答案是对的,这是显而易见的)。如果确实有区别,如何通过CPUID指令获取所有CPU的信息。
是的,也不是。有许多系统具有多个处理器,且存在巨大的区别。Gameboy Advance既有基于ARM又有基于Z80的Gameboy(不能同时使用两者),但NDS具有ARM9和ARM7(可以/正在同时使用)。你提到的x86系统我认为是在谈论桌面电脑,大多数桌面电脑只使用了一个x86。你的鼠标、键盘等外设可能有8051或其他各种微控制器,但你不用担心,因为它们只是USB HID设备,光驱或硬盘。你真正无法接触到处理器,所以它的显示并不重要。笔记本电脑、高端服务器系统和很快可能的台式机都有第二个处理器或计算机,对于笔记本电脑而言,这可能是ARM,功耗显著下降,因此x86可以在待机模式下关闭,而ARM则保持运行状态,唤醒速度非常快。在服务器上,另一个系统作为强大的看门狗,监视服务器,并提供一些远程重置和其他功能。同样,您无法接触到此处理器,因此如果您无法在CPUID中找到它,则无关紧要。还有一个是您的视频卡,有数百至数千个GPU。您可以通过程序访问这些GPU,就像使用OMAP DSP一样,但是您不会进行通用处理,因此CPUID不需要提供该信息。因此,是的和不是。您的计算机系统作为整体,包括外围设备,具有许多不同的处理器,但通常单个或多核心的通用处理都在同一芯片内部,因此CPUID只需要提供该核心/系列。
为此,您需要区分“插座”和“核心”,因为术语“处理器”是模糊的。CPUID提供有关当前插座的信息,这意味着包含CPUID操作码的线程所在的内核中的插座正在执行(当前线程)。不同的插座可以包含略有不同的硬件,只要它们兼容即可,因此:要获取有关其他插座的信息,必须确保您的进程在相关的插座上运行:您可以命令您的操作系统在某个插座上运行线程,但这是特定于操作系统的。搜索引擎:在操作系统中为线程设置处理器亲和力。CPUID将告诉您有关当前插座的所有信息,包括“逻辑处理器”的数量:如果您的核心没有超线程,则逻辑处理器计数等于核心数;如果它们是超线程,则逻辑处理器计数将加倍。
我假设你问题中提到的cpuid代表x86/x64环境。一个多插槽主板(实际上是BIOS)通常需要所有安装的处理器报告相同的cpuid信息,即完全相同。我猜可能有架构上相等但频率不同的处理器,但是主板制造商必须列出哪些组合适用,哪些不适用,并回答无休止的电子邮件,解释为什么这个或那个被认为是兼容的组合不起作用。