我在Android上使用Neon实现了一个算法。当我想把向量加在一起的时候,我注意到有两种方法,我找不到区别。
// pairwise addition
int8x8_t vpadd_s8(int8x8_t a, int8x8_t b); // VPADD.I8 d0,d0,d0
// addition
int8x8_t vadd_s8(int8x8_t a, int8x8_t b); // VADD.I8 d0,d0,d0 第二个像你所期望的那样。它取a中的ith int8并将其添加到b中的ith int8,为什么这两种方法?
发布于 2013-08-09 01:22:21
有很好的信息可以在ARM信息中心找到。引用用于程序集说明,但名称与本质非常相似。虽然如果你要使用霓虹灯,你将获得更好的性能,只要直接跳到组装。它甚至比使用本质更容易编写。
总之,成对的加法在同一个向量中添加一对元素,然后将结果串联到一个向量中。图解(为了便于绘图,我使用了4元素向量):
vector 'a' vector 'b'
+-+-+-+-+ +-+-+-+-+
|0|1|2|3| |4|5|6|7|
+-+-+-+-+ +-+-+-+-+
\+/ \+/ \+/ \+/
1 5 9 13
\ \ / /
+-+-+-+--+
|1|5|9|13| result
+-+-+-+--+这与常规加法指令不同,后者添加了两个向量的对应元素,并给出了结果。
+-+-+-+--+
|4|6|8|10|
+-+-+-+--+对于a和b,在上面的插图中。
https://stackoverflow.com/questions/18133690
复制相似问题