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++之类的编译后的代码,这种时间几乎不会存在