Jun 12 2008

Cuda技术革命一瞥

Published by shinjikun under 科学与科普 1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

背景

当前在老百姓眼中有关计算机技术的最时髦的词汇莫过于“多核”了。从前年起,“多核”这个东西就走进了家用的行列,现在购置的计算机基本上都是双核心或者是四核心的。由于“硅芯片主频的物理极限已经达到,CPU将来的发展即将走向多核方向”,得到的结果就是AMDIntel两家公司的竞争进入了进一步的白热化阶段。

其实一台计算机多个计算单元的现象很早就出现了。古代有所谓的“解霸卡”,这是一个专门为视频解压处理而设计的处理器,原理基本就是一个为浮点优化的CPU。把视频解压的工作分给解霸卡,而CPU则留下进行更重要的工作。之后Intel推出了MMX指令集,这种卡旋即消失。后来著名的就是Voodoo卡(以及同时代的各类3D加速卡),这是现代显卡的雏形。他把浮点计算分离出来,并且直接加入了贴图和灯光的特性,使得3D游戏开始普及。伴随着DirectX技术的成熟,就产生了现代显卡。现代显卡指的是支持一定的渲染标准的显卡,如OpenGL标准、DirectX标准等。通过这种设计,程序员可以方便的通过OpenGLDirectX接口来编制程序,而不需要考虑具体的硬件类型。这是一个跨时代的突破。

在普通的情况下用显卡进行渲染,速度要比用普通的CPU计算快上几千倍,而且图像大小(像素数)越大,加速的比例就越大。这是显卡的自身特性造成的。显卡当中,相当于封装了成百上千个“核心”,所有的“核心”可以一起处理。由于GPU的计算是一种特殊的计算任务,即所计算的每一个像素之间不需要(或者用方法使它不需要)考虑先后顺序,那么如果有了上百万个线程,就可以让所有的像素同时渲染,这样所有的像素就可以在一个像素的时间内计算完成。而实际上在CPU上的运算通常是做了一件才能再做一件,这样就算有一万个核心,在前一个结果计算出来之前,其他的线程只能傻傻等待,这就相当于一个核心了,因此CPU多核心的发展要比GPU慢得多。由于两者计算的目的不同,造成他们的构架不同。因此显卡与CPU的计算任务通常是分离的。

实际上,假如你知道你现在的将要做的计算是可以高度并行的密集型计算,那么就应该使用GPU来进行运算。然而一般的显卡却没有这样的功能,它通常只能处理矩阵、贴图、采样等等的已经有实际图形学意义的问题,而对其他的运算,只能转换成图形运算才能进行。利用GPU进行通用目的计算(General Purpose Computing)的想法很早就有了,成熟的产品有GPGPU语言等。我曾经历尽千辛万苦编写了一份在显卡上进行FFT计算的程序,其代码量之庞大简直是骇人听闻。普通的FFT150行以内就可以完成,而GPUFFT计算则需要至少千行(利用GPGPU语言的话代码量会少很多,但是相对于FFT程序,这个语言产品本身的空间就不小)。之所以有如此之多的代码量,是因为需要将各种数据通过一个图形接口(一般是扩展的OpenGL)发送到GPU,计算之后,再通过这个图形接口接收结果。

另外,程序员从娘胎里带出来的“一根筋”(单线程,算完一个再用结果来算另一个)的思维习惯是非常不容易改变的。除非是像渲染 这种明显就应该是并行运行的东西,其他的东西找出成熟的并行算法非常困难。这就意味着,多核的潜力还必须得到进一步的开发。当然有一个简单的方法就是运行很多的进程,可以以此把CPU塞满。

原理

nVidia公司一直以来是显卡界的两位登峰造极者(nVidiaATI,后者前些日子与AMD公司合并为AMD&ATI公司) 之中更时尚的一位。2006118日,nVidia抛出了他们的通用目的GPU计算的方案CUDA——Compute Unified Device Architecture 即计算统一的设备架构。这是业界第一个可以用C语言进行编程的通用目GPU计算解决方案。实际上走在了时间的前头。

CUDA的原理基本如下:

