有没有一种方法可以使用ARM NEON Intrinsics一次为向量的多个通道设置不同的值?

问题描述 投票:0回答:1

是否可以使用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个回答
0
投票

使用单个NEON内在函数加载具有不同值的向量的不同通道的唯一方法要求这些值位于相邻的内存地址上,即,您将需要一个包含两个int32_t值的数组,并使用它们来使用vld1_s32内在函数加载矢量通道。

由于您的代码片段似乎需要从不同的数组中获取不同通道的值,因此无法使用vld1_s32内部函数,因此无法使用单个NEON内部函数初始化每个向量。

© www.soinside.com 2019 - 2024. All rights reserved.