【问题标题】:Is there a way to set different values to multiple lanes of a vector at a time using ARM NEON Intrinsics?有没有办法使用 ARM NEON Intrinsics 一次为向量的多个通道设置不同的值?
【发布时间】:2020-06-02 11:55:10
【问题描述】:

是否可以使用 ARM NEON Intrinsics 一次为向量的多个通道设置不同的值?

例如,而不是像这样做

int32x2_t a, b, c, d, e, f;

.......... a few other operations...................

int *val;

...............val is pointing to another variable......

for(int i=0;i<var1;i++)
{
a = vset_lane_s32(val1[i], a, 0);
a = vset_lane_s32(val2[i], a, 1);
b = vset_lane_s32(val3[i], b, 0);
b = vset_lane_s32(val4[i], b, 1);
c = vset_lane_s32(val5[i], c, 0);
c = vset_lane_s32(val6[i], c, 1);
d = vset_lane_s32(val7[i], d, 0);
d = vset_lane_s32(val8[i], d, 1);

few operations based on a,b,c, and d
}

从 val1 到 val7 的值在每次循环迭代中都会发生变化。还有其他最佳的初始化方式吗?

【问题讨论】:

    标签: optimization arm simd intrinsics neon


    【解决方案1】:

    使用单个 NEON 内在函数加载具有不同值的向量的不同通道的唯一方法要求值位于连续的内存地址上,即您需要一个包含两个 int32_t 值的数组,您可以使用 vld1_s32加载矢量通道的固有特性。

    由于您的代码 sn-p 似乎您需要从不同的数组中获取不同通道的值,因此您不能使用 vld1_s32 内在函数,因此您不能使用单个 NEON 内在函数初始化每个向量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 2023-03-19
      • 2012-04-07
      • 1970-01-01
      • 2012-03-08
      • 2019-12-13
      相关资源
      最近更新 更多