有一个大约有10万个浮点变量的数组,并且有一个阈值(也是浮点数)。
问题是,我必须将数组中的每个变量与阈值进行比较,但NEON标志传输需要很长时间(根据分析器约20个周期)。
有没有有效的方法来比较这些值? 注意:由于舍入误差无关紧要,我尝试了以下内容:
但在这种情况下,我得到了以下处理器命令序列:
问题是,我必须将数组中的每个变量与阈值进行比较,但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上,因此无论我按照所描述的方式比较整数还是浮点数都没有问题。