【发布时间】:2011-07-17 18:49:46
【问题描述】:
我有两个问题: 1. 一台机器可以有两个或更多型号不同的CPU吗? 2. 如果我调用CPUID指令,不同的CPU执行会不会有不同的结果? (如果问题 1 的答案是正确的,这是显而易见的)。如果是这样,如何通过 CPUID 指令获取所有 CPU 的信息。
【问题讨论】:
-
+1 补偿被否决的投票。谁对此投了反对票:愿意解释吗?
我有两个问题: 1. 一台机器可以有两个或更多型号不同的CPU吗? 2. 如果我调用CPUID指令,不同的CPU执行会不会有不同的结果? (如果问题 1 的答案是正确的,这是显而易见的)。如果是这样,如何通过 CPUID 指令获取所有 CPU 的信息。
【问题讨论】:
是和不是。有许多系统具有多个处理器,而且差别很大。 gameboy Advance,同时拥有 arm 和 z80 的 gameboy(不能同时使用)。但是nds有一个arm9和arm7(可以/确实同时使用两者)。你会在 beagleboard 中找到的 omap 有一个 arm 和一个 TI dsp(可以同时使用两者)。我假设您在谈论 x86 系统。大多数台式机只是 x86。您的鼠标和键盘之类的东西可能有 8051 或其他各种类型的微控制器。但你不在乎,因为这些只是 USB HID 设备或 cdrom 驱动器或硬盘。您无法真正使用处理器,因此它的出现并不重要。笔记本电脑和高端服务器系统以及可能的台式机很快就会在那里配备第二个处理器或计算机,对于笔记本电脑来说,它可能是一个手臂,功率显着降低,因此 x86 可以在待机模式下关闭,手臂保持活力,你把它唤醒它来得非常快。在服务器上,另一个系统作为防弹看门狗,密切关注服务器,提供监控和一些远程重置和其他功能。同样,您无法使用此处理器,因此如果您无法找到 CPUID 交易也没关系。另一个是你的显卡,成百上千的gpu。您可以通过您的程序访问那些,就像使用 omap dsp 一样,但您不进行通用处理,因此 CPUID 也不需要提供该信息。
所以是和不是。您的计算机系统作为一个整体,包括外围设备,具有许多不同的处理器,但通用处理通常是同一系列的单核或多核,通常位于同一芯片内。所以 CPUID 只需要给你那个核心/系列。
【讨论】:
为此,您必须区分 “sockets” 和 “cores”,因为术语 “processor” 含糊不清。
CPUID 为您提供有关 当前套接字 的信息,即当前线程正在执行的内核所在的套接字(包含 CPUID 操作码的线程)。
只要兼容,不同的套接字可以包含稍微不同的硬件,所以:
要获取有关不同套接字的信息,您必须确保您的进程在相关套接字上执行:您可以命令操作系统在某个套接字上运行线程,但这是特定于操作系统的。搜索引擎:为操作系统中的线程设置处理器亲和性。
CPUID 将告诉您关于当前套接字的所有信息,包括“逻辑处理器”的数量:逻辑处理器数量等于如果您的核心不是超线程,则核心,如果它们是超线程,那么逻辑处理器计数将加倍。
【讨论】:
我假设您的问题中存在 cpuid 意味着 x86/x64 上下文。
多插槽主板(实际上是 BIOS)通常要求所有已安装的处理器报告相同的 cpuid 信息,即完全相同。我想有可能拥有在架构上相同但频率不同的处理器,但是 mb 制造商必须列出哪些组合有效,哪些无效,并回答无数关于为什么这个或那个所谓的兼容组合不起作用的电子邮件.
【讨论】: