计算机要向何处发展 #随笔杂记#

标签: 计算机 发展 随笔 | 发表时间:2011-08-29 06:20 | 作者:陶马文 张沈鹏
出处:http://toyuet.42qu.com/rss

/* 我关于计算机方面受到的最好的训练,恐怕是本科期间自己写的bootloader以及一个简陋到什么都不能做的操作系统,来到美国之后跟着一位很geeky的老师读了一个学期的Unix V6源代码,以及上个暑假接触到的Forth。我之前的专业是电子和计算机工程,所以在我的知识范畴中有很多CS覆盖不到的地方,比如如何用VHDL实现一个CPU(有一周时间真的在用机器码写程序),在缓存命中或者缓存失效的情况下一条指令要执行多少纳秒,要如何调整指令发射的顺序才能更好地优化流水线。头一个学期听了一门计算机原理的课程,老师在用Haskell讲编程语言原理。Haskell有很多奇怪的并且据说很优雅的特性,比如Lazy evaluation,比如monad等等。当讲到如何才能写出优雅的代码时,有同学问道不同的写法会不会有性能上的差异,老师很不屑地说,well,现在的计算机已经足够快了。我觉得这个假设有点难以接受,倒不是说这个假设有问题,因为电子计算机工程这个专业完全建立在另外一个对立的假设即“现在的计算机还不够快”才得以继续发展。如果说整个行业的发展都是建立在一两个随随便便做出的假设之上,想想觉得有点可笑啊。

问题是,那么计算机到底要多快?作为一个以后必定会成为一个计算机行业的从业人员,我到底要向哪个方向努力?努力到什么程度? */

1. 硬件的现状 计算机硬件已经分为了很多阵营,除了传统的x86 (包括x86_64) 架构,另外还有低端的和用于特定领域的市场的架构,这部分以RISC为主,主要是被ARM(Cortex系,用于智能手持设备、工业控制),TI(MSP430系,低功耗)以及MIPS处理器(24E/24K,知道的人不是很多,但是几乎垄断了所有的路由设备,性能和Cortex A系相近)。

x86架构十分可惜地浪费了很多计算资源。到现在为止除了Intel自己的编译器之外,很少有其他的处理器能够利用起指令集中其它的有效指令。比如现在流行的Intel处理器中应该包括SSE1~5,AVX,还有一些新近的指令集(AESNI and PCLMULQDQ,很诡异的名字,分别用于AES算法和无进位双64位乘法)在as和masm生成的HEX中,基本是找不到这些指令的代码的。这就意味着在我们现在CPU内的很多指令器件是闲置的。但是出于向前兼容的考虑,以及接受“不要重新发明轮子”的劝告,几乎没人在这个层次优化代码。当然,使用这些指令会不会产生其它问题,CPU出货之后,无论是intel还是使用CPU的人,就都不在意了。

关于RISC和CISC的区别,有一个简单的事实是,如Intel的CISC处理器,其实是由若干个RISC处理器构成的。CISC指令译码之后会被指派到不同的sub-RISC处理器中。RISC在处理某些问题时会体现出架构性优势,这就好像是general-purpose language和domain-specific language的区别一样。它们都在各个领域蓬勃发展,但不幸的是,真正愿意耐心了解CPU构造的人在整个计算机产业中还是太少了。

除了传统的处理器之外还有两个阵营正在慢慢变得牛逼起来,一个是GPU,一个是FPGA。

现在的GPU一般都支持ARB,但是这种类汇编语言并不是直接对GPU指令的映射。GPU的推广有一些问题,就是通常生产GPU的都是大厂商,大厂商自然只愿意和大厂商合作,所以GPU的开发平台基本都是在Windows下。这很让人头疼。暑假我曾试图从Mesa的源代码中找到OpenGL某些命令(如渲染、ModelView/Projection矩阵乘法)对应的GPU指令是什么,后来找到了很有趣的东西,在邮件列表里Intel负责为Linux开发驱动程序的小组领导人Dave Airlie曾经写信给Linus Torvalds讨论关于framebuffer驱动程序的问题,是否能够修改Kernel的驱动来让驱动程序更有效,然后被Torvalds义正言辞地拒绝了。于是Airlie的小组(包括Keith Packard等人)不得不写很多很恶心的胶合层代码,从TTM到GEM [我之前翻译过不少文章,但是都被我自己删掉了 :D ] 看过代码之后基本知道可以将显卡的汇编通过MMIO写入显卡里,但是这部分文档十分缺乏,所以显卡的计算资源(至少就现在来看)不是很容易利用。

