gpt4 book ai didi

c++ - SIMD/SSE : short dot product and short max value

转载 作者:搜寻专家 更新时间:2023-10-31 02:24:08 30 4
gpt4 key购买 nike

我正在尝试优化两个 c 样式数组的点积,这些数组的大小为 contant 和 small,类型为 short。

我已经阅读了一些关于 SIMD 内在函数的文档以及许多关于使用此内在函数进行点积优化的博客文章/文章。

但是,我不明白使用此内在函数的短数组上的点积如何给出正确的结果。在制作点积时,计算值可以(并且在我的情况下总是)大于 SHORT_MAX,所以总和。因此,我将它们存储在 double 类型的变量中。

据我了解使用 simd intrinsic 的点积,我们使用 __m128i 变量类型和操作返回 __m128i。所以,我不明白的是为什么它不会“溢出”以及如何将结果转换为可以处理它的值类型?

谢谢你的建议

最佳答案

根据数据值的范围,您可能会使用内部函数,例如 _mm_madd_epi16 ,它对 16 位数据执行乘法/加法并生成 32 位项。然后,您需要定期将 32 位术语累积为 64 位。您需要多久执行一次取决于输入数据的范围,例如如果它是 12 位灰度图像数据,那么您可以在每次迭代 8 个元素(即 512 个输入点)时进行 64 次迭代,然后才有可能溢出。然而,在最坏的情况下,如果您的输入数据使用完整的 16 位范围,那么您将需要在每次迭代时(即每 8 个点)进行额外的 64 位累加。

关于c++ - SIMD/SSE : short dot product and short max value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28407878/

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