android - Android neon 内在函数中 'addition' 和 'pairwise addition' 之间的区别?

标签 android java-native-interface neon

我在 Android JNI 上使用 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 中的第 i 个 int8 与 b 中的第 i 个 int8 相加。为什么是这两种方法?

最佳答案

ARM's Information Center 可以找到很好的信息。 .该引用用于汇编指令,但名称与内在函数非常相似。虽然如果你打算使用 NEON,你会通过直接跳到组装来获得更好的性能。它比使用内部函数更容易编写。

总而言之,成对加法在同一向量中添加成对的元素,然后将结果连接成一个向量。插图(为了便于绘制,我使用 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|
+-+-+-+--+

对于上图中的ab

关于android - Android neon 内在函数中 'addition' 和 'pairwise addition' 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18133690/

相关文章:

android - Adobe AIR/Flash Builder 4.6 : Create reminder in Android App

android - JNI - 无法在 Eclipse 中加载 OpenCV 的信息库

iphone - NEON:将 uint8_t 数组加载到 128 位寄存器中

gcc - 对于具有单独管道的 ARM,为 "-mfpu=neon-vfpv3"指定 "-mfpu=neon"比 0x104567910 有优势吗?

javascript - XmlHttpRequest 仅在 Cordova Android 中获取状态 0

Android ListActivity - 如何在 ListView 下面添加一个 View ?

java - 为什么 future.get() 对于 Volley RequestFuture 总是超时?

java - 在 Mac 上分析 Java 中的 CPU 使用情况

java - 链接库时找不到符号

c - 警告 : format '%ld' expects argument of type 'long int' , 但参数的类型为 '__builtin_neon_di'