在x86(32位)Linux上启动x86_64代码,在x86_64 CPU上运行
是否可以在 i686 Linux(x86,32 位)上启动 x86_64 代码?我的 CPU 是现代 Core 2,它本身可以运行 x86_64 64 位代码,但操作系统是 32 位。
启动的代码是纯数学的,几乎不需要与操作系统交互。
我想测量一下,与 32 位模式相比,我的程序在 64 位模式下的速度有多快。该程序是为了解决巨大的组合问题,完整的运行时间是几十个小时。
我可以使用 qemu 启动 64 位代码,但它不是本机执行,并且 qemu 中的速度与实际 CPU 速度无关。
?Is it possible to start an x86_64 code on i686 Linux (x86, 32-bit)? My CPU is modern Core 2 and it can run x86_64 64-bit code itself, but the OS is 32bit.
The code to start is pure mathematic, and it need almost no interaction with OS.
I want to measure, how fast will be my program in 64bit mode comparing with 32-bit mode. The program is to solve huge combinatoric problem and full size run is dozens of hours.
I can start 64bit code with qemu, but it will be not native execution and speed in qemu will be not related to real cpu speed.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果没有某种形式的模拟,您将无法在 32 位内核上运行 x86_64 程序。 (不过,另一种方法也可以,无需模拟。)
为了能够在 x86_64 上运行 64 位代码,您必须进入“长模式”,这需要设置适当的页表(除其他外)。 32 位内核不会执行任何 64 位页表或映射。所以用户空间代码无法进入64位模式。在一些内核帮助下也许可以实现这一点,但 32 位内核根本没有为这种事情做好准备。
由于您可以在 64 位内核上运行 32 位代码,因此现在没有真正的理由不使用 64 位内核,尤其如果您有一些可以从 64 位模式受益的代码(更多寄存器)尤其)。
为什么不直接从 64 位 live-cd 启动呢?或者在单独的磁盘或分区上安装 64 位发行版?
You won't be able to run x86_64 programs on a 32bit kernel without some form of emulation. (The other way around works just fine though, with no emulation.)
To be able to run 64bit code on x86_64, you have to enter "long mode" which requires the appropriate page tables to be set up (among other things). A 32bit kernel won't have done any 64bit page tables or mappings. So userspace code can't enter 64bit mode. It might be possible with some kernel help, but a 32bit kernel is simply not prepared for that kind of thing.
And since you can run 32bit code just fine with a 64bit kernel, there is no real reason not to use a 64bit kernel these days, especially if you have some code that could benefit from 64bit mode (more registers in particular).
Why don't you just boot from a 64bit live-cd? Or install a 64bit distribution on a separate disk or partition?
使用VMware;只要 CPU 支持,它就可以在 32 位主机操作系统上运行 64 位虚拟机。
Use vmware; it will work just fine running a 64-bit VM on a 32-bit host OS provided the CPU supports it.
有一个针对 x86/x86_64 的周期精确模拟器。默认情况下它将模拟 AMD 的 K8
不幸的是,它无法在 32 位 x86 上运行 x86_64 代码(引自常见问题解答)
,但速度应该与实际运行相关,并且有很多信息可用。
There is a cycle-accurate simulator for x86/x86_64. By default it will emulate AMD's K8
Unfortunately it can't run an x86_64 code on 32-bit x86 (cite from FAQ)
But the speed should correlate with real run and a lot of information is available.