FPGA在最近的五年发展可以说是异军突起,然而相比于传统的处理器平台,了解FPGA的人更少。FPGA现在已经能够做到实时重构电路,简单说就是它可以实现一个完全由硬件实现的解释器。Xilinx现在的全线产品都已经支持动态可重构,然而能够操纵它们的人确实不多。

一句话总结,就是硬件的计算资源浪费惊人。学校仓库里躺着一台台退下来的计算机,大概只用了不到两年就被淘汰,看着十分心疼。

2. 操作系统的现状 如果看一遍《The Art of UNIX Programming》,大概能看出来现在的操作系统发展已经违背了操作系统设计的初衷。操作系统本质上应该是一个软件工具集合,就好像是一个很全面的工具箱,里面全都是很小很顺手的小工具。你可以使用一些脚本将其组成适合解决你问题的工具,同时工具箱还提供了一种很牛的工具,就是可以用它锻造新的工具,如果你认为组合工具效率不够高,或者能够确保某一个环节可以用一种atomic的工具代替,那么就自己造一个。

操作系统产生于主机-客户端时代,后来提出了UNIX哲学,主张定制和裁剪操作系统,然后让计算机成为解决你问题的工具。在这个context之下,是没有所谓“应用程序”的说法的。应用程序是在像Mac OS或Windows这种桌面系统的语境下的词汇。桌面系统的特点是,你没有工具可以挑选,脚本的能力也非常有限。然而为了能让第三方开发者参与其中,这些操作系统保留了那个锻造新工具的工具,于是人们不得不用它制造出类似瑞士军刀一样的工具,比如Java。

3. 关于计算机的未来 很难具体地预测。但是有两件事可以肯定,x86在十年之内地位是无法撼动的。毕竟它是全球范围内计算机的基础设施。然而另外一方面,对特定环境下的计算机和电子设备的需求正在持续增长,这部分的市场会被如MIPS/ARM/MSP430系的平台所占据。不过这些平台在培训/开发/市场的循环还没有完全建立起来,需要花点时间。

4. 关于计算机从业人员的未来 计算机行业这两年吸纳了大量的从业人员,然而因为工作已经十分细化,导致使用不同编程语言的人,做网络/系统/硬件的人之间很难沟通。这个场景和圣经里Tower of Babel的故事很类似。因为沟通不畅,所以导致摩擦很严重,于是降低了开发效率。而企业维持开发效率的方法是进一步吸纳劳动力。此种情况下,如果不能确保持续的需求,那么市场的利润会被进一步摊薄。那些做着最具体的工作的人(尤其是做测试的),生活会更加辛苦。

5. 怎么办?[这只是我想到的对我自己的建议] 1) 不要随便被新技术和人们为新技术勾勒出的未来吸引。相反,有时间的话,要认真了解计算机的历史。譬如关于并发计算的问题,大概在上世纪六十年代就解决了(John Backus有一篇精彩绝伦的文章,同时也是他获得图灵奖时做的报告)。生活在新世纪的我们,事实上在不断借鉴故人的思想。 2) 不要把计算机开发看做一种工作。计算机发明出来本来是用来解决人类的问题的,然而现在看起来人类在逐渐变成计算机的外设。计算机本来应该让人更加自由,而不是更受限制。之所以现在出现这个局面,主要是人们没有了解计算机的真实面貌,而是杜撰了很多没必要的东西。我可能需要花点时间,去做大家都不屑去做的事情。 3) 学会为自己设计更好的工具。工欲善其事,必先利其器。如果不知道如何利其器恐怕还要现学。如果不会学恐怕还要学习如何学习。学习通常不会那么立竿见影,不妨沉下心来,日拱一卒,不期速成。

相关 [计算机 发展 随笔] 推荐:

计算机要向何处发展 #随笔杂记#

