Тип работы:
Предмет:
Язык работы:


Реализация intrinsic-функций для процессорной архитектуры RISC-V в OpenJDK

Работа №151612

Тип работы

Бакалаврская работа

Предмет

информационные системы

Объем работы52
Год сдачи2024
Стоимость4750 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
26
Не подходит работа?

Узнай цену на написание


Введение 4
2. Постановка задачи 6
3. Обзор 7
3.1. Существующие intrinsic-функции 7
3.2. Криптографические алгоритмы в OpenJDK 8
3.3. Поддерживаемые в OpenJDK платформы 13
3.4. Расширения RISC-V 13
4. Алгоритм работы 15
4.1. Основной алгоритм 15
4.2. Апробация 16
4.3. Замеры производительности 16
5. Реализация 18
6. Замеры производительности 24
7. Результаты 29
Приложение 30
Список литературы 46

RISC-V — это открытая [17] процессорная архитектура, в основе которой лежит небольшой набор команд, с возможностью использования
различных расширений [48] для увеличения производительности.
Компания Syntacore занимается созданием и сопровождением процессорных ядер на микропроцессорной архитектуре RISC-V. В число её
работ входит также поддержка инструментов разработки для данной
архитектуры. Одним из таких инструментов является OpenJDK — один
из наиболее популярных [45] на 2023 год наборов утилит для разработки на языке Java. Приоритетное направление для работы — ускорение
методов, использующихся в работе с криптографией.
Одной из особенностей среды исполнения OpenJDK (виртуальной
машины «HotSpot») является концепция уровней компиляции [39]. Согласно ей, исполнение Java методов начинается в интерпретаторе Java
байт-кода сразу после загрузки пришедшего виртуальной машине класса, без дополнительных оптимизаций. При достаточно частом исполнении метода, он будет скомпилирован компилятором C1, с использованием некоторых оптимизаций, например, «constant folding» или «value
numbering» [16]. При последующем исполнении этого метода, он будет скомпилирован уже более мощным компилятором C2, который, например, способен более эффективно выделять регистры или проводить
«global code motion» [40]. Ещё одной из возможных оптимизаций является подмена сгенерированного по Java-байткоду метода на его вручную
написанную в нативных кодах специализацию [21], которая, как ожидается, работает более эффективно, чем порождённая компилятором
версия. Такой подход в OpenJDK называется «intrinsification» («интринсификация»), а сами функции, написанные в ассемблерных кодах
конкретной архитектуры — intrinsic-функциями.
Несмотря на то, что в OpenJDK существует порт для RISC-V, на
данный момент он не поддерживает все существующие криптографические intrinsic-функции: например, в некоторых из таких «ручных»
реализаций этих функций для оптимизаций могут применяться ин-
4струкции из расширений архитектуры, которые совсем недавно были
ратифицированы, и поддержка которых как в OpenJDK, так и в процессорах ещё не успела появиться1. Поэтому, для ускорения работы
HotSpot необходимо расширить текущую поддержку криптографических intrinsic-функций в OpenJDK для архитектуры RISC-V.


Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


