Детальная информация

Название Evaluating the performance of Java Vector API in vector embedding operations // Информатика, телекоммуникации и управление. – 2024. – Т. 17, № 4. — С. 7-15
Авторы Tomilov N. A. ; Turov V. P.
Выходные сведения 2024
Коллекция Общая коллекция
Тематика Вычислительная техника ; Программирование ЭВМ. Компьютерные программы. Программотехника ; vector representations ; vector calculations ; Java Vector API ; computing performance ; scalar codes ; native codes ; Java codes ; векторные представления ; векторные вычисления ; производительность вычислений ; скалярные коды ; нативные коды ; Java-коды
УДК 004.41/.42
ББК 32.973-018
Тип документа Статья, доклад
Тип файла PDF
Язык Английский
DOI 10.18721/JCSTCS.17401
Права доступа Свободный доступ из сети Интернет (чтение, печать, копирование)
Дополнительно Новинка
Ключ записи RU\SPSTU\edoc\75833
Дата создания записи 22.04.2025

Разрешенные действия

Прочитать Загрузить (0,4 Мб)

Группа Анонимные пользователи
Сеть Интернет

Hardware vector instructions are widely used to improve the performance of computations. The Java Vector API introduced in Java 16 allows using them portably on any platform supported by the Java Virtual Machine (JVM). In this paper, we evaluate performance benefits from rewriting typical vector search operations, such as computing distance between two vector embeddings, using the Java Vector API. We compare the performance of these vectorized implementations with semantically equivalent scalar code. Furthermore, we compare the Java Vector API with native C++ implementations, called from Java code via different Java-to-native interfaces, namely Java JNI, Project Panama (Foreign Function and Memory API), and manipulating Java JIT compiler via JVM CI and Nalim library. Benchmarking results suggest that in certain situations using Vector API can produce a measurable increase in performance of low-level operations, which can be translated into speedup of high-level algorithms such as Product Quantization. However, under certain scenarios, using Vector API is slower than relying on automatic vectorization provided by JVM, and most benchmarks suggest that invoking calculations implemented in C++ is faster even with all performance penalties incurred by native code invocations. Using techniques to lower these penalties, for example, by avoiding memory copy operations, can decrease the execution time by five times compared to Vector API and by ten times compared to plain Java code. However, in cases where using native code is prohibited, Vector API can still demonstrate a noticeable performance uplift, which can be beneficial for vector-related calculations in Java applications.

Аппаратные векторные инструкции широко используются для повышения производительности вычислений. Java Vector API, представленный в Java 16, позволяет переносимо использовать их на любой платформе, поддерживаемой виртуальной машиной Java. В данной работе выполняется оценка производительности при реализации типичных операций поиска по векторным представлениям, таких как вычисление расстояния между двумя векторными представлениями, с использованием Java Vector API. Производительность векторизованных реализаций этих операций сравнивается с семантически эквивалентным скалярным кодом. Кроме того, производится сравнение Java Vector API с нативными реализациями на C++, вызываемыми из Java-кода через различные интерфейсы взаимодействия Java с нативным кодом, а именно Java JNI, Project Panama (Foreign Function and Memory API) и управление JIT-компилятором через JVM CI и библиотеку Nalim. Результаты тестирования показывают, что в определенных ситуациях использование Vector API может привести к заметному увеличению производительности низкоуровневых операций, что может выражаться в ускорении высокоуровневых алгоритмов, таких как Product Quantization. Однако в некоторых сценариях использование Vector API оказывается медленнее по сравнению с автоматической векторизацией, предоставляемой JVM, и большинство тестов показывают, что вызов вычислений, реализованных на C++, занимает меньше времени по сравнению с Vector API, даже с учетом всех накладных расходов, возникающих при вызовах нативного кода. Используя методы для снижения этих накладных расходов, например, избегая операций копирования памяти, можно уменьшить время выполнения в пять раз по сравнению с Vector API и в десять раз по сравнению с обычным Java-кодом. Тем не менее, в случаях, когда использование нативного кода запрещено, Vector API все еще может демонстрировать заметное повышение производительности, что может быть полезно для вычислений, связанных с векторными представлениями, в Java-приложениях.

Место доступа Группа пользователей Действие
Локальная сеть ИБК СПбПУ Все
Прочитать Печать Загрузить
Интернет Все

Количество обращений: 37 
За последние 30 дней: 37

Подробная статистика