Найти тему
ARM NEON

Векторные вычисления с помощью ARM® NEON™

Архитектура ARM по ряду причин стала доминирующей на мобильных устройствах. Одна из них это лучшее соотношении производительности к потреблению. В настоящее время мобильные устройства выполняют многие задачи, которые ранее были доступны только на стационарных компьютерах. Среди задач которые успешно решают мобильные приложения это: кодирование и декодирование видео- и аудио-потоков, компьютерное обучение, распознавание образов и речи. Ускорение обработки потоков информации достигается правильным выбором способа обработки. Для целого ряда задач необходимо выполнять однотипные операции над различными данными. К примеру для улучшения качества звука используются различные алгоритмы фильтрации, которые основаны на использовании параллельных (векторных вычислений). Одним из путей повышения производительности алгоритмов на процессорах с архитектурой ARM®, использование набора команд NEON™.

Отличие набора команд NEON™ от основного набора команд ARM® в том, что одной командой обрабатывается сразу несколько данных. Количество обрабатываемых данных зависит от типа данных. В среднем одна команда позволяет выполнять 4 математические операции. Процессоры выполняющие несколько операций одной командой относятся к архитектуре SIMD (один поток команд - много потоков обрабатываемых данных).

Следующий пример показывает как одна команда выполняет удвоение чисел содержащихся в векторе uint32x4_t input, который можно представить как массив из четырех числе - uint32_t[4]:

#include <arm_neon.h>

uint32x4_t A, B, C;

A[0]=1; A[1]=2; A[2]=3; A[3]=4;

B[0]=5; B[1]=5; B[2]=5; B[3]=5;

C=(vaddq_u32( A, B));

Для более простого восприятия также операция в другом виде:

| A[0] | A[1] | A[2] | A[3] |

| + | + | + | + |

| B[0] | B[1] | B[2] | B[3] |

| = | = | = | = |

| C[0] | C[1] | C[2] | C[3] |

В результате выполнения команды получается следующий результат:

С[0]=6; С[1]=7; С[2]=8; С[3]=9;

Как показано на примере в использовании NEON команд нет ничего сложного.

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

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