performance - 具有性能优化潜力的浮点算法

标签 performance algorithm optimization floating-point micro-optimization

对于大学讲座,我正在寻找具有已知渐近运行时间但具有低级(微)优化潜力的浮点算法。这意味着优化,例如最小化高速缓存未命中和寄存器溢出、最大化指令级并行性以及在新 CPU 上利用 SIMD(矢量)指令。优化将特定于 CPU,并将使用适用的指令集扩展。

这方面的经典教科书示例是矩阵乘法,其中可以通过简单地重新排序内存访问顺序(以及其他技巧)来实现极大的加速。另一个例子是 FFT。不幸的是,我不能选择其中任何一个。

任何人有任何想法或可以使用提升的算法/方法吗?

我只对可以想象每线程加速的算法感兴趣。通过多线程并行处理问题很好,但这不是本讲的范围。

编辑 1:我正在这门类(class),而不是教它。在过去几年中,有相当多的项目在性能方面成功地超越了当前的最佳实现。

编辑 2:这 paper列出(从第 11 页开始)七类重要的数值方法和一些使用它们的相关算法。至少有一些提到的算法是候选的,但是很难看出是哪一个。


编辑 3:谢谢大家的宝贵建议!我们提议实现曝光融合算法 (paper from 2007),我们的提议被接受了。该算法创建类似 HDR 的图像,主要由小核卷积组成,然后是源图像的加权多分辨率混合(在拉普拉斯金字塔上)。对我们来说有趣的是,该算法已经在广泛使用的 Enfuse 中实现。工具,现在是 4.1 版。因此,我们将能够验证我们的结果并将其与原始结果进行比较,并且还可能为工具本身的开发做出贡献。如果可以的话,我会在以后用结果更新这篇文章。

最佳答案

最简单的例子:

  • 累积一笔款项。使用多个累加器展开和矢量化允许在典型的流水线架构上加速(ADD 延迟)*(SIMD 矢量宽度)(如果数据在缓存中;因为没有数据重用,如果您从内存),这很容易达到一个数量级。值得注意的是:这也降低了结果的平均误差!相同的技术适用于任何类似的归约操作。

一些来自图像/信号处理的经典:

  • 使用小内核进行卷积(尤其是像 3x3 或 5x5 内核这样的小 2d 卷积)。从某种意义上说,这是作弊,因为卷积 矩阵乘法,并且与 FFT 密切相关,但实际上高性能小核卷积的本质算法技术与两者完全不同。

  • 侵 eclipse 和扩张。

  • 人们称之为“ Gamma 校正”的图像;这实际上是对指数函数的评估(可能具有接近零的分段线性段)。在这里,您可以利用这样一个事实,即图像数据通常完全在一个很好的有界范围内,如 [0,1],并且很少需要亚 ulp 精度来使用更便宜的函数逼近(低阶分段极小极大多项式很常见)。

关于performance - 具有性能优化潜力的浮点算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22129503/

相关文章:

javascript - 遍历对象搜索属性并在成功时修改原始对象

c++ - 重载数组下标 [] 运算符慢

ruby-on-rails - 是否有任何工具可以监控 Rails 中 Puma 进程排队的性能?

algorithm - 差异可视化算法

检查数组中是否存在元素的算法复杂度

java - 写入 XSSF Workbook 时,是什么导致我的程序陷入困境?

php - 单个返回语句与多个?

java - PaintComponent 花费很长时间,占用了 Swing 事件调度线程

c# - 实现递归哈希算法

optimization - 循环遍历二维数组的最快方法?