Запуск программ Java в gem5 (или на любом языке кроме C)

Это может быть глупый вопрос, но я недавно узнал о gem5, и я могу моделировать свои программы на C, используя это программное обеспечение, в эмуляции системных вызовов и в полном моделировании системы. Однако всякий раз, когда я пытаюсь смоделировать в нем любую программу Java, я получаю эту ошибку (эмуляция системных вызовов):

gem5 Simulator System.  http://gem5.org
gem5 is copyrighted software; use the --copyright option for details.

gem5 compiled Aug 26 2019 12:58:15
gem5 started Sep  5 2019 14:56:02
gem5 executing on (...), pid 6115
command line: build/X86/gem5.opt configs/learning_gem5/part1/test.py

Global frequency set at 1000000000000 ticks per second
warn: DRAM device capacity (8192 Mbytes) does not match the address range assigned (512 Mbytes)
fatal: fatal condition !obj_file occurred: Cannot load object file /home/taoliveira/Downloads/Gem5/gem5/configs/learning_gem5/part1/../../../my-progs/MergeSort/bin/x86/linux/MergeSort.
Memory Usage: 661468 KBytes

В этом случае я попробовал простую программу сортировки слиянием на Java. Обычно он компилируется и выполняется вне симулятора gem5. В файле .py, где у меня есть моя машина (это simple.py из руководств по gem5), двоичный файл - это путь, который ведет к файлу .jar. Я слышал, что .jar не будет работать должным образом в gem5, но я не знаю, что использовать вместо этого. Итак, что мне нужно сделать, чтобы запускать программы, отличные от C, в симуляторе gem5? В этом случае, что мне нужно сделать, чтобы запустить Java-программу?

Я везде искал ответ, но не мог его найти. Кто-нибудь может мне помочь? Заранее спасибо.

Я использую Ubuntu 18.04 и Java 1.8.0_201.

Изменить: я попытался преобразовать свой Java-код в собственный машинный код (x86) и сделал это с помощью GraalVM, и я передаю его в runscript, так же, как и с программами C. Однако при загрузке скрипта он показывает мне новую ошибку:

loading script...
Fatal error: Failed to create a new Isolate. (code 6)

Никогда не видел этого раньше и ничего не нашел об этом при поиске в Google.


person Yaksa    schedule 15.10.2019    source источник


Ответы (2)


Вы выполняете программы Java точно так же, как и программы C:

  • Gem5 не понимает C, поэтому, если вы хотите выполнить программу на C, вам сначала нужно скомпилировать ее на язык, который понимает Gem5, или вам нужно интерпретировать ее в интерпретаторе, написанном на языке, который понимает Gem5.
  • Gem5 не понимает Java, поэтому, если вы хотите выполнить программу на Java, вам сначала нужно скомпилировать ее на язык, который понимает Gem5, или вам нужно интерпретировать ее в интерпретаторе, написанном на языке, который понимает Gem5.

Вот несколько возможностей, о которых я могу подумать:

  • использовать компилятор машинного кода для компиляции Java в собственный машинный код Alpha, ARM, Sparc или x86,
  • использовать интерпретатор Java, написанный на (или скомпилированный в) машинный код Alpha, ARM, Sparc или x86 для интерпретации этого кода Java,
  • используйте компилятор JVM для компиляции Java в байт-код JVM, затем используйте JVM, написанную (или скомпилированную) на Alpha, ARM, Sparc или собственный машинный код x86 для интерпретации этого байт-кода JVM, или
  • используйте компилятор JVM для компиляции Java в байт-код JVM, затем используйте компилятор собственного кода для компиляции байт-кода JVM в собственный машинный код Alpha, ARM, Sparc или x86.

Конечно, можно связать и / или смешать любое количество из вышеперечисленных.

person Jörg W Mittag    schedule 15.10.2019
comment
Извините за мое незнание, но как я могу скомпилировать java-программу в машинный код x86? У меня вроде была эта идея до этой темы, но я не мог найти никаких способов ее реализовать. Я читал, что gcj может это сделать, но, поскольку он устарел, я не могу его установить. Вы знаете CodeBlocks? Всякий раз, когда я компилирую в него свои программы на C, он генерирует двоичный файл, который просто работает. Есть ли другой подобный инструмент для Java-программ? - person Yaksa; 16.10.2019

Аналогичное сообщение: Возможно ли запустить java -jar на симуляторе gem5 с ISA x86?

Полный образ Ubuntu почти наверняка будет работать (предварительно установите Java с пользовательским режимом QEMU перед запуском gem5).

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

build/X86/gem5.opt \
  configs/example/se.py \
  --cmd /usr/bin/java \
  --options HelloWorld \
  --param 'system.cpu[0].workload[:].release = "5.2.1"' \

где /usr/bin/java - исполняемый файл ELF интерпретатора Java, как и ваша программа на C, а HelloWorld.class - это скомпилированный класс Java, переданный в качестве аргумента в java.

Однако я попробовал это на Ubuntu 18.04 и gem5 61005bb9ef455b2ac851f8a992f2cec5686e520f, и это не удалось:

/ usr / bin / java: ошибка при загрузке общих библиотек: libjli.so: невозможно открыть файл общих объектов: нет такого файла или каталога

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

Аналогично Python: Можно ли запустить Python код в режиме эмуляции системных вызовов Gem5?

person Ciro Santilli    schedule 15.10.2019
comment
Я не знаком с QEMU, но в моем случае мне нужно моделировать программы, используя только gem5 и ничего больше. Кроме того, как я могу получить исполняемый файл ELF для Java-программ? В моих программах на C он просто автоматически генерировался CodeBlocks. - person Yaksa; 16.10.2019
comment
@Thiago QEMU - это просто изменение полного образа системного диска. Пожалуйста, погуглите, как компилировать и запускать программы C и Java из командной строки. Изучение того, как делать все с помощью интерфейса командной строки, является фундаментальным в дополнение к методу IDE :-) - person Ciro Santilli; 16.10.2019
comment
Привет, Чиро. Я отредактировал сообщение тем, что попробовал сегодня. Не могли бы вы взглянуть, пожалуйста? Вы знаете, что это может быть? - person Yaksa; 30.10.2019
comment
@Thiago привет. Вы должны определить, исходит ли сообщение об ошибке из gem5 или в вашей программе, и покопаться еще немного, например хотя бы трассировку стека. Тем не менее, характеристики производительности, вероятно, будут сильно отличаться при использовании GraalVM от реальной реализации Java системы. Это работает на вашем хосте? - person Ciro Santilli; 30.10.2019
comment
Я протестировал исполняемый файл java после его преобразования с помощью native-image. Работает нормально. Показанная ошибка возникает в результате текущего моделирования в каталоге m5out в gem5, в файле system.pc.com_1.device. Я понятия не имею, что это такое, и не знаю, как вникнуть в подобное. - person Yaksa; 30.10.2019