把 大量的线程(这个概念与一般的不同,他是更轻量级的,更快速的)分布在一个个的“块”中。每个块共享一段指令和数据,而块中的每一个线程只能访问到本块的 数据以及外层的共享数据,访问不到块之间的数据。外部的驱动程序负责把所有的数据和指令拷贝到块中,然后所有的线程开始同时运行。当最后一个线程结束后运 行结束。

这样,指令也相同,数据也相同,因此既不会有换页问题,也没有缓存刷新问题(考虑到实际上GPU是不具备与内存速度不同的缓存的,这个速度的提升是靠多点同时访问和显卡版内的超大带宽得到的——总之就是比那么多个CPU要快啦!囧)。仅仅这样,我们就可以得到前所未有的强大速度提升,这靠的是无以伦比的超大线程数!

在编程方面,如果我们想向一个块中写入指令,只需要像C/C++一样编写一个函数,然后用CUDA的简写方法进行调用(可以自由设置块数和线程数)。之后CUDA编译器nvcc自动将代码编译成CPU代码和GPU代码,并让GPU代码可以自动的发送到适当的快中。期间的一切硬件问题程序员都不需要管,结果就是写一个CUDA程序和写一个普通的C程序一样方便。

我现在的显卡的参数是这样的(不是什么高端的显卡,每个人的显卡都有类似的能力):14个多核处理器,每个多核理器112个核心,每个核心65536*65536*1个格点(这个不能达到最大值。实际使用中取决于显卡的当前状态),每个格点有512*512*64块,每块同时可以运行512个线程(同时每块具有8k个寄存器)。可以粗略计算一下,就算我们只用到了一个格点,我们就可以得到85亿个线程。这就是说只要我们的显存(才十亿字节)足够,那么我们就可以想开多少个线程就开多少个线程。

根据官方发布的资料,如果是更高端的Tesla卡的话,可以每秒进行500G次浮点运算。CPU浮点运算平均大约消耗400周期的话,那么CPU每秒可以进行2*3G/400=0.15G次浮点运算。相比之下大约能快3000倍左右。但是在这种构架只下,最花费时间的操作不再是运算,而是把指令和数据从内存中拷贝到显存中的过程。现在的GPU(PCI-E)带宽在4G/s左右,这就是我们每毫秒可以把4百万字节数据从内存调入到显卡中,这对于大部分的应用而言可能足够了,但是如果需要更高端的计算性能,恐怕只有等待显卡的插槽更新换代了。

应用

我有幸参加了CUDA技术的创始人之一David Kirk博士在清华进行的讲座。讲座中提到了CUDA从开始到现在不足两年的时间里的大量应用。实际上有些是令人比较失望的——在一般的状况下,CUDA的运行速度只达到了CPU的一百倍到一千倍左右,并没有达到那么夸张的地步——不过这依然足够改变人们的工作方式了。

  • 神经网络模拟。有一个人建立了一个巨大的神经网络,用来模拟真实生物的神经活动。众所周知,每个神经细胞都可以当作是并行运行的,因此这个模型非常适用于CUDA
  • 股票分析软件。它是以复杂计算为基础,进行整个美国股市的实时分析的一个软件。由于股票之间的情况异常复杂,造成经济学上的公式无法准确预测时间稍微一点的大盘情况。然而,有了CUDA,我们就可以在几百毫秒之内计算出当前的全美的大盘走势,这通常将花费数分钟时间,等我们得到结果之后,它已经没用了。CUDA让股票分析软件从不可能成为了可能。
  • 分子流体模拟。这是中科院物理所的一位老师做的。他就是把分子的范德化力(其模型相对复杂)考虑进去。他制作了一个包含几亿个分子水滴,然后进行 模拟。由于每个水滴之间的范德华力只在周围的范围内有效,因此可以把每个分子的受力状况看做是不相干的或弱相干的。这也很适于CUDA
  • 地震研究与模拟。地震研究方面的一个重要问题就是如何快速的处理地震数据。这让我想起了当时MRI刚被发明的时候,虽然有了实验数据,但是算不出结果来。动用了当时最先进的军用超级计算机才得到一张图像。现在的医学器械里,MRI是太常见的东西了。这说明将来我们有可能处理更多的地震数据,解开地震规律之谜。

展望

