>

Пакеты Conan>

intel-neon2sse

intel-neon2sse

Библиотека-транслятор, которая позволяет использовать код, написанный для ARM NEON SIMD-инструкций, на архитектурах x86/x86-64 с поддержкой SSE (Streaming SIMD Extensions). Библиотека предоставляет заголовочные файлы, которые преобразуют вызовы функций NEON в эквивалентные SSE-инструкции, что упрощает портирование высокопроизводительного кода между ARM и x86 платформами без необходимости полного переписывания.

Особенности

  • преобразует ARM NEON SIMD-инструкции в SSE (SSE2/SSE3/SSE4.1) аналоги на x86;
  • позволяет запускать код, написанный для ARM, на x86 без изменений;
  • поддерживает большинство распространённых NEON-функций и типов данных;
  • требует только заголовочные файлы (header-only), не нуждается в отдельной компиляции;
  • совместима с компиляторами GCC, Clang, MSVC;
  • упрощает кросс-платформенную разработку для ARM и x86.

Основные компоненты

NEON2SSE состоит из заголовочных файлов, которые предоставляют макросы и функции, эмулирующие поведение ARM NEON с помощью SSE инструкций (подробнее с документацией можно ознакомиться здесь).

Макросы преобразования типов данных

Библиотека определяет набор макросов и типов, которые соответствуют NEON-векторам, но реализованы через SSE-регистры. Это позволяет использовать тот же API, что и в ARM NEON, но на x86 архитектуре.

Основные типы и макросы:

  • int8x16_t, int16x8_t, int32x4_t, int64x2_t — целочисленные векторы;
  • uint8x16_t, uint16x8_t, uint32x4_t, uint64x2_t — беззнаковые целочисленные векторы;
  • float32x4_t, float64x2_t — векторы с плавающей точкой;
  • vdupq_n_s8(), vdupq_n_u16(), vdupq_n_f32() — инициализация векторов повторяющимся значением;
  • vld1q_s32(), vst1q_s32() — загрузка и сохранение векторов из/в памяти.

Поддержка арифметических операций

Библиотека реализует основные арифметические операции, доступные в NEON, такие как сложение, вычитание, умножение и деление, с использованием соответствующих SSE-инструкций.

Основные арифметические функции:

  • vaddq_s32(), vsubq_f32(), vmulq_u16() — сложение, вычитание, умножение векторов;
  • vaddvq_s32() — горизонтальное суммирование элементов вектора;
  • vmlaq_f32() — умножение и сложение (fused multiply-add);
  • vabdq_s32() — абсолютная разность;
  • vmaxq_s32(), vminq_f32() — максимум и минимум элементов.

Операции сравнения и логические операции

NEON2SSE преобразует операции сравнения и логические операции NEON в эквивалентные SSE-инструкции, сохраняя семантику работы с векторами.

Функции сравнения и логики:

  • vceqq_s32(), vcgtq_f32(), vcleq_u16() — операции сравнения (равно, больше, меньше или равно);
  • vandq_s32(), vorrq_u16(), veorq_f32() — побитовые логические операции;
  • vmvnq_s32() — побитовое отрицание (NOT);
  • vbslq_s32() — выбор битов на основе маски (bit select).

Операции сдвига и реорганизации данных

Библиотека поддерживает операции сдвига элементов вектора, а также функции реорганизации данных, такие как перестановки и интерливинг.

Функции сдвига и реорганизации:

  • vshlq_s32(), vshrq_n_u16() — арифметические и логические сдвиги;
  • vrev64q_s32() — обратный порядок элементов в 64-битных блоках;
  • vtrn1q_s32(), vzip1q_f32() — транспонирование и объединение векторов;
  • vextq_s32() — извлечение части вектора;
  • vtbl1_s8() — табличная замена байтов.

Ограничения и особенности преобразования

Хотя NEON2SSE покрывает большинство распространённых NEON-функций, существуют некоторые ограничения из-за различий между архитектурами NEON и SSE. Важно учитывать эти особенности при портировании кода.

Ключевые ограничения:

  • Не все NEON-функции имеют прямые аналоги в SSE, некоторые операции могут быть эмулированы с большими накладными расходами;
  • Различия в обработке переполнений и округления могут влиять на результаты;
  • Производительность может отличаться от нативного NEON из-за особенностей реализации на SSE;
  • Требуется поддержка SSE2 как минимум, для некоторых функций — SSE3, SSE4.1.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "intel-neon2sse/cci.20210225@aurora",
    )    

Процесс локальной сборки описан в документации.

intel-neon2sse

Header only library intended to simplify ARM->IA32 porting
Лицензия
BSD-2-Clause
Версия
Домашняя страница
Скачать
package
100.08 Kb
MD5: a1025a08519b274e5dd9a001bae3242c
Updated: 03.09.2025, 21:57:34
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.