有效评估循环 cf 分支预测内的 max(a,b)?
在 C 中的 for 循环内计算 2 个浮点数的最大值的有效方法是什么,而不使用可能使管道停顿的逻辑语句,例如 a >;乙?一个:b?
我正在处理巨大的 3D 数组并进行大量的循环迭代。
What is an efficient way to calculate the maximum of 2 floats inside a for loop in C without using a logic statement which might stall the pipeline such as a > b ? a : b
?
I am working with huge 3D arrays and have tons of loop iterations.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
检查你的编译器输出的内容,它可能已经是“最佳”了。例如,
使用 GCC 4.5 编译,
-O3
在 x86_64 上生成此程序集:即编译器非常了解您的目标指令集以及代码的语义。让它发挥作用。
Check what your compiler outputs, it's probably "optimal" already. For instance,
Compiled with GCC 4.5,
-O3
, generates this assembly on x86_64:i.e. the compiler knows a lot about the instruction set you're targeting, and the semantics of your code. Let it do its job.
好吧,我不认为这比使用分支更快,但这似乎有效:
定义取自 聚合魔法算法
Well, I don't think this is faster than using branching but this seems to work:
The defines were taken from The Aggregate Magic Algorithms