#include <arm_neon.h>

float findMax(float* array, int size) { float32x4_t max = vld1q_f32(array); // 加载数组前4个元素到寄存器 for (int i = 4; i < size; i += 4) { float32x4_t current = vld1q_f32(array + i); // 加载下一个4个元素到寄存器 max = vmaxq_f32(max, current); // 比较当前寄存器中的最大值和新加载的4个元素 } float32x2_t max2 = vmax_f32(vget_low_f32(max), vget_high_f32(max)); // 比较低64位和高64位的两个寄存器元素 float32x2_t max1 = vpmax_f32(max2, max2); // 比较max2中的两个元素 return vget_lane_f32(max1, 0); // 返回最大值 }

int main() { float array[] = {1.3f, 9.5f, 2.7f, 5.1f, 8.2f, 4.6f, 3.7f, 7.4f}; int size = sizeof(array) / sizeof(float); float max = findMax(array, size); printf("Max value: %.2f\n", max); return 0; }

NEON C++: Efficiently Find Maximum Value in a Float Array

原文地址: https://www.cveoy.top/t/topic/psgT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录