相关疑难解决方法(0)

什么是在x86上提供无分支FP min和max的指令?

引用(感谢作者开发和共享算法!):

https://tavianator.com/fast-branchless-raybounding-box-intersections/

由于现代浮点指令集可以在没有分支的情况下计算最小值和最大值

作者的相应代码就是

dmnsn_min(double a, double b)
{
  return a < b ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

我很熟悉例如_mm_max_ps,但这是一个矢量指令.上面的代码显然是用于标量形式.

题:

  • 什么是x86上的标量无分支minmax指令?这是一系列指令吗?
  • 假设它将被应用,或者如何调用它是否安全?
  • 关于min/max的无分支问题是否有意义?根据我的理解,对于光线跟踪器和/或其他视觉软件,给定光线盒交叉例程,分支预测器没有可靠的模式来拾取,因此消除分支确实有意义.我这是对的吗?
  • 最重要的是,所讨论的算法是围绕(+/-)INFINITY进行比较而建立的.这是可靠的,我们正在讨论的(未知)指令和浮点标准吗?

以防万一:我熟悉在C++中使用min和max函数,相信它是相关的,但不是我的问题.

c floating-point optimization x86 assembly

5
推荐指数
1
解决办法
1493
查看次数

标签 统计

assembly ×1

c ×1

floating-point ×1

optimization ×1

x86 ×1