[1] ARM. Armv8.x and Armv9.x extensions and features. —
URL: https://developer.arm.com/documentation/102378/
0201/Armv8-x-and-Armv9-x-extensions-and-features (дата обращения: 14.12.2023).
[2] Awati R., Bernstein C., Cobb M. Advanced Encryption Standard.— URL: https://www.techtarget.com/searchsecurity/definition/ Advanced-Encryption-Standard/ (дата обращения: 01.05.2024).
[3] Bernstain D. The Poly1305-AES Message-Authentication Code.— Springer, Berlin, Heidelberg, 2005. — URL: https://link.springer. com/chapter/10.1007/11502760_3 (дата обращения: 14.12.2023).
[4] Bochkarev Arseny. Adler32 RISC-V specific optimizations. —
URL: https://github.com/openjdk/jdk/pull/18382/commits/
3359ec2a82d5d1ac38f9ec142948d37a7cc53590 (дата обращения: 25.05.2024).
[5] Bochkarev Arseny. Adler32 general optimizations. — URL: https://github.com/openjdk/jdk/pull/18382/commits/ 8cef929325f4552b92d2eb6ec1f26698a97a59e8 (дата обращения: 25.05.2024).
[6] Bochkarev Arseny. CRC32 RISC-V specific optimizations. —
URL: https://github.com/openjdk/jdk/pull/17046/files#
diff-7a5c3ed05b6f3f06ed1c59f5fc2a14ec566a6a5bd1d09606115767daa9S (дата обращения: 25.05.2024).
[7] Bochkarev Arseny. CRC32 induction variable elimination. —
URL: https://github.com/openjdk/jdk/pull/17046/commits/
e0f97888fe9a4cf50bef190e4d7c30e6782347ac (дата обращения: 25.05.2024).
[8] Bochkarev Arseny. CRC32 loop unrolling. — URL: https://github.com/openjdk/jdk/pull/17046/commits/
42503b769d462c02b8893833b65397090291265c (дата обращения: 25.05.2024).
[9] Bochkarev Arseny. OpenJDK RISC-V crypto intrinsics branch. — URL: https://github.com/ArsenyBochkarev/jdk/tree/riscv_
crypto_intrinsics (дата обращения: 25.05.2024).
[10] Bochkarev Arseny. Poly1305 RISC-V specific optimizations.—
URL: https://github.com/openjdk/jdk/pull/16417/files#
diff-97f199af6d1c8c17b2fa4f50eb1bbc0081858cc59a899f32792a2d31f93 (дата обращения: 25.05.2024).
[11] Bochkarev Arseny. RISC-V boards used specs.— URL: https:// github.com/ArsenyBochkarev/OpenJDK-RISCV-Intrinsics/blob/ main/docs/benchmarks/micro/cpu/riscv/riscv_boards_specs.md (дата обращения: 25.05.2024).
[12] Bochkarev Arseny. OpenJDK intrinsics benchmarks.—
2023.— URL: https://github.com/ArsenyBochkarev/
OpenJDK-RISCV-Intrinsics/tree/main/benchmarks/ (дата
обращения: 14.12.2023).
[13] Bochkarev Arseny. Unimplemented Intrinsics Prior to Fall 2023.— 2023.— URL: https://github.com/ArsenyBochkarev/ OpenJDK-RISCV-Intrinsics/blob/main/docs/riscv_crypto_ intinsics_list.md (дата обращения: 14.12.2023).
[14] Castagnoli G., Brauer S., Herrmann M. Optimization of cyclic redundancy-check codes with 24 and 32 parity bits. — IEEE, 1993.— URL: https://ieeexplore.ieee.org/document/231911 (дата обращения: 14.12.2023).
[15] DFRobot. Stepping into RISC-V: A Detailed Look at Four Common RISC-V CPU Development Boards.— URL: https://www.dfrobot. com/blog-13481.html (дата обращения: 25.05.2024).
[16] Design of the Java HotSpotTM Client Compiler for Java 6 / T. Kotz- mann, C. Wimmer, H. Mossenbock et al.— 2008.— URL: https: //web.stanford.edu/class/cs343/resources/java-hotspot.pdf (дата обращения: 14.12.2023).
[17] International RISC-V. Frequently Asked Questions. — URL: https: //web.archive.org/web/20160219195430/http://riscv.org/faq/ (дата обращения: 14.12.2023).
[18] International RISC-V. RISC-V ”V” Vector Extension. —
2021.— URL: https://drive.google.com/file/d/1AQZ3l_ EGeMa2NftMO562gVZ4vj61od2H/view?usp=drive_link (дата
обращения: 14.12.2023).
[19] International RISC-V. RISC-V Cryptography Extensions Volume II Vector Instructions.— 2023.— URL: https://drive.google.com/ file/d/1gb9OLH-DhbCgWp7VwpPOVrrY6f3oSJLL/view?usp=sharing (дата обращения: 14.12.2023).
[20] OpenJDK. AArch64 Stubs.— URL: https://github.com/openjdk/ jdk/blob/master/src/hotspot/cpu/aarch64/stubGenerator_ aarch64.cpp (дата обращения: 14.12.2023).
[21] OpenJDK. IntrinsicCandidate.java.— URL: https://github. com/openjdk/jdk/blob/master/src/java.base/share/classes/ jdk/internal/vm/annotation/IntrinsicCandidate.java (дата обращения: 25.05.2024).
[22] OpenJDK. Intrinsics for Arm platform.— URL: https: //github.com/openjdk/jdk/blob/master/src/hotspot/cpu/ aarch64/macroAssembler_aarch64.cpp (дата обращения: 25.05.2024).
[23] OpenJDK. Intrinsics for PowerPC platform.— URL: https: //github.com/openjdk/jdk/blob/master/src/hotspot/cpu/ppc/ macroAssembler_ppc.cpp (дата обращения: 25.05.2024).
[24] OpenJDK. JDK9 stubGenerator_riscv.cpp. — URL: https: //github.com/openjdk/jdk/blob/master/src/hotspot/cpu/ aarch64/stubGenerator_aarch64.cpp (дата обращения: 25.05.2024).
[25] OpenJDK. OpenJDK available platforms. — URL: https: //github.com/openjdk/jdk/tree/master/src/hotspot/cpu/ (дата обращения: 25.05.2024).
[26] OpenJDK. Poly1305 JTreg test.— URL: https://github.com/ openjdk/jdk/blob/master/test/jdk/com/sun/crypto/provider/ Cipher/ChaCha20/unittest/Poly1305UnitTestDriver.java (дата обращения: 25.05.2024).
[27] OpenJDK. TestAESMain.java.— URL: https://github.com/ openjdk/jdk/blob/master/test/hotspot/jtreg/compiler/ codegen/aes/TestAESMain.java (дата обращения: 25.05.2024).
[28] OpenJDK. TestAdler32.java. — URL: https://github.com/openjdk/ jdk/blob/master/test/hotspot/jtreg/compiler/intrinsics/ zip/TestAdler32.java (дата обращения: 25.05.2024).
[29] OpenJDK. TestCRC32C.java.— URL: https://github.com/ openjdk/jdk/blob/master/test/hotspot/jtreg/compiler/ intrinsics/zip/TestCRC32C.java (дата обращения: 25.05.2024).
[30] OpenJDK. TestCRC32.java. — URL: https://github.com/openjdk/ jdk/blob/master/test/hotspot/jtreg/compiler/intrinsics/ zip/TestCRC32.java (дата обращения: 25.05.2024).
[31] OpenJDK. TestGHASH.java.— URL: https://github.com/ openjdk/jdk/blob/master/test/jdk/com/sun/crypto/provider/ Cipher/AES/TestGHASH.java (дата обращения: 25.05.2024).
[32] OpenJDK. Zlib in JVM. — URL: https://github.com/openjdk/jdk/ blob/master/src/java.base/share/native/libzip/zlib/zlib.h (дата обращения: 02.05.2024).
[33] OpenJDK. library_call.cpp in OpenJDK. — URL: https: //github.com/openjdk/jdk/blob/master/src/hotspot/share/ opto/library_call.cpp (дата обращения: 14.12.2023).
[34] OpenJDK. stubGenerator_riscv.cpp. URL: https://github. com/openjdk/jdk/blob/master/src/hotspot/cpu/riscv/ stubGenerator_riscv.cpp (дата обращения: 25.05.2024).


Работу высылаем на протяжении 30 минут после оплаты.




©2025 Cервис помощи студентам в выполнении работ