gpt4 book ai didi

c++ - SSE 中高效的 min() 函数

转载 作者:太空宇宙 更新时间:2023-11-04 16:05:59 25 4
gpt4 key购买 nike

<分区>

我有以下循环,它取数组中每个条目的平方根:

#include <mmintrin.h>

float array[SIZE];
for (int i = 0; i < SIZE; i += 4)
{
__m128 fourFloats, fourRoots;
fourFloats = _mm_load_ps(&array[i]);
fourRoots = _mm_sqrt_ps(fourFloats);
float results[4];
_mm_store_ps(results, fourRoots);
// This is bottleneck
array[i] = results[0] > 63.0F ? 63.0F : floor(results[0]);
array[i+1] = results[1] > 63.0F ? 63.0F : floor(results[1]);
array[i+2] = results[2] > 63.0F ? 63.0F : floor(results[2]);
array[i+3] = results[3] > 63.0F ? 63.0F : floor(results[3]);
// This is slower
// array[i] = (int) std::min(floor(results[0]), 63.0F);
}

根据我的分析器 (Zoom),平方根不需要花费大量时间,但结果的四次裁剪中的每一次都需要大约 20% 的时间,即使使用 -O2 优化。有没有更有效的方法来实现循环?请注意,_mm_store_ps() 已被 gcc 优化。

我尝试了一个优化的平方根表查找,因为 97% 的输入 array 值都在 512 以下,但这没有帮助。请注意,对于我的完整应用程序(一个持续运行的图像识别应用程序),此例程占用的总处理器时间不到四分之一。

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