cn8888 发表于 2014-4-16 17:58:54

wayne 发表于 2014-4-16 14:10
看来perl的loop控制还是偏简单了点。
我刚才测试了下,发现在Mathematica里面 这种差别很小。

Timing]
结果是:{14.328, Null}
Timing]
结果是:{30.937, Null}
车别也是很大的

cn8888 发表于 2014-4-16 18:00:59

Timing, {i, 1, 3}, {j, 1, 3}]]
{1,1}

{1,2}

{1,3}

{2,1}

{2,2}

{2,3}

{3,1}

{3,2}

{3,3}
这个结果告诉我们前面的是外循环
mathematica同样也是小循环在外面更省时间

cn8888 发表于 2014-4-16 18:02:36

不论如何, perl有这种差别, mathematica也有这种差别,
我觉得这个差别有可能是普遍的.
有没有用别的语言也测试一下,然后把报告结果粘贴上来??????

cn8888 发表于 2014-4-18 09:46:29

看来这儿没人能解决这个问题.

wayne 发表于 2014-4-18 11:12:00

cn8888 发表于 2014-4-16 17:58
Timing]
结果是:{14.328, Null}
Timing

我用是Mathematica 9.0.1,Linux版本,之前我说的差别小,是因为我最大循环是10^6,现在依你的意思,换成10^7,截图为证吧,免得你不相信:

wayne 发表于 2014-4-18 11:13:52

在这泛泛的讨论效率是无意义,浪费时间的。
每一种编程语言都有自己的实现方式。

====
即便是讨论编译后的目标对象是机器语言,最接近机器的硬件体系架构的的C/C++语言这种loop循环的效率 也意义不大,
因为很多现代的C/C++编译器都有优化处理,程序员应该把心思放在算法层次,而不是语言层次(况且语言是会随时会更新换代的)。
http://en.wikipedia.org/wiki/Loop_nest_optimization

cn8888 发表于 2014-4-18 12:30:57

突然发现自己的mathematica代码输入有问题
Timing]
{66.734, Null}
Timing]
{70.5, Null}
不过依旧还是小循环在外面节省时间

cn8888 发表于 2014-4-18 12:38:14

In:= Big = 10^8

Out= 100000000

In:= Timing]

Out= {134.719, Null}

In:= Timing]

Out= {140.438, Null}
有理由相信,当Big越来越大的时候,这个差距会越来越大,至少我看出了这个趋势

所以我想追究出幕后的原因

mathe 发表于 2014-4-18 19:24:46

差距并没有变大,140.438/134.719 和 70.5/66.734没有本质区别,前者反而更小。

mathe 发表于 2014-4-18 19:31:30

解释执行的代码效率不是很高,特别对于每个循环,每层结束它会需要一些特殊代码来处理,会产生一些额外时间。特别对于你这种空循环,这个时间的比例会显得很大。但是对于C/C++之类的编译后的代码,这种时间几乎不会存在
页: 1 [2] 3
查看完整版本: 为什么小循环里面套大循环比大循环里面套小循环要快?