Размотайте петлю. Я думаю, что-то вроде
#include "stdint.h"
void IndexedSum(float buf[], uint32_t index[], int len, float *res)
{
float acc = 0;
int i;
for(i = 0 ; i < len-8 ; i += 8)
acc += (buf[index[i+0]] +
buf[index[i+1]]
buf[index[i+2]]
buf[index[i+3]]
buf[index[i+4]]
buf[index[i+5]]
buf[index[i+6]]
buf[index[i+7]])
while(i < len)
acc += buf[index[i++]];
*res = acc;
}
должно обеспечить улучшение, если len
достаточно велико. Я думал об использовании устройства Даффа , но не хотел вводить потенциальное снижение производительности за выполнение всех действий с помощью указателей. Впрочем, сравнение производительности может быть интересным.
Удачи.