CUDA是一项以提高计算性能为目的的新兴技术,但是其影响将远远超出“计算”的范围。GPGPU是一个神奇的事物,因为如果处理得好的话,那么可以几千倍的打破摩尔定律,而跳跃到下一个时代。GPGPU的问题就在于编程的痛苦性太高,而CUDA就是为此目的而设计。就如同David Kirk所言,计算性能提高十倍会使现在的工具变得很方便,计算性能提高一百倍会使现在的软件更新换代。而计算性能提高一千倍,则会彻底改变人们的工作方式。曾经不可能的慢慢变为可能。我们期待着CUDA技术以及未来的新的GPGPU技术能够带领我们(程序员和用户)走向新的时代!

目前有6条评论

Jun 11 2008

终于回来了

Published by shinjikun under 未分类 1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

毕业设计就要结束了,剩下的就是一些文书的工作,现在似乎已经没有那么忙了。先是准备考研初试和复试,然后闷头学习数据库和Php,再后来一直在搞毕设。六七个月可谓是与世隔绝。托大家的福,我也考上研了,现在终于是解放了。

PS:前两天看到了方舟子了,他在我们学校做有关学术规范的讲座,可惜不是批判伪科学的。为了防止闲杂人等混入(难道是说旁边中医学院的孩子们?),他没做任何宣传,只在我们学校的网站上贴了一个小通知。

目前有7条评论

Dec 26 2007

致刘太二老

Published by shinjikun under 学术打假 1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5 out of 5)
Loading ... Loading ...

刘先生、太先生:

我认为您二位的争论似乎有点出圈了。总感觉这场学术之争慢慢在变成私人恩怨,从坚持自己观点变成打击对方个人(及其支持者)。个人认为学术讨论应该本着客观实际的原则,讨论问题应当集中,针对。牵扯无关的(比如明显对问题的结论没有影响的)问题有违科学精神,是对时间、精力、资源的浪费。

在写作风格这个问题上,本人认为虽然不应该有什么限制,但总应该在一个友好气氛的讨论框架之内。如若把对方的错误,一味的归咎于对方的与学术水平无关的方面,这是非常不友好的。
至于如果网友说些废话,我觉得大可不必动干戈,因为其素质暴露无遗,大家心中自有判断。就像方先生一样,扯淡的从来不理,如果成心捣乱就直接封杀。

就您二位所讨论的学术问题而言,我一直很奇怪的一点是,您二位讨论的到底是什么啊?本人站在公立的角度,我认为您两位的论点根本没有什么矛盾,只是定义有区别。一个是哲学的狭义的定义,一个是哲学的广义的定义,其中的分界线是,哲学的一部分概念与观念,算不算“哲学”。太先生认为不算,刘先生认为算,这就是基本矛盾所在。如我之前所说:“废”是废所有的跟哲学有关或使用了哲学概念的东西;还是部分的废、部分的留、部分的改进,这个本是没有什么争议的。显然是要去芜存菁,保留科学的哲学基本观点,去除意识形态至上的思想大粪。因此不需要再在此问题上争论,该废什么不该废什么也自会明辨。但是我看到,太先生和刘先生都正在向略微绝对的方向发展。如果果真变成了偏执的讨论,干脆大家都不要辨了,猜拳好了——因为两者同样的不理性,没有质的差异。这只是“如果”。

另外,还有一个“哲学的残留指导价值”的问题。我们先必须明确一点。那就是科学保留的是辩证唯物主义哲学的最最基础的世界观、认识论、方法论。其他的并没有保留。例如唯物史观认为人的意识就是人的社会意识,这个恐怕在科学中很难有什么指导意义,似乎并不十分正确。所以说,哲学对科学只有残留的指导价值。原则上讲,广泛意义上的哲学是不可能废的。原因是它是“系统的世界观和方法论”。这个是必不可少的。然而狭义的哲学大多是有害的,那就是可以称为“主义哲学”或者“教条哲学”的哲学,尤其是这些哲学具有一定的艺术性,又欣赏价值,所以就更具迷惑性。而“废”则谈不上,应该说是“消除其指导地位”——他们显然作为一种艺术、文化来讲,是有一定价值的,如果说主义哲学家居然来指导科研,那简直是痴人说梦。就如方先生文章所言。

