Архитектура 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 команд в приложении.