Запустите код x86_64 на x86 (32-битной) Linux, работающей на процессоре x86_64 - PullRequest
1 голос
/ 02 июня 2011

? Можно ли запустить код x86_64 на i686 Linux (x86, 32-bit)? Мой процессор - современный Core 2, и он может выполнять 64-битный код x86_64, но ОС 32-битная.

Код для запуска чисто математический и почти не требует взаимодействия с ОС.

Я хочу измерить, насколько быстрой будет моя программа в 64-битном режиме по сравнению с 32-битным. Программа призвана решить огромную комбинаторную задачу, а полноразмерный прогон занимает десятки часов.

Я могу запустить 64-битный код с помощью qemu, но это будет не нативное выполнение, а скорость в qemu не будет связана с реальной скоростью процессора.

Ответы [ 3 ]

3 голосов
/ 02 июня 2011

Вы не сможете запускать программы x86_64 на 32-битном ядре без какой-либо эмуляции. (Другой способ работает нормально, без эмуляции.)

Чтобы запустить 64-битный код на x86_64, вы должны войти в «длинный режим», который требует настройки соответствующих таблиц страниц (среди прочего). 32-битное ядро ​​не будет выполнять никаких 64-битных таблиц страниц или отображений. Таким образом, код пользователя не может войти в 64-битный режим. Это может быть возможно с некоторой помощью ядра, но 32-битное ядро ​​просто не подготовлено для такого рода вещей.

И, поскольку вы можете нормально запускать 32-битный код с 64-битным ядром, нет никакой реальной причины не использовать 64-битное ядро ​​в наши дни, особенно , если у вас есть код, который может выиграть от 64-битного режима ( больше регистров в частности).

Почему бы вам просто не загрузиться с 64-битного live-cd? Или установить 64-битный дистрибутив на отдельный диск или раздел?

1 голос
/ 03 июня 2011

Использовать VMware; он будет отлично работать при работе 64-битной виртуальной машины на 32-битной хост-системе при условии, что процессор поддерживает ее.

0 голосов
/ 02 августа 2011

Для x86 / x86_64 существует симулятор с точностью до цикла. По умолчанию он будет эмулировать AMD K8

PTLsim - это современный точный микропроцессорный симулятор цикла и виртуальная машина для наборов команд x86 и x86-64. PTLsim моделирует процессорное ядро ​​с полным отсутствием порядка, предлагая обширную память и спекуляцию ветвления с воспроизведением, высоко настраиваемую кластерную микроархитектуру с различными проектами очередей выдачи, полную иерархию кэша и подсистему памяти и поддерживающее оборудование.

К сожалению, он не может запустить код x86_64 на 32-битном x86 (цитата из FAQ)

Конечно, 32-битной версии PTLsim будет не хватать поддержки x86-64

Но скорость должна коррелировать с реальным пробегом, и много информации доступно.

...