- 张沈鹏 - 陶马文 toyuet.42qu.com
/* 我关于计算机方面受到的最好的训练,恐怕是本科期间自己写的bootloader以及一个简陋到什么都不能做的操作系统,来到美国之后跟着一位很geeky的老师读了一个学期的Unix V6源代码,以及上个暑假接触到的Forth. 我之前的专业是电子和计算机工程,所以在我的知识范畴中有很多CS覆盖不到的地方,比如如何用VHDL实现一个CPU(有一周时间真的在用机器码写程序),在缓存命中或者缓存失效的情况下一条指令要执行多少纳秒,要如何调整指令发射的顺序才能更好地优化流水线.

【计算机组成与系统结构】计算机的发展与冯·诺依曼结构

- - 博客园_首页
上一篇文章写了第一台电子计算机的诞生过程,这片文章按着时间发展继续讲故事. 第一代计算机(20世纪40年代~50年代) - 电子管. 1944年8月,那时ENIAC还没完成,而此时莫齐利和埃克特便提出了下一台计算机EDVAC的建造计划. 和ENIAC一样,EDVAC也将用于美国军方的弹道计算. 到了1945年,后来被称为现代计算机之父的约翰·冯·诺依曼(John Von Neumann)作为技术顾问参与EDVAC的研究.

微软亚洲研究院二十年 见证中国计算机科学发展的二十年

- - TECH2IPO/创见
11 月 8 日,微软亚洲研究院今日举行建院二十周年庆典在北京举行,集中展示了微软亚洲研究院成立 20 年来走过的发展历程和取得的科研创新成果,以及产学研多方合作的最新进展. 北京大学校长郝平、清华大学校长邱勇,以及微软亚洲研究院来自全球学术界和产业界的众多合作伙伴、院友出席了庆典活动,共同庆贺微软亚洲研究院二十周年.

一些随笔

- Paladin - 猫星石 ~CafeNeko
想想最近也好久没有写东西了,就最近的一些事情稍微写一下吧. 小圆脸最近停播,真是让人百爪挠心. 且不说故事的结局,单单没有赌局这件事就让生活顿时没了盼头(你到底在关心什么. 学姐只是绝望了一小会儿就挂掉了,蓝毛非常悲剧的亲手抛弃了自己的希望黑化了,红毛殉情了(话说蓝毛你看你死了还有人为了坚持你的希望而死,你到底有多幸福.

计算机学科漫谈

- - 编程 - 编程语言 - ITeye博客
    PHP设计模式之观察者模式. 在这篇博文里,我想和大家聊一聊自己对计算机学科的理解. 当下本科阶段的计算机专业教学涉及计算机学科的方方面面,分类繁杂,有时可能令新人茫然不知所措. 那么,对计算机专业的学者来说,什么是最重要的呢. 我相信,一千个读者,一千个哈姆雷特,同样的,每个计算机的学习者都有自己对专业的一番认识.

精实创业随笔

- Wang Dong - 36氪
编者按:本文由著名VC Union Square Ventures的Fred Wilson撰写,是他读了《精实创业》后的一些感想,值得一读. 最近我一直在读Eric Ries的《精实创业》,这是一本非常不错的书. 如果你还没读过,我建议你们读一下. 对于我来说,精实创业不仅仅是一套方法,更是一种文化,这种文化应该要贯穿到公司团队处理各种事物的方方面面中去.

天才计算机程序员 -- fabrice bellard

- 山石 - 小美的部落格
这位老兄就是写jslinux的那位,它的主页是:. 上面有他的几个作品,包括qemu,ffmpeg,tcc等. 这个世界从来不缺天才,只缺乏利用天分坚持理想和信念不断创新的人,这些人用恒心和努力缔造一个又一个传奇. 法国人Fabrice Bellard 就是这样一个了不起的程序员. Fabrice Bellard1972年生于法国,曾就读于巴黎高等综合理工学院和法国电信研究院.

计算机爱好者 VS. 程序员

- kapster - 博客园新闻频道
  本文是从 Hackers vs. Coders 这篇文章翻译而来.   优秀的计算机爱好者具有一种无价的技能. 可作为一名程序员会跟计算机爱好者一样吗. 难道程序员跟那些不知道如何编码的计算机爱好者们相比,会在创造性上处于劣势吗.   下面的这个故事让我看清了他们之间的不同.   我最近被邀请在一个周末创业活动中做指导.

计算机的10大经典错误

- chris - 伯乐在线 -博客
10、DOS的Abort,Retry, Fail. 85年以后出生的人可能不知道DOS是什么了,只有那老家伙还知道这是什么. 我还记得当时的我对于Abort和Fail这两个选择还是比较清楚的, 不过,今天完全忘记了Abort和Fail的差别是什么. 这个出是DOS下的经常出现,也相当的经典,以至于在Wikepedia上都有专门的业面 Abort, Retry, Fail?.

当计算机算法控制世界

- 洞箫 - cnBeta.COM
感谢Bluehost中国的投递. BBC的报导称,看不见的 算法正在控制我们在数字世界里的互动,而糟糕的是我们正失 去对这些代码的控制. 从图书和电影推荐算法,到Facebook的朋友推荐和图像标记服务,到搜索引擎,算法已经渗透到了我们生活之中.