话已经说得很明白,我的意思就是希望二位能消消气,正确的对待这个学术问题,无论如何,科学的发展都是我们大家共同的追求目标。——争吵不解决问题,他只会使真理淹死在口水之中。

目前有91条评论

Dec 03 2007

肖志军:闹剧的受害者

Published by shinjikun under 年轻气盛 1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

对于肖志军事件,本人的看法是:这又是媒体报道失实引发的一场闹剧。
以下是网上对此事件的概要:

1120日,湖南籍孕妇李丽云,怀孕9个月,因咳嗽、发热10天前去北京市济润中西医诊所就医,被告知病情严重,须去大医院治疗。
1121日,1450分,李丽云和其丈夫肖志军一起来到朝阳医院京西院区呼吸内科门诊就诊,因病情严重,医院建议剖宫产,但肖志军拒绝签字,并写下拒绝剖腹产手术生孩子,后果自负的字样,手术没有进行。1925分,李丽云死亡。
1122日,肖志军先后多次来到朝阳医院京西院区,并向到场媒体宣称:医院不给治啊,不给用药啊!
1123日,李丽云母亲来到北京,称:女儿三年前离家出走,不知已结婚的消息。对于肖志军只想杀了他
1124日,李丽云母亲写了一份起诉肖志军和朝阳医院京西院区的起诉书。
1125日,肖志军首次认错:这两天我一直在想,毕竟是人命呀,我不签字,人死了,我还是有责任的!
1126日,李丽云父亲赶到北京,认为女儿的死主要责任是医院,肖志军只是导火索。准备起诉医院和肖志军。

腾讯网当天就建立了一个大板块,方便网民讨论此事件。腾讯网上的投票结果:认为医院有责任的1/5,认为死者丈夫有责任的4/5。之后几乎所有大网站对此都有评论。在电视中也有大肆报道,开始全国性的大讨论。
在第一天的时候,我们假设下面的事实成立:

1.该手术是挽救生命的必要关键手术,但该手术具有危险性
2.该病人没有决策能力,但有意识健全家属在场
3.该决策人不信任医院,认为只是感冒
4.医院在此事件中尽到了告知的责任
5.该决策人主动拒绝手术

这是一般媒体报道的大体内容。各个媒体之间有出入,但是基本没有什么原则性的不同。
在这种情况下,我们可以断定,医院基本没有责任。当时很多人认为医院没有尽到救死扶伤的义务。这显然是没有道理的——因为手术具有危险性,医院怎么可能擅自决定? 根据中国的法律(实际上世界各国在此问题上基本一致)医院在12两条成立的情况下,必须将手术的决定权留给病人家属。这是对人权尊重的做法。另外如果我们参考国外,在美国的某些州,存在一种合法的称为DNR的协议,即拒绝抢救协议。病人如果签署该协议,那么医院不得以任何理由对病人进行抢救。这也就是消极的安乐死协议——该协议是很难签署的,要求超多,因为这个协议原则上否认了任何将来可能发生的明确能够拯救病人的情况,只有在有绝对把握该病人没有医治可能性时,才能签署——这反映了对人权的尊重。显然不具有危险性并且痛苦小的手术是不用签此书的(另外在国外几乎所有化验都要签署同意书,这主要出于病人隐私权保护的考虑)。这一点恐怕毋庸置疑,但对于此决策人,我想过一段时间恐怕民众就会明白事情应该是什么样的了。当时在网上的报道中的主要焦点是:第一,肖志军的想法到底是什么,才造成他据签的结果;第二,医院在病人不签字的时候是不是应该进行手术?
但是后来的发展出乎意料。

第二天,很多媒体在发出了另外两个问题:

6.该决策人担心无法生二胎而拒绝签字
7.该决策人担心无法支付医药费而拒绝签字

好了,现在就引出了另一番讨论。
由于6,那么我们可以得到的结论是:由于此人处于非法行为的考虑直接致使病人死亡,那么应该负过失杀人的责任
如果是7成立,那么又有讨论了,一是这个男人怎么为了钱连老婆孩子的命都不要呢?二是区区一个剖腹产,为什么医院要收这么多钱?老百姓看病难啊!
第三天,就有了如下的理论:

