Вышла новая версия эмулятора Qemu процессора Эльбрус

Вышла новая версия эмулятора Qemu процессора Эльбрус

Энтузиасты с телеграмм канала OpenE2K сообщили о выпуске новой версии эмулятора Qemu процессорной архитектуры Эльбрус-2000 (e2k).

Основные нововведения версии qemu-e2k-v8.1.3:

  • Переход с 7-й версии QEMU на 8-ю версию.

  • Добавлено много проверок, которые до этого пропускались из-за чего код мог работать в эмуляторе, но падал бы на реальной машине.

  • Выполнен переход на Int128 для передачи параметров в «функции помощники». Существенно упростило сопровождение связанного кода.

  • Поддержка диагностических тегов в предикатных регистрах. Может случайно «ронять» программу если включить теги, т.к. не все варианты взаимодействия реализованы/известны. Будет улучшаться со временем по мере выявления таких мест.

  • Эмулятор начал «отравлять» результаты с включенными тегами.

  • Повышена скорость работы. Производительность выросла более чем на 40%. С включенными тегами на 10-15% быстрее.

  • e2k-linux-gdb пока работает нестабильно. Но планируется исправить в будущем.

  • rustc с тегами ещё не работает.

  • Системная эмуляция всё ещё не реализована.

Большая часть тестов с прошлой ветки проходит. Остальные тесты пока пропускаются:

Ok:                 91 
Expected Fail:      74 
Fail:               0 
Unexpected Pass:    0 
Skipped:            17 
Timeout:            0
Однопоточный тест производительности Coremark на предыдущей версии Qemu-e2k
qemu-e2k-old ./coremark_static_O3_ffast 
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 16789
Total time (secs): 16.789000
Iterations/Sec   : 178.688427
Iterations       : 3000
Compiler version : GCC9.3
Compiler flags   : O3
Memory location  : Please put data memory location here
                        (e.g. code in flash, data on heap etc)
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0xcc42
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 178.688427 / GCC9.3 O3 / Heap
Однопоточный тест производительности Coremark на текущей версии Qemu-e2k
qemu-e2k-new ./coremark_static_O3_ffast 
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 15725
Total time (secs): 15.725000
Iterations/Sec   : 254.372019
Iterations       : 4000
Compiler version : GCC9.3
Compiler flags   : O3
Memory location  : Please put data memory location here
                        (e.g. code in flash, data on heap etc)
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x65c5
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 254.372019 / GCC9.3 O3 / Heap
Однопоточный тест производительности Coremark на реальной машине с процессором Эльбрус-8С 1200 МГц
./coremark_static_O3_ffast
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 17575
Total time (secs): 17.575000
Iterations/Sec   : 3413.940256
Iterations       : 60000
Compiler version : GCC9.3
Compiler flags   : O3
Memory location  : Please put data memory location here
      (e.g. code in flash, data on heap etc)
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0xbd59
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 3413.940256 / GCC9.3 O3 / Heap
Инструкция по сборке Qemu-e2k
$ git clone --depth=1 -b e2k https://git.mentality.rip/OpenE2K/qemu-e2k.git
$ cd qemu-e2k
$ mkdir build
$ cd build
$ ../configure --target-list=e2k-linux-user --static --disable-capstone --disable-werror
$ nice ninja
$ sudo cp qemu-e2k /usr/local/bin

$ cat hello.c
#include <stdio.h>
int main(int argc, char *argv[]) {
        const char *name = argc > 1 ? argv[1] : "world";
        printf("Hello, %s!\n", name);
        return 0;
}
$ lcc -O2 hello.c -o hello-e2k
$ qemu-e2k hello-e2k $USER
Hello, denis!

# setup binfmt
$ cat /etc/binfmt.d/qemu-e2k.conf 
:qemu-e2k:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xaf\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k:OC
:qemu-e2k-old:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x31\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k:OC
:qemu-e2k32:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xaf\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k32:OC
:qemu-e2k32-old:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x31\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k32:OC
$ ./hello-e2k $USER
Hello, denis!

QEMU - свободная программа с открытым исходным кодом для эмуляции аппаратного обеспечения различных платформ.

Включает в себя эмуляцию процессоров Intel x86 и устройств ввода-вывода. Может эмулировать 80386, 80486, Pentium, Pentium Pro, AMD64 и другие x86-совместимые процессоры; ARM, MIPS, RISC-V, PowerPC, SPARC, SPARC64, E2K.

Работает на Syllable, FreeBSD, OpenBSD, FreeDOS, Linux, Windows 9x, Windows 2000, Mac OS X, QNX, Android и др.

Автор программы — французский программист Фабрис Беллар, создатель популярной библиотеки libavcodec, которую используют такие известные программы, как FFmpeg, ffdshow, MPlayer, VideoLAN и др.

Помимо эмуляции, поддерживает технологии аппаратной виртуализации (Intel VT и AMD SVM) на x86-совместимых процессорах Intel и AMD. Первоначально разработка велась в рамках проекта Linux KVM, в котором, помимо собственно KVM (поддержки технологий аппаратной виртуализации x86-совместимых процессоров на уровне ядра Linux), разрабатывались патчи для QEMU, позволяющие QEMU использовать функциональность KVM. Впоследствии патчи были объединены с основной веткой программы.

Комментариев еще нетКомментарии могут оставлять только авторизованные пользователи
Онлайн компилятор e2k Онлайн компилятор e2k

Вы можете изучать предупреждения, ошибки и ассемблерный код, выдаваемые компилятором, а также просматривать результат выполнения скомпилированной программы для архитектуры Эльбрус(E2K). Поддерживаются языки, C++, Fortran, Rust.

Доступ к серверам Эльбрус Доступ к серверам Эльбрус

К серверам на процессорах архитектуры Эльбрус открылся бесплатный удаленный доступ, которым вы можете воспользоваться и возможно портировать что то полезное.

Руководство по эффективному программированию на e2k

Данное руководство содержит основные материалы для обучения эффективному программированию на платформе Эльбрус и применимо на любом варианте Linux-подобной операционной системы.

Телеграмм канал Эльбрус

Чат про администрирование и создание программ на платформе Эльбрус(E2K).