Start x86_64 code on x86 (32bit) Linux, running on x86_64 CPU

穿精又带淫゛_ 提交于 2019-12-01 09:41:54

问题


?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.


回答1:


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?




回答2:


Use vmware; it will work just fine running a 64-bit VM on a 32-bit host OS provided the CPU supports it.




回答3:


There is a cycle-accurate simulator for x86/x86_64. By default it will emulate AMD's K8

PTLsim is a state of the art cycle accurate microprocessor simulator and virtual machine for the x86 and x86-64 instruction sets. PTLsim models a full out of order processor core, featuring extensive memory and branch speculation with replay, a highly configurable clustered microarchitecture with various issue queue designs, a full cache hierarchy and memory subsystem and supporting hardware.

Unfortunately it can't run an x86_64 code on 32-bit x86 (cite from FAQ)

Of course, the 32-bit version of PTLsim will lack x86-64 support

But the speed should correlate with real run and a lot of information is available.



来源:https://stackoverflow.com/questions/6214204/start-x86-64-code-on-x86-32bit-linux-running-on-x86-64-cpu

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!