8.该决策人似乎有意不签署同意书,故意造成病人死亡的严重后果,以次敲诈医院。

支持次理论的证据就是一位在场记者的口述(这恐怕是这事件之所以产生巨大问题的重要原因)。在采访该记者时,她说:我们把笔递给他,但是他好像握不住笔一样就是不接”“我们都说我们大伙给你医疗费,钱不是什么问题,救人要紧,但是他就是不要”“医生一说他老婆死了,他就上来说医生没有抢救等等。这样以来,事情的矛头基本就是完全指向这个男人了。如果他的目的真是如此,那么他几乎就是谋杀加上诈骗了。
同日,媒体又宣布,这两个人,根本没有结婚。此人又说,他没有结婚,他怕担责任。这就是:

9.决策人实属谎冒,其实是准家属,。
10.准家属为了不承担某种责任而拒签同意书,导致病人死亡

事情变得更乱了。我当时有一个疑问:他到底是在避免承担什么责任呢?真的就只是如此的愚昧吗,连什么是他要承担的责任都完全无概念?如果真像1所说,该手术是必要的,那么他现在拒绝手术就是杀人啊。这是一个疑点,恐怕当时很多有识之士都感到困惑了吧?
到此,我们顺一下思路,根据主流媒体的说法:

说法1.病人到了危急的时候,不做手术无法活命,但是做了手术也有危险
说法2.医院向非法决策人尽了告知的责任
说法3.“非法决策人谎称自己为家属,拒绝医院救人
说法4.“非法决策人在病人死亡后指责医院没有尽到救治责任 说法5.医院根据非法决策人的决策,不对病人进行治疗

至此,网上就已出现了无数的评论了:
有人认为是医疗体制的问题,就算病人没有同意,也应该动手术。这种想法大家不以为然。
有人认为该非法决策人有决策不当的责任,所以是他太愚昧、太不听劝。
有人认为该非法决策人是故意杀人并蓄意诈骗,因此引该负刑事责任。
有人认为该非法决策人是因为生活窘迫,不得已而为之,责任在社会福利。
有人认为该非法决策人就算贫困,也不能这样不负责任吧?起码是两条人命。
有人说,唉这不就是社会分化的问题吗?
 
这下可热闹了。不仅主流媒体,连各种非娱乐性质的杂志、网站、电视台也介入此事,在这肖志军大潮中分了一杯羹。

请注意,当且仅当说法1到说法5每一条都成立,这些讨论才算是关于这个事件的讨论。而笔者看到,一切的说法,在1128日北京卫生局的通报中通通变成了废话。该通报明确指出:肖志军未签字并非孕妇直接死因。为什么呢?因为病人根本不是死于难产!

那病人是死于什么呢?是死于重症肺炎,尔后导致呼吸衰竭和心脏衰竭。那剖腹产是要干嘛?主要是为了救胎儿,并且减轻了病人的心脏负担。也就是说,剖腹产手术根本就不是什么救命手术”——虽然这个手术对病人有帮助,但是病人无论是否进行该手术,都基本是回天乏术了。

我们回来看几个问题:
1.   为什么从来没有报道说孕妇要生孩子,而一直被报道说是我们是因为感冒来的,不是要生孩子?现在就明白了,因为孕妇来医院,真的就是因为他以为的感冒而来,并非生孩子。
2.   为什么他说不签字是怕负责任?什么样的责任?现在也明白了——他认为无论如何老婆都要死了,那岂不是要独自养这私生子一辈子?那这样想,他的决定和单纯的堕胎,恐怕没有实质区别。
3.   为什么大家说捐钱他也无动于衷?那就更明白了,因为根本就不是钱的问题!

之前我们的讨论,都是基于一个最简单的原则,那就是:所有报道都提到的,就是真实的。就算少数媒体报道了有关肖志军的涉嫌诈骗的问题,无论这些是否真实,也依然不牵扯大家所讨论大部分的问题——而其中的绝大部分,矛头直指肖志军本人,或对社会制度的进行指责。

而现在,北京卫生局澄清了一切!那大家不久白忙活了?
果然,不出所料,大家认为北京卫生局的通报是造假!
似乎就是说,北京卫生局造假的可能性,比媒体还要大!
——
大家注意:北京市卫生局的通报根本不是什么免责声明,他们本来就没有责任;他们是在告诉大众:这个医疗事件中,要告他们的肖志军也没有直接责任!

