【发布时间】:2016-07-26 17:56:32
【问题描述】:
我会尽量清楚地说明我的问题(不容易……对我来说也不是那么清楚)。 假设您有一组带有多个操作数的 IF...THEN 指令,例如
IF ((a==0) && (b==1) && (c==1)) THEN x=1
ELSE IF ((a==0) && (b==0) && (c==1)) THEN x=2-
等等
假设我可以用一个数学函数替换所有这些 IF,比如
x = a * n1 + b * n2 + c * n3(这只是给你一个想法,实际上它更复杂,但IF和操作数也更多)
该函数来自先前训练的人工神经网络。
我的直觉是,在执行方面,函数应该比 IF 花费更少的时间,但这只是来自我在汇编中的旧背景的直觉,他们告诉我们条件指令需要更多时间时间比算术时间。
你能确认一下吗?甚至可以提供一些链接让我可以找到解释?
提前谢谢你们!
【问题讨论】:
-
我认为你的直觉是对的。我在这里关注了一些关于消除分支的令人惊讶的结果的优化问题。
-
en.wikipedia.org/wiki/Branch_predictor 及其链接的文章将提供一个开始。相对收益取决于函数的复杂性和可能的分支,但对于现代处理器,流水线和分支预测器通常是相关的。
-
也许你应该先检查你的编译器cannot already do this,然后再对你的程序进行检查。当然总是首先验证它实际上可以有所作为,使用分析器。程序员的格言是三度测量,一次切割。
标签: c++ c assembly computer-science computation