【发布时间】:2015-01-28 01:58:24
【问题描述】:
我对编译知之甚少,但我惊讶地发现 Julia 编译器没有优化多个进程。
让我们考虑 Julia(这是一个即时编译器),让我们考虑这两个本质上做相同事情的代码。
n=1
@time for i = 1:10^8 n=n+1 end
elapsed time: 3.535394087 seconds (0 bytes allocated)
n=1
@time n=n+10^8
elapsed time: 6.599e-6 seconds (112 bytes allocated)
为什么现代编译器无法理解这个长循环除了将10^8 添加到n 之外什么都不做?
我认为下面的例子更引人注目
n=1
@time for i = 1:10^9 n=n end
elapsed time: 3.496573198 seconds (0 bytes allocated)
【问题讨论】:
-
这完全取决于编译器的开发人员在优化器中投入了多少精力。实际上,其他语言的一些编译器确实执行该优化。
-
哦,好的。我预计如何编译代码有一些基本限制。我认为您几乎可以从您的评论中得出答案(最终添加一点解释,说明为什么构建可以执行此优化的编译器是一项艰巨的工作)
-
这只是一个例子的毫无根据的概括。 -1
标签: compiler-construction compilation julia