Есть ли способ установить разные значения для нескольких дорожек вектора одновременно, используя ARM NEON Intrinsics? - PullRequest
0 голосов
/ 18 февраля 2020

Можно ли устанавливать разные значения для нескольких дорожек вектора одновременно, используя 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 меняются в каждой итерации l oop. Есть ли другой оптимальный способ инициализации?

1 Ответ

2 голосов
/ 25 февраля 2020

Единственный способ загрузить разные дорожки вектора с разными значениями с использованием одного NEON intrinsi c требует, чтобы значения находились на смежных адресах памяти, т. Е. Вам понадобится массив из двух значений int32_t, с которыми вы будете использовать vld1_s32 intrinsi c для загрузки векторных дорожек.

Поскольку из вашего фрагмента кода кажется, что вам нужно взять значения для разных дорожек из разных массивов, вы не можете использовать vld1_s32 intrinsi c и, таким образом, вы не можете инициализировать каждый из ваших векторов одним NEON intrinsi c.

...