PC 模拟器会模拟 CPU 个错误吗?
Do PC emulators emulate CPU bugs?
一些 CPU 存在架构级别的错误(例如 these),并且可能为这些 CPU 开发的某些程序也存在错误,这些错误由CPU 自己的。如果是这样,这样的程序将无法在 'perfect' 模拟器上运行。 PC 模拟器是否包含这些错误?例如,众所周知,Bochs 非常准确,它是否像真正的 CPU 那样处理它们 'properly'?
P.S。已经有两个缺点。怎么了?
存在这样的仿真器,cpu 设计过程需要极其精确的仿真器和精确的微体系结构模型。 CPU 设计人员需要他们进行调试或估计未来芯片的理论性能,他们的经理也可以在芯片准备就绪之前通过展示一些预期的功能来安抚投资者。此类模拟器是严格保密的。
CPU 设计闭包中的 RTL 冻结也产生了很多错误,或错误链。为了简化未来的芯片启动,固件开发人员可以支持特殊工具来模拟预期 cpu 的功能行为,并实现所有已知的勘误表。但它们也是专有的。
但实际上,有必要了解 "emulator" 和 "accurate" 在这种情况下的含义。
Bochs 作为 QEMU,是一个功能性 ISA 模型,它们的目的是为目标 ISA 的 运行 二进制文件提供一些可行的架构配置文件,仿真速度是首要目标:没有微架构建模:没有管道,没有缓存模型,没有性能监视器,等等。
要了解 BOCHS 的准确性,请查看他们对 CPUID 性能监视器和缓存拓扑叶的实现:
cpu/cpuid.cc
当您在 BOCHS 中指定一些 cpu 时,例如 skylake,bochs 除了属于 cpu 的 CPUID 值外一无所知,换句话说,特征集:AVX2, FMA、XSAVE 等
另外BOCHS没有实现精确的model/family cpuid值:寻找cpuid版本信息叶的实现(grep for get_cpu_version_information函数): 它是硬编码值。
所以 Bochs 没有 cpu 勘误表。
一些 CPU 存在架构级别的错误(例如 these),并且可能为这些 CPU 开发的某些程序也存在错误,这些错误由CPU 自己的。如果是这样,这样的程序将无法在 'perfect' 模拟器上运行。 PC 模拟器是否包含这些错误?例如,众所周知,Bochs 非常准确,它是否像真正的 CPU 那样处理它们 'properly'?
P.S。已经有两个缺点。怎么了?
存在这样的仿真器,cpu 设计过程需要极其精确的仿真器和精确的微体系结构模型。 CPU 设计人员需要他们进行调试或估计未来芯片的理论性能,他们的经理也可以在芯片准备就绪之前通过展示一些预期的功能来安抚投资者。此类模拟器是严格保密的。
CPU 设计闭包中的 RTL 冻结也产生了很多错误,或错误链。为了简化未来的芯片启动,固件开发人员可以支持特殊工具来模拟预期 cpu 的功能行为,并实现所有已知的勘误表。但它们也是专有的。
但实际上,有必要了解 "emulator" 和 "accurate" 在这种情况下的含义。 Bochs 作为 QEMU,是一个功能性 ISA 模型,它们的目的是为目标 ISA 的 运行 二进制文件提供一些可行的架构配置文件,仿真速度是首要目标:没有微架构建模:没有管道,没有缓存模型,没有性能监视器,等等。
要了解 BOCHS 的准确性,请查看他们对 CPUID 性能监视器和缓存拓扑叶的实现: cpu/cpuid.cc
当您在 BOCHS 中指定一些 cpu 时,例如 skylake,bochs 除了属于 cpu 的 CPUID 值外一无所知,换句话说,特征集:AVX2, FMA、XSAVE 等
另外BOCHS没有实现精确的model/family cpuid值:寻找cpuid版本信息叶的实现(grep for get_cpu_version_information函数): 它是硬编码值。
所以 Bochs 没有 cpu 勘误表。