我想这样大家就明白了吧,这是什么级别的一个闹剧:
1.     病人李丽云本无救治可能,但是其准丈夫肖志军不愿做单身父亲,因此不想救这个还没出生的胎儿。
2.     在危急己情况下,某记者私自认定他是因为钱的问题不想救他老婆。于是大家给他解决问题,可他却不接受,可是以他的口才以及心情,恐怕难以跟人解释这件事有多复杂吧——不手术,大人小孩都会死;手术,小孩有一点点可能会活,而大人也只有微弱的生存率提升,而他要独自照顾这个孩子一生,以及负担一个死者的几千元手术费用。
3.     没有人考虑他等待妻子和孩子死亡的心理状态。
4.     “不给用药啊”,恐怕是媒体断章取义——如果他这样说,那他却是不对——但是这不妨碍此事件中他无责任的事实的成立。根据他当时的状态,恐怕也不必成为讨论的重点。
5.     媒体又抓到了一个机会,大肆批判万恶的社会制度,万恶的医疗制度。
6.     网民又抓到了一个骂街的机会。

于是,便有了这几天的这些闹剧般讨论。经过媒体的渲染,我们看到了一边倒的局面。肖志军本人到的人品如何,我们无从判断。但是这件事情的伤害,恐怕非一般人所能承受。我想起了著名的美国电影《Mad City》。这到底是谁更悲哀?
  

 

只有一条评论

Dec 01 2007

两本《编译原理》何其相似!

Published by shinjikun under 未分类 1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

中科院研究生入学考试所指定的编译原理课程参考书是1989年12月第一版的,中国科技大学出版社出版的《编译原理》一书,作者为陈意云。在第一版的前言中说,“本书是根据国外的一些专著和论文编写的,它不仅包含了最经典、最广泛应用的基本编译技术,还反映了直至80年代的一些重要的新成果,这是本书区别于其他有关这方面的著作的显著特点。”

但是其所谓“根据国外的一些专著和论文编写的”,其实是整章照抄编译原理学科的最著名著作,被称为“龙书”的Compiler: Principles, Techniques and Tools(编译器:原理、技巧和工具)。该书出版于1986年,作者Alfred V. Aho、Jeffery D. Ullman和Ravi Sethi。

该书无论是书中的几乎所有的示例、图表甚至几乎所有的文字都是翻译自此书。该书除原书第二章被删节掉外,几乎所有都是原书的直接抄袭或者节选。陈书第10章和第11章并非参照龙书,所写的是龙书所未涉及的内容。

下面把第二章摘抄一小部分,请各位了解我所谓“整章照抄”是什么意思:

第二章 词法分析

开篇:

陈书:构造词法分析器的一种简单方法是建立描述源语言记号结构的图。然后手工翻译这种图成为识别记号的程序。这种方法可以产生高效的词法分析器。
实现词法分析器的技术也可以用于其他方面,如查询语言和情报检索系统……(以下所有内容为抄袭)

龙书:This chapter deals with techniques for specifying and implementing lexical analyzers.  A simple way to build a lexical analyzer is to construct a diagram that illustrates the structure of the tokens of the source language, and then to hand-translate the structure of the diagram into a program for finding tokens. Efficient lexical analyzers can be produced in this manner.(本章讨论特定实现词法分析器的实现技巧,构造词法分析器的一种简单方法是构建描述源语言记号结构的图表。然后将此图表的结构手工翻译成用以识别记号的程序。这种方法可以产生高效的词法分析器。)
The techniques used to implement lexical analyzers can also be applied to other areas such as query languages and information retrieval system. …(实现词法分析器的技术也可以应用于其他领域,例如查询语言中和信息(陈书把information 翻译成“情报”)检索系统)

紧接着:

陈书:词法分析是编译的第一阶段,它主要任务是读输入字符流,产生于语法分析的记号序列。概括于图2.1(图表为抄袭)中的相互作用一般是通过把词法分析其作为语法分析器的一个子程序来实现的。(以下此节所有内容为抄袭)

