![](/img/trans.png)
[英]C++ unix 32bit to Red Hat Linux running on an x86_64 chip (64-bit server)
[英]Start x86_64 code on x86 (32bit) Linux, running on x86_64 CPU
?是否可以在 i686 Linux(x86,32 位)上启动 x86_64 代码? 我的 CPU 是现代 Core 2,它本身可以运行 x86_64 64 位代码,但操作系统是 32 位的。
开始的代码是纯数学的,几乎不需要与操作系统交互。
我想测量,与 32 位模式相比,我的程序在 64 位模式下的速度有多快。 该程序旨在解决巨大的组合问题,全尺寸运行数十小时。
我可以使用 qemu 启动 64 位代码,但它不是本机执行,并且 qemu 中的速度与实际 cpu 速度无关。
如果没有某种形式的仿真,您将无法在 32 位 kernel 上运行 x86_64 程序。 (相反的方法也可以,但没有仿真。)
为了能够在 x86_64 上运行 64 位代码,您必须进入“长模式”,这需要设置适当的页表(除其他外)。 32 位 kernel 不会完成任何 64 位页表或映射。 所以用户空间代码不能进入64位模式。 一些 kernel 帮助可能是可能的,但是 32 位 kernel 根本没有为这种事情做好准备。
而且由于您可以使用 64 位 kernel 很好地运行 32 位代码,因此现在没有真正的理由不使用 64 位 kernel,特别是如果您有一些可以从 64 位模式中受益的代码(尤其是更多寄存器)。
为什么不直接从 64 位 live-cd 启动? 或者在单独的磁盘或分区上安装 64 位发行版?
使用vmware; 如果 CPU 支持,它可以在 32 位主机操作系统上运行 64 位 VM 正常工作。
x86/x86_64 有一个周期精确的模拟器。 默认情况下,它将模拟 AMD 的 K8
PTLsim 是 state 的艺术周期精确微处理器模拟器和虚拟机,适用于 x86 和 x86-64 指令集。 PTLsim 模拟一个完整的无序处理器内核,具有广泛的 memory 和带重放的分支推测、具有各种问题队列设计的高度可配置的集群微架构、完整的缓存层次结构和 memory 子系统和支持硬件。
不幸的是,它无法在 32 位 x86 上运行 x86_64 代码(引用自常见问题解答)
当然,32位版本的PTLsim会缺少x86-64支持
但是速度应该与实际运行相关,并且有很多信息可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.