gpt4 book ai didi

optimization - 优化编译器是否会删除对结果将乘以零的方法的调用?

转载 作者:行者123 更新时间:2023-12-03 05:11:53 27 4
gpt4 key购买 nike

假设您有一个计算成本较高的方法 Compute(p),它返回一些浮点值,还有另一个方法 Falloff(p),它从零返回另一个浮点值到一。

如果您计算 Falloff(p) * Compute(p),当 Falloff(p) 返回时,Compute(p) 仍会运行零?或者您是否需要编写一个特殊情况来防止 Compute(p) 不必要地运行?

理论上,优化编译器可以确定当 Falloff 返回零时省略计算不会对程序产生影响。然而,这有点难以测试,因为如果你让 Compute 输出一些调试数据来确定它是否正在运行,编译器就会知道不要因为该调试信息而忽略它,从而导致某种薛定谔猫的情况。

我知道解决这个问题的安全方法就是添加特殊情况,但我只是很好奇。

最佳答案

一般来说,编译器会知道函数调用可能有副作用(无限循环、异常等),并且不会对其进行优化。另一方面,诸如全程序优化器之类的东西可以确定函数没有副作用,从而在不使用其返回值时将其省略。

请注意,如果您的函数返回 IEEE float 并且它乘以 0,则您不能安全地省略函数调用,除非您可以确定它始终返回实数。如果它可以返回 InfNaN,则乘以 0 不是 nop,必须执行。

关于optimization - 优化编译器是否会删除对结果将乘以零的方法的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4506891/

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