某些CPU在架构级别存在错误(例如these),并且为这些CPU开发的某些程序也可能存在由CPU自身补偿的错误。如果是这样,这样的程序将无法在“完美”模拟器上运行。 PC模拟器是否包含这些错误?例如,众所周知,Bochs非常准确,它是否正确处理它们,就像真正的CPU一样?
P.S。已经有两个缺点。怎么了?
答案 0 :(得分:2)
存在这样的仿真器,cpu设计过程需要极其精确的仿真器,具有精确的微体系结构模型。 CPU设计人员需要它们来调试目的或估计未来芯片的理论性能,他们的管理人员可以在芯片准备好之前通过显示一些预期的功能来平息投资者。这些模拟器是严格保密的。
在CPU设计关闭中RTL冻结也会产生很多错误,或者是erratas链。为了简化未来的芯片开发,固件开发人员可以支持特殊工具来模拟预期cpu的功能行为,并实施所有已知的erratas。但它们也是专有的。
但实际上,在这种情况下,有必要理解“模拟器”和“准确”这个词的含义。 Bochs作为QEMU,是一个功能强大的ISA模型,它们的目的是提供一些可行的架构配置文件来运行目标ISA的二进制文件,仿真速度是第一个目标:没有建模的微架构:没有管道,没有缓存模型,没有性能监视器,等等。
要了解BOCHS的准确性,请查看它们的CPUID性能监视器和缓存拓扑叶子的实现: cpu/cpuid.cc
当你在BOCHS,例如skylake指定一些cpu时,bochs除了属于该cpu的CPUID值之外什么都不知道,其他的特征集:AVX2,FMA,XSAVE等。
BOCHS也没有实现精确的模型/族cpuid值:查找cpuid版本信息叶的实现(get_cpu_version_information函数的grep):它是硬编码值。
所以Bochs没有cpu erratas。