- 注册时间
- 2009-2-12
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 22688
- 在线时间
- 小时
|
发表于 2018-1-4 14:47:32
|
显示全部楼层
^_^,先致歉.这种碰撞很难得,如能把东西讲透彻,对我也算是一种成长.
先容我对你的文字进行一一的拆解,思维的个体差异就表现在这字里行间.
我认为你的结论过于草率了,你甚至没有仔细的运行我的程序,甚至没有认真的的阅读我的代码,就妄下结论,原因有3
1. 如果你仔细地运行我的代码,就会发现AbsoluteTiming 和Timing得到的结果在误差范围内是相同的,就算不科学,和Timing的结果差别也不会太大,退1万步,就算误差增加很多倍,也不会导致mathematica的性能超过我的版本。
2. 如果你仔细的读过我的代码,就不会在3天前(25#)提出第二个建议,“所以我们最好是采取重复计算足够多的次数,拉开计算误差。这样才有效。”,我的代码本来就是这么做的,循环足够的的次数,直到总的运行时间超过1秒。
[背景解释]:我在发第一个帖子9#的时候,就马上开始下载你的测试代码了,而且是下载多次,如果你能在网站后台统计下载次数的话,应该能看到来源于至少3个IP的下载,都是我的机器.一个北京,一个上海,一个香港.统计起来至少5次.不过,我得承认,我当初确实是先发完帖子,再下载代码实际测试的,但测完之后我并没有对我9#的帖子做过任何修改,我的观点和态度也没有任何改变. 因为你是我非常佩服和仰望的几位前辈之一,所以我其实是很重视的.如果是"民科"级别的身份,我恐怕就因为根本不care,而视而不见了,这年头,90后都说自己老了,我这80后早已经没有了年轻时候的那种盛气凌人的干劲了,^O^.
[回到话题]:真正科学的误差分析理论其实是有一套严谨的计算套路的,我本科专业课有这一课,咱们这里先不较真下去了.在我的眼里,我所认为的"循环足够的的次数",这里的"足够多"的衡量标准就是"越多越好,但又不至于太多以至于影响了人的感官体验".换种说法,就是怎么滴就得搞个几十秒吧,
3. 我在28楼就提到,windows下的时间粒度是15.6毫秒,而且在37楼给出测试代码和结果,你则
a. 在37楼的点评中,在没有给出运行结果的情况下,直接否定。
b. 38楼你的测试结果中已经能够说明时间粒度是15.6毫秒,你依然没有给出怀疑和解释,直到2个半小时后,在我给出其他证据时,你才不得不承认。
[背景解释]: 在37#我的潜意识里并不是要否定你.我的跟评只是表明说15.6ms是平台实现相关的.其实我后来是编辑了一个长帖子的.本来是一个很好的补充,只是因为工作上的事情被中断了好几次,中断太多了就没了继续编辑的动力了,结果并没有发出来[不知道这种心境有没有人碰到过,我经常有].我的小姨子刚好休假在家,我让她打开了我的家用电脑,我用TeamViewer远程操作.特地嘱咐她[她不知道Linux是何物]怎么选择进入windows,而不是Ubuntu.我的windows用的少,所以Mathematica版本还是旧的11.1,[用旧版本不是我的风格].38#里贴出来只是说明15.625ms我在我自己的windows电脑上也得到了证实,但我并没有说我要承认什么.惭愧,编辑帖子其实是需要天时地利人和的,稍有打断,就容易断片.我到现在都不认为我需要承认什么.
[回到话题]: Mathematica是商业软件,文档里没有说明的东西是随时都可能会悄然发生变化的.文档里明确说了AbsoluteTiming 和Timing的时间粒度是平台相关的,具体值可以通过TimeUnit获取到.即便是你发现了Windows版本的Mathematica的TimeUnit不是声称的1/100s,而是15.625ms,也不能说明---既然Timing函数达不到你的精度要求,所以你只能用AbsoluteTiming函数----,个人认为这不应该是你选用AbsoluteTiming的合理理由.
[我的观点] 仅供参考:windwos下的Mathematica 的$TimeUnit =15.625ms,却不是软件所返回的1/100s,这里缺乏一个解释,我们暂时可以理解成是Mathematica的bug.根据你提供的链接,还有我自己的搜索,发现15.625ms这个问题其实不是Mathematica专有的.而是Windows操作系统层面的问题,很多Windows上开发软件的刷新率都下不了15.625ms,此时的我已经联想到Qt的QTimer的Windows版本曾经出现过的问题了,略过不表.当然你也可以认为这个是Mathematica的.但不管怎样,文档声明的东西就是可信的.API是可信的,而ABI不可信,这个你同意吧.咱们这里的问题就是这种性质.所以我需要承认什么呢?
我不否认wayne是优秀的软件工作者。但是,每个人都会犯错,尤其是在某方面有很大成绩时,可能会有先入为主的观点,进而影响判断能力,分析能力。
人们总是只看到自己希望看到的,对于非期望的结果,往往会忽视,这是一个普遍现象,历史上很多科学家在实验中首次发现新的现象,但却与伟大发明失之交臂,如
1. 约里奥.居里首先在实验中发现中子,但认为是r射线,因此错误了诺贝尔奖。
2. 德国化学家李比希在实验中发现碘,但这位化学家却认为是氯化碘,从而错过了碘元素的发现。
3. 卡文迪许比拉姆塞早100多年,就发现了空其中的氮气不是单一物质,而拉姆塞却能从2种氮中密度相差千分之一的线索中发现惰性气体。
[我的观点]我并没有认为我犯了什么错误了,也没觉得我有掩饰什么.一定要找找我是否存在什么过错,或者问题,我觉得可以说我有点"先入为主":
我是看到你在主题贴1楼的用词"可比现在最快软件Mathematica快2.8到8倍",对于这种用词,讲良心话,我比较排斥,视觉上的第一感受就是态度不够专业.就是觉得你不大可能写出公平的Mathematica/Maple测试代码,所以我犯了先评论[9#]后下载代码测试的毛病.但我想为自己,为所有人辩解一下,这种心理反应应该是很正常的呀,我们时时刻刻都在不假思索的给身边所有的人做基本的判断.你也会不假思索的认为我不可能对汇编指令了如指掌,这种心理跟我这里的心理是完全一样的嘛,^_^.当然你用"先入为主"这个词来形容这种心理行为也是可以的了.
[我的态度] liangbch是论坛里我特别敬佩和仰望的几位前辈之一,对,我是用敬佩和仰望来形容.我这人在现实生活中好像还没碰到让我折服的人的.
写了那么多口水之辞,咱们来点干货,欢迎碰撞拍砖,这个其实是我昨天就要发出来的:
对于跨编程语言[C/Mathematica/Maple],跨编程范式(指令式or函数式),跨工具[一个是C库,一个是软件系统]之间的性能对比测评,我觉得是件把自己推到舆论制高点,风口浪尖,是吃力不讨好的工作.做的好能彰显你的深度和广度还有严谨性,做的稍微有一丁点的不周到,会很容易被放大,乃至盖过你的亮点.不过,对于我来说,请放心了. |
|