【计算机与社会知识】从一到多

来源:互联网 发布:软件测试培训学费 编辑:程序博客网 时间:2024/06/05 11:56

打算写这一系列文章已经很久了,因为本身是一名计算机体系结构方向的学生,学了计算机,感觉大家最后都在搞应用,但实际上专注于计算机的几乎没了,个人觉得这是悲哀的事儿,有5%的学生能静下心来看看计算机本身就实属不易了,更别说研究,我算是处在一个边缘的,一方面需要搞工程化,另一方面很喜欢计算机本身发展,所以现在作为一个学生来谈谈计算机的发展,这是第一篇,我希望这是结合社会发展的长期作品。内有不妥、不够技术含量的东西,希望大家指出。

计算机当前发展的主流是众核以及大型并行,其实对计算机外界来说,这样很好理解,因为我们需要更多的工具,而且希望他们是互联的,众核在存储级互联、并行在网络级互联。但其实就计算机本身来说,这的确是个没有办法的办法。

1965年,摩尔定律被Intel工程师摩尔提出,这个定律也在计算机发展上起到了最绝对的硬软件选择的作用,一度创造了Intel传奇,但随着技术本身限制,可以看到,这个定律在走向一个绝路,但由于摩尔定律和存储程序思想,我们创造出了一套的理论基础,因为它们,有了现在的计算机学习理论,从组成原理,到算法。

其实摩尔定律和存储程序思想是对绝配,他们的基础问题就是冯氏计算机体系结构(即存储程序)如何构建。存储程序指的是程序顺序执行,数据随指令寻址方式而得到,从计算机分类的角度(用数据流和指令流分类方式,Flynn分类法),我们最容易理解的就是SISD,也就是单指令流单数据流,这也是为什么C语言和汇编能达到高性能的原因,因为他们将SISD发挥到了极致,也就是和机器语言是等程度的,只不过是让我们对分支跳转有更方便的处理方式。我们接受的最传统的计算机知识也就是这样的,所以觉得C语言写东西难,就只能说是算法难,其本身并不难理解,难在应用。

我们本文现在到了SISD时代了,这个时代的特点就是内存管理几乎全部由程序员来管理,好处是我们根据这样的存储程序思想发展了很多算法,且都是底层语言完全可以实现的,这个时候我们就需要加速,用硬件进行加速,这就是Intel在过去飞腾时代的方法,但这绝对不只是Intel的核心,毕竟硬件是由极限的,不能违反物理规律,也就是在那个时代流水线出现了,将一个指令拆成几个步骤,让硬件资源共享,使得速度提升,关于流水线以后会提到。SISD从根本上来说数据处理存在一定冗余,特别是我们现实中很多问题都可以进行向量化,所以就有Cray,他是SIMD,也就是单指令流多数据流,现在可以想象一下,我们从简单的a+b ,到了 a+b,每一个学过线性代数的都应该知道他们的差距吧,这样做的好处是单次处理数据很多,可惜是只适合科学运算,毕竟在程序员建模时代,我们还是希望能用标量来进行处理,到现在SIMD一下子复活了,那就是GPU,人手一个或者几个,但程序员(应用层乃至汇编层)不能去接管它,说到底这也是好事儿,免得适应新的模式(记住这句话)。

从分类上我们还要提一下MISD,多指令流单数据流,还是想象一下,知道这是很难想象的,这个多在容错计算机里面有,也就是数据一样,备份分散给多个处理机,看大家结果。

现在的计算机,无论是台式,还是笔记本或者是人手都有的嵌入式计算机,基本都是MIMD,其主要原因就是单处理机到多处理机,到这儿我们才出现第一个从一到多。MIMD也为流水提供了很多好处,是流水深度加深,流水效率提高,个人认为从单处理机到多处理机对我们来说几乎是完全透明的,哪怕是程序员,这也就是说,我们从这里面得到的都是免费的午餐,原来的程序不需要修改或者修改部分参数就可以继续使用。

我们的电脑都是MIMD的,其实从性能来说,现在最大个人程序基本都是游戏程序,一次进入内存,最大可能会占用2G以上,从我们看来基本就够了,但假设我们玩网游时候,我们会向另一台机器一小时内发送200M的数据,我希望的我的游戏小伙伴有1000人以上,那么一个小时内保底也就有了200G,当然这是一个简单的小游戏程序了,从数据角度来说,微博等社交,产生的数据都会在T级以上,那么我们的MIMD该怎么办,我觉得它卡死或者崩溃我都完全理解,它的IO完全承受不了。

解决办法有加强单机能力,比如吞吐量加倍,处理速度加快,这是最容易想到的解决办法,但其问题在于Amdal发现的,系统整体提升,单靠一个部分是不能的。所以我们就开始想,从单机(多处理机)处理到多机(机群,分布式计算机),每一部分解决一部分,然后将问题合并,分治法是最好的软件方式,所以从计算机发展角度来说,这一部分并不是很难接受,因为最起码很多问题我们是已经有软件基础的,但他就需要程序员发挥才智去将单机转为并行,目前这种并行是主流,但记住他不是免费的,所以很难,很不好去接受将原来的程序改成并行的。

之前我们提到过流水线,其实从某种角度存在并行,这就是ILP(Instruction LevelParallel ),但他的并行就是一段时间内多个Job,而现在出现了TLP,T就是线程。TLP也不是免费,这也就是现在的多线程编程,虽然其结构低于多机,但好处理,因为时间问题是易于解决的,而且从个人电脑来说,只能用多线程,只有服务器才能使用机器级的并行,但问题就是时间问题。

从一到多,并不是一个好的选择,但也是不得不做的选择。我们在日常生活中也是这样,一个人做其实最不容易发生混乱而且效率可以根据自己熟练程度提高,就像SISD加速,利用流水提升效率;然后就是一心可以多用,但会出现一定的问题,就像线程级并行;但当出现建造大桥、教堂、世贸大厦这样的工作,那么我们就不得不去团队协作,用合理的方式去安排、监督进度以获得效率的提升;就像多机并行。

从不得不并行到创新,再到下一个发展,都是从社会经验得到的,毕竟计算机是人造的,最符合人的社会发展规律。

0 0