【发布时间】:2013-03-07 02:03:07
【问题描述】:
我正在尝试通过使用 Neon 内在函数作为练习来减去两个图像(灰度),我不知道使用 C 内在函数减去两个向量的最佳方法是什么。
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 编译不了,有问题 uint8x8x3_t subPixels = vsub_u8(srcPixels, dstPixels);
-
如果这些只是灰度图像,那么您不想使用 3 种组件类型和内在函数 - 使用
uint8x16_t作为您的数据类型,然后使用普通的 16 字节加载和存储。 -
不要更新问题中的代码以反映我在回答中的内容。它使其他人阅读这个问题感到困惑/毫无意义。
标签: arm neon intrinsics