Найти в Дзене
ARM NEON

Обзор библиотек обеспечивающих использование ARM NEON команд

Одной из первых библиотек которую можно порекомендовать для начала изучения NEON команд называется math-neon. Проект библиотеки размещен по ссылке https://code.google.com/archive/p/math-neon/

Этот проект реализует функции стандартной библиотеки cmath и некоторые оптимизированные матричные функции.

В файле math_neon.h перечислены все доступные в библиотеке функции.

В качестве примера рассмотрим функцию math_fabsf (файл math_fabsf.c) - это функция аналог fabsf(x) стандартной библиотеки С. Функция fabs вычисляет абсолютное значение (модуль) и возвращает его |х|.

Ниже приведены функции из файла math_fabsf.c:

#include "math_neon.h"

float fabsf_c(float x) // реализация функции на С

{

union {

int i;

float f;

} xx;

xx.f = x;

xx.i = xx.i & 0x7FFFFFFF;

return xx.f;

}

//Следующие две функции используют вставки на assembler

float fabsf_neon_hfp(float x) // функция использует команду NEON / VFP

{

asm volatile (

"fabss s0, s0 \n\t" //s0 = fabs(s0)

);

}

float fabsf_neon_sfp(float x) // функция использует команду ARM

{

asm volatile (

"bic r0, r0, #0x80000000 \n\t" //r0 = r0 & ~(1 << 31)

);

}

Надо отметить что, в библиотеке используются как NEON так и VFP команды. Библиотека math-neon проста для понимания и легко может быть модифицирована для ваших экспериментов. В функциях написанных на assembler к каждой команде даются подробные комментарии.

Если Вас заинтересовала эта тема оставьте свой комментарий, ставьте пальчик вверх.

В следующей статье будет приведён обзор ещё одной freeware библиотеки, использующей NEON команды.