我可以提供一份常见 C++ 优化实践的详细列表吗?
我所说的优化是指您必须修改源代码才能更快地运行程序,而不是更改编译器设置。
我会回应其他人所说的:更好的算法将在性能提升方面获胜。
也就是说,我从事图像处理工作,作为一个问题领域可能会更棘手。例如,很多年前我有一段代码,如下所示:
void FlipBuffer(unsigned char *start, unsigned char *end)
{
unsigned char temp;
while (start <= end) {
temp = _bitRev[*start];
*start++ = _bitRev[*end];
*end-- = temp;
}
}
它将 1 位帧缓冲区旋转 180 度。 _bitRev 是一个 256 字节的反转位表。这段代码几乎是你能得到的最严格的。它在 8MHz 68K 激光打印机控制器上运行,打印一张 legal 尺寸的纸张大约需要 2.5 秒。为了不向您透露细节,客户无法忍受 2.5 秒。解决方案是与此相同的算法。不同之处在于
- 我使用了 128K 表并按字而不是字节进行操作(68K 对字更满意)
- 我使用达夫的设备将循环展开到适合短分支的程度
- 我进行了优化以跳过空白单词
- 我最终在汇编中重写了它,以利用 sobgtr 指令(减一并分支到更大),并在正确的位置具有“自由”后增量和预减量。
所以 5x:没有算法改变。
关键是您还需要了解您的问题域以及瓶颈的含义。在图像处理中,算法仍然是王道,但如果您的循环正在执行额外的工作,请将其工作量乘以几百万,这就是您付出的代价。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)