Существует большой (~100 000 )массив из плавающих точечных переменных, и там это порог (также плавающая точка ).
Проблема в том, что мне приходится сравнивать каждую переменную из массива с порогом, но передача флагов NEON занимает очень много времени (~20 циклов в соответствии с профайлером ).
Есть ли эффективный способ сравнить эти значения?
ПРИМЕЧАНИЕ:Поскольку ошибка округления не имеет значения, я попробовал следующее:
float arr[10000];
float threshold;
....
int a = arr[20]; // e.g.
int t = threshold;
if (t > a) {....}
Но в этом случае я получил следующую последовательность команд процессора:
vldr.32 s0, [r0]
vcvt.s32.f32 s0, s0
vmov r0, s0 <--- takes 20 cycles as `vmrs APSR_nzcv, fpscr` in case of
cmp r0, r1 floating point comparison
Поскольку преобразование происходит в NEON, не имеет значения, сравниваю ли я целые числа, описанным способом или плавает.