龙书:The lexical analyzer is the first phase of a compiler. It’s main task is to read the input characters and produce as output a sequence of tokens that the parser uses for syntax analysis.This interaction, summarized schematically in Fig 3.1, is commonly implemented by making the lexical analyzer be a subroutine or a coroutine of the parser.(词法分析器是编译器的第一个部分,它主要任务是读输入字符并产生于语法分析器的记号序列。这个交互作用,示意性地概括为图3.1。通常用构造一个作为子例程或协例程的词法分析器的方法来实现。)

紧接着:2.1.1分离词法分析器的理由,龙书为Issues in Lexical Analysis(词法分析要解决的问题),然而内容却一摸一样。之后所有节、示例均来自龙书。

另外,陈书还有翻译的问题。由于其对原书进行了删节,因此常常因为思维不连贯而影响理解。例如第四章第三节 L属性定义,第一句:“当在分析过程中进行翻译时,属性的计算次序受分析方法所限定的分析树节点建立次序的约束”这句话何其奇妙!本人读了三遍终于读懂:当在分析过程中进行翻译时,属性的计算次序(((受分析方法所限定)的分析树)(的)节点)(的)建立次序)的约束。原书中是这样描述的:When translation takes place during parsing, the order of evaluation of attributes is linked to the order in which nodes of a parse tree are “created” by the parsing method.可以翻译为:在分析的翻译过程发生时,属性的产生次序与节点的次序相关(linked不是“约束”),而节点的次序决定于分析过程(这个词有“方法”的意思,但是此处指的是之前的建立语法树的“过程”,而非建立语法树的方法。虽然“过程”一词在牵扯到对象时可以叫做“方法”,但此处显然不妥)“创建”的分析树。

陈书抄袭的数章,这里不能穷尽。请各位亲身体会两本书的异同。

 

附:陈意云个人主页:http://staff2.ustc.edu.cn/~yiyun/

其中称该书为“安徽省图书一等奖”

目前有19条评论

Nov 30 2007

真忙

Published by shinjikun under 年轻气盛 1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

考试时间

距离2008年研究生入学考试

还剩 50天

看来我只能到了1月18号以后再管这个博了。偶尔喉两嗓子,其他时候必须多多读书,多多学习。

祝福我把!

目前有5条评论

Nov 29 2007

我与基督教的失之交臂

Published by shinjikun under 年轻气盛 1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

谢谢大家,我把百花园里的刚发的文章拿过来做第一篇文章吧。

我,作为一个坚定不移的唯物主义者,知道——不仅是相信——一切的宗教都是没有道理的。

他是一个大胖子,哈尔滨人,歌唱的极好,在我所在的合唱团里,每次排练都为我们练声。我可以毫不夸张地说,在北方的歌唱家中,就唱功而言他起码可以排在前五十。但是他又有很多的坏毛病阻止着他的前进,比如,他是个目中无人、没有教养的烟鬼,任何人在他眼里都是可以鄙视的,而他却永远是对的。他挥霍无度,四处借钱,自然是从来不还。他虽然是个大胖子,却是我们学校影视学院学表演的,可想而知他的“专业课”将会是什么样子。最终他每天无所事事,导致他不仅仅目中无人,从不听劝,还参与过斗殴的事件——跟学生打就算了,连老师也不放过,这就惹祸上身了。终于在去年年初,他所有课程不及格,被学校开除了——在他离开的时候,他也没有觉得自己有任何不对的地方,只觉得是学院在整他,跟他过不去。就这么悻悻地走了。

对这种人,恐怕没有任何一个会同情。我也不会。我跟他聊过,说你也应该吸取教训,人都需要尊重,不尊重别人的下场永远会很惨痛。自然他是不会听的。我想他是无可救药了——一个贼可以吸取教训,一个杀人犯可以吸取教训,一个国家可以吸取教训,甚至一条狗都可以吸取教训,而一个不吸取教训的人呢?简直就是从逻辑上的无可救药。

然而一年以后他又回来了,就在短短一年的时间里,变成了一个道德上律己甚严的好人。这是基督教的力量。据他说,他回来是为了文凭,好对得起他的长辈。但是其实不仅仅如此,他还到处传教。

