gpt4 book ai didi

performance - 更符合人类逻辑的源代码是否会产生更优化的编译代码?

转载 作者:行者123 更新时间:2023-12-02 23:16:06 25 4
gpt4 key购买 nike

我正在从事一个大型性能关键项目,该项目的分支非常多。在为这个产品设计算法的过程中,我的雇主经常提醒我编写更“人类逻辑”的代码,或者以更符合我们逻辑思维方式的方式编写。

虽然从几个不同的角度来看这对我来说是有意义的(例如易于理解/内存、代码维护等),但我也想知道这种方法是否也可以带来更优化的编译输出。

出现这种情况是否是因为编译器是由人类编写的,而优化器通常旨在识别熟悉的代码块?

我很想听听一些关于为什么会出现这种情况的想法。

最佳答案

考虑两种不同类型的代码:库代码和应用程​​序代码。库代码(如字符串类库)很可能在很多时候拥有程序计数器,如下所示:

while(some test){
massage some data, while seldom calling sub-functions
}

这种代码将受益于编译器优化。(所以为了回答你的问题,人们编写这样的基准函数,编译器编写者使用它们作为测试用例。)

另一方面,应用程序代码往往如下所示:

if (some test){
do a bunch of things, including many function calls
} else if (some other test){
do a bunch of things, including many function calls
} else {
do a bunch of things, including many function calls
}

在这种情况下,通过分支预测或周期剃须节省的时间可能是 1 个时间单位,而 做一堆事情... 可能会花费 10^2 到10^8 时间单位,有或没有 I/O。因此,编译器优化此代码的好处往往会完全消失在噪音中。

这并不是说它不能优化。只是编译器无法做到这一点 - 这是你的工作。

如果您想让后一种代码运行得更快,最好的方法是找出哪些代码行在调用堆栈上的时间比例很高,如果可能的话,找到一种方法来避免执行它们。(Here's an example of a 43x speedup.)

关于performance - 更符合人类逻辑的源代码是否会产生更优化的编译代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6605211/

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