gpt4 book ai didi

optimization - 使用AVX指令集优化自适应滤波器

转载 作者:行者123 更新时间:2023-12-03 17:32:07 25 4
gpt4 key购买 nike

我正在尝试使用AVX优化自适应过滤代码,该过滤器的过滤内核对于每个像素都是随机的(例如0到991)。

它对应的C代码如下:

/* filter function */
void filter()
{
int size = width *height; // image size
float w[992][11]; // filter kernel array
float x[size + 10], y[size], filterindex[size]; // input , output , filter index

for (i = 0; i < size; i++)
{
int l;
/* pick filter: */
l = filterindex[i];

/* apply filter */
for (k = -5, a = 0.; k <= 5; k++)
a += x[i+k] * w[l][5+k];
y[i] = (float)a;
}
}


哪里


filterindex是一个输入缓冲区,它为每个像素保存滤镜索引(0到991)[周围像素之间的这些索引上没有图案]
输入 x并输出 y
w是大小为 w[992][2*N_filt + 1]的筛选器内核,其中每个索引都针对992集进行了初始化


谁能帮我如何使用AVX优化上述代码?如果无法使用AVX,请提出其他优化目标3倍的方法。

最佳答案

对于每个输入像素,您可以在两个AVX寄存器中加载11个滤波器系数(在第二个AVX寄存器中填充5个零),并类似地加载像素:_mm256_load_ps。

将这些值乘以并成对相加,得到8个2个乘积的总和:_mm256_mul_ps,_mm256_fmadd_ps。

接下来,您需要使用一系列水平加法来压缩为单个值,以产生4、8和16个乘积之和:_mm_hadd_ps。

总计:每个输出像素9条指令。

关于optimization - 使用AVX指令集优化自适应滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24910841/

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