我从来对传教者和传教行为嗤之以鼻,认为都是愚昧的举动。然而这回却不同了。他虽然跟我讲的都是圣经的故事,基督教的教义,但是我看到的,则是这个人举止的巨大变化。简直是一个震惊。

这个人,先是把周围的人的债还了,然后邀请以前合唱团的同志们吃饭,很礼貌的向大家传授基督教的知识。说实话,很多的问题是我第一次听说。亚当夏娃,诺亚方舟,摩西的预言,圣婴降临,犹大的背叛,基督受难,这些故事都是耳熟能详,可是我们实在是没有机会去了解它们对一个基督徒(基督徒不认为自己是“教徒”。出于尊重,我也不叫他们教徒,而按照他们自己的说法叫“基督徒”),来说究竟有多重要。根据基督教观点,圣经讲的是耶稣基督为了拯救世人而自愿作为“替罪羔羊”被钉上十字架的故事,旧约部分讲人类的罪恶,引向救世主的诞生,新约部分讲耶稣基督拯救世人。说实话,虽然我知道这些都是无稽之谈,但是依然会感动——就如同你看到一部伤感的电影会感动一样,只不过更强烈,更有意义。

听过他的传教,我明白他是个傻瓜,但是我觉得他很伟大。他是真的这样笃信不疑,他相信上帝在看着他的一举一动,在他生前的所作所为必须是顺应着道德标准的:谦逊,诚实,正义,节俭,甚至守节。这样,他才能得到真正的拯救,并且他有责任把这份拯救惠及周围的每一个人,每一个有可能顺应耶稣基督的教诲的人,无论(我们看来的)无罪的人还是有罪的人——这些明明是无稽之谈的东西,听过依然让人很感动!

后来的一段时间里,我每天坚持听他讲道。虽然他说的远不至于使我相信,但却改变着我的行为。他送给了我一本圣经,还说不要去教堂,那里没有神,因为中国是三自教会管理的体系,政府制约着教堂的行为(历史上其实宗教和政治的关系都很微妙吧!),一定要去家庭教会。他后来还时不时发短信告诉我,哪里什么时候有基督徒聚会等等。

简单的来说,中国生长的人,大多是宗教盲。即既不知宗教,也不信宗教,甚至无目的的打击宗教,脑中仅仅有自以为科学的观念,除此之外什么也没有,以至于很多人无法分辨什么是宗教,什么是歪理邪说,什么是邪教。这是我国的 唯物主义哲学指导国家发展 的奇怪性质决定的。当然我也体会到了基督教(或者说凡是宗教)的不正确的一面,比如不救人(传道)就是害人,女人在男人的从属地位,禁止同性恋以及任何不以生育为目的的性行为等等(一个基督徒朋友说他从不手淫)。

胖子(从一开始我们就这么叫他)待了一段时间,没有拿到文凭,回到了哈尔滨。但是他的匈牙利基督教的朋友由于他的天赋资助他到匈牙利学习声乐和指挥,他们希望他能够成为一个音乐牧师——如果这些朋友不是基督徒,那么我们基本断定是在骗他,但是它们却是——这种狂热使他们确定无疑地诚实!

我们来看看国内的问题,所谓道德沦丧:我们真的是因为经济过度发展,或者国外的精神糟粕袭击才变得如此的无道德可言吗?我想宗教的缺失发挥着重大的作用。朗咸平说“美国就是一帮聪明的要命的人领导一帮傻子”,我们看到,我们永远不能强求群众都通过理性的思维拥有的良好道德,世界各个国家都做不到,但是(导向正确的)宗教就是道德败坏的良好预防针。

我后来的痛苦是非常让我震惊的。一段时间里我说我信基督教。我当时从道德层面上讲这个话,但周围的人并不理解我的想法,认为我被他“污染了”,他们说“你以前根本不信这些的,他跟你说了这些,你就信了?”,搞得我好像是个立场不坚定的人。我只好从头解释,这不是相信不相信的问题,而是道德约束的问题云云——如果社会真的明白,恐怕既不会有邪教问题,也不会有道德沦丧的问题了。

我是一个坚定不移的唯物主义者,我知道一切的宗教都是没有道理的——同时我知道,一些宗教是伟大的、必须的。不承认这些的人,没有明白宗教的意义。

目前有21条评论