Я пытаюсь вычесть два изображения (с градациями) с помощью Neon intrinsics в качестве упражнения, я не знаю, что является лучшим способом вычесть два вектора, используя C intrinsics.Вычитание двух изображений с использованием NEON
void subtractTwoImagesNeonOnePass(uint8_t *src, uint8_t*dest, uint8_t*result, int srcWidth)
{
for (int i = 0; i<srcWidth; i++)
{
// load 8 pixels
uint8x8x3_t srcPixels = vld3_u8 (src);
uint8x8x3_t dstPixels = vld3_u8 (src);
// subtract them
uint8x8x3_t subPixels = vsub_u8(srcPixels, dstPixels);
// store the result
vst1_u8 (result, subPixels);
// move 8 pixels
src+=8;
dest+=8;
result+=8;
}
}
После компиляции используйте 'objdump' и проверьте сборку полученного двоичного файла. Если он выглядит достаточно хорошо, это достаточно хорошо. – auselen
@auselen Не компилируется, возникает проблема с uint8x8x3_t subPixels = vsub_u8 (srcPixels, dstPixels); –
Если это только изображения с оттенками серого, вы не хотите использовать 3 типа компонентов и встроенные функции - используйте 'uint8x16_t' в качестве вашего типа данных, а затем используйте обычные 16-байтовые нагрузки и сохраните. –