Я пытаюсь оптимизировать некоторые алгоритмы обработки изображений для ARM с помощью встроенных функций NEON. Для некоторых фильтров необходимо загружать элементы в окрестности точки. Например, чтобы отфильтровать изображение в пикселях p[x]
, мне нужно загрузить p[x - 1]
, p[x]
и p[x + 1]
. Если x=0
, то загружаю p[0]
, p[0]
и p[1]
. Если x=width-1
, то загружаю p[width-2]
, p[width-1]
и p[width-1]
.
Итак, если у меня есть вектор:
uint8x16_t a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
Как я могу получить из него следующие векторы:
uint8x16_t b = {0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
uint8x16_t c = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15};