我可以在C中的阵列上使用Duff的设备吗?

Ben*_*sen 5 c optimization duffs-device

我在这里有一个循环,我想让它运行得更快.我正在传递一个大阵列.我最近听说过Duff的设备可以应用于这个for循环吗?有任何想法吗?

for (i = 0; i < dim; i++) {
    for (j = 0; j < dim; j++) {
        dst[RIDX(dim-1-j, i, dim)] = src[RIDX(i, j, dim)];
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 19

请不要使用Duff的设备.一千名维护程序员会感谢你.我曾经在一家培训公司工作,有人认为在C编程课程的前十页介绍该设备很有趣.作为一名教练,它是不可能处理的,除非(正如那个写下该课程的人显然那样)你相信"kewl"编码.

不用说,我尽快从课程中删除了这个东西.


Dav*_*ley 5

为什么要让它运行得更快?

是否存在实际的性能问题?

如果是这样,您是否已经分析并发现这种情况经常执行,因此值得优化?

如果是这样,您可能希望以两种方式编写它,即现在的直接方式和Duff的设备,或您喜欢的任何其他方法.

此时,您将测试性能.你可能会感到惊讶.现代优化器非常好,现代CPU非常复杂,因此源级优化通常会适得其反.(我曾经花了很多时间在一个循环中做到这一点,并且发现收紧循环,即使在引入一些间接时,也提高了性能.你的里程几乎肯定会有所不同.)

最后,如果Duff的设备确实更快,则必须确定性能改进是否值得采用这种简单且可优化的代码,并在下一个编译器版本中替换可能无法提高性能的维护问题.