消除 if-else 以提高流水线架构中的性能
Elimination of if-else for improving performance in pipelined architecture
我的教授坚持通过省略 "if-else" 构造或 "looping" 构造来编写 "truly sequential" 的代码。
他的论点是任何分支指令都会导致流水线刷新并且效率低下。
他建议使用信号和异常处理。
还使用某些标志,即溢出标志、符号标志、进位标志来替换 if-else 条件。
我的问题是这样的方案是否可行。如果是,它真的有效吗?
示例会有所帮助。
这种微优化在高度计算密集型循环中很有意义,减少几个循环可以产生显着效果。有几个但是:
如果代码不够成熟,这样的优化可能会过早,适得其反;
优化已经跑得很快的代码用处不大;
使用分析来确定瓶颈所在;
只有汇编语言允许您访问算术标志;
优秀的编译器知道技巧并在某种程度上为您完成工作;
如果你关心分支,也要关心除法和内存访问模式。
随着现代处理器和高级语言的当前复杂程度,无论是编译的还是解释的,您对实际生成的代码的控制越来越少。
我的教授坚持通过省略 "if-else" 构造或 "looping" 构造来编写 "truly sequential" 的代码。
他的论点是任何分支指令都会导致流水线刷新并且效率低下。
他建议使用信号和异常处理。
还使用某些标志,即溢出标志、符号标志、进位标志来替换 if-else 条件。
我的问题是这样的方案是否可行。如果是,它真的有效吗?
示例会有所帮助。
这种微优化在高度计算密集型循环中很有意义,减少几个循环可以产生显着效果。有几个但是:
如果代码不够成熟,这样的优化可能会过早,适得其反;
优化已经跑得很快的代码用处不大;
使用分析来确定瓶颈所在;
只有汇编语言允许您访问算术标志;
优秀的编译器知道技巧并在某种程度上为您完成工作;
如果你关心分支,也要关心除法和内存访问模式。
随着现代处理器和高级语言的当前复杂程度,无论是编译的还是解释的,您对实际生成的代码的控制越来越少。