gpt4 book ai didi

c - 索引和的性能优化

转载 作者:行者123 更新时间:2023-12-04 12:15:24 27 4
gpt4 key购买 nike

给定一个 float 数组,以及另一个将值索引到该数组中的排序数组,该数组应该求和——有没有什么方法可以比这个和自动矢量化代码做得更好?任何适用的内在函数?

#include "stdint.h"

void IndexedSum(float buf[], uint32_t index[], int len, float *res) {
float acc = 0;
for(int i = 0; i < len; i++) {
acc += buf[index[i]];
}
*res = acc;
}

当前使用 clang 6.0-O3-ffast-math-mllvm -force-vector-width= 进行编译8:

https://godbolt.org/g/AVhA4L

最佳答案

展开循环。我会认为像

#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 足够大,应该会有所改进。我考虑过使用 Duff's device但不想引入通过指针做所有事情的潜在性能损失。不过,这可能是一个有趣的性能比较。

祝你好运。

关于c - 索引和的性能优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50144723/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com