日志档案

发表于 2008-2-11 1:24:56

4

标签: ARM  CPU  RISC  parallel  Cluster  

CPU演化随想

看到ICS的广告中的虚拟场景,让我不禁反问自己“当处理器速度达到可以欺骗人的感官的时候,我们又何去何从,难道真的会想《机械公敌》一样吗?”

言归正传,这两天在写arm7的程序,以前会觉得比较轻松,但自从看了卓越编程后就有点缩手缩脚了,处处要考虑编译后的效率……哎,可能是理解的还不透彻吧。但从另一个方面,我又发现RISC有点穷途末路,在我做高速ad采样设计的时候发现,限制一切硬件的本质是时钟,时钟本身的震荡自然不是太大的问题(就我所知最高的有光电震荡呢,10GHz),而是电路的承受能力了,就是所谓的漏电流引起的功耗问题,这很大一部分涉及工艺问题,而RISC试图以简单的结构来提升电路的频率及降低功耗,后者相对来说还是成功的,但前者并未看到有明显的作用。
就arm的汇编来说,我觉得和C的思考方式还是有很大差距的,而且我很少看到arm用纯汇编写的,换句话来说MCU始终没有最高效的工作过。或者我对编译的优化还不够了解,但对于大数据的搬移来说,编译效果不让人满意。综上所述,RISC在现有C的编写方式写并没有发挥其多寄存器的优势,相反被它的多周期操作而拖累。当然在这里我不想批评点什么,只是觉得还有工作有待完成。

在处理器频率的标高收到限制的时候,自然而然的想到了扩大规模,单纯的拓展指令集的效果有限,那么double就很自然了。但是CPU的double似乎有点不彻底。
内核两个了,但其他外设呢?共享!
我依然感觉两台电脑要比双核来的快。为什么呢?我琢磨着……
共享的方式出了问题,他们共享的不光是内存(数据),他们连程序都共享了,也就是说两个内核被当作以个处理器来处理任务,这使得两个处理器的任务相关性很大,因为我们的习惯思维总是顺序进行的,致使任务中数据的时间纵向相关性很大。因此,我觉得即使4核了,处理能力也没有线性增加。这也部分解释为什么四路单核服务器比两路双核服务在处理大数据量的时候要快。

我对多核的连接提出个新的观点:核与核之间以最快的方式进行连接——寄存器连接(通过寄存器交换数据),而独享其他的外部资源,也就是说4核需要4个硬盘,听起来有点疯狂,不过看到PCI-E的固态硬盘后也许会觉得还是有可能的。
多的硬盘就表示有多段程序在同时运行,希望各自独立运行,而非频繁的交换数据。这又让我想到了内核特殊化,就是每个内核都有自己处理任务的强项同时需要时又能分担一部分处理任务,这点到有点双A计划(AMD+ATI,GPU+CPU),这里关键是独享慢速设备。
同时如果在最顶端进行数据交换的话,就使得处理器间的关系就更透明了,内核1只要问内核2要他的数据而不用了解他的数据怎么存放的。当然这样也会使处理器的有效效率降低,或者设计个自动搬移数据的指针来解决。
这样就相当于以寄存器连接的集群机一般工作,自然也很大程度缓解集群中网路瓶颈问题。这样的结构更适合多进程的情况,而不是多线程。

P.S.以上仅是一时兴起的随想,有诸多不严谨处尽请原谅,仅抛砖引玉。

系统分类: ARM   |   用户分类: 无分类   |   来源: 原创   |   【推荐给朋友】

    阅读(2983)    回复(8)  

投一票您将和博主都有获奖机会!

  • riple

    2008-2-13 21:06:35

    very good 随想!

  • zhong335

    2008-2-14 10:05:18

    >> 对于大数据的搬移来说,编译效果不让人满意。综上所述,RISC在现有C的编写方式写并没有发挥其多寄存器的优势,相反被它的多周期操作而拖累。

    大数据搬移用C库的memcpy,这个是用多寄存器批量读/写优化过的。没有什么编译器可以直接优化你自己程序里的数据搬移。

    一般的C程序中,变量一定会放到寄存器中,不再有内存读写,直到寄存器不够用。你可以相信ARM的多寄存器优势被编译器很好的发挥了。

    关于多核技术,目前的多核的任务分配是以线程为单位的,不明白你说的共享寄存器有什么用。

  • dmq0420

    2008-2-15 13:18:44

    并不同意楼上的看法,====一般的C程序中,变量一定会放到寄存器中,不再有内存读写=====。相反,变量一般是作为内存读写的,而ARM一种模式下只有10几个寄存器而已,一般不作为变量用。

    BTW:多处理器之间用共享如果用共享寄存器来做,则需要很多很多的寄存器,这样的话会变得很复杂(现场实在是太大),另外,这样做非常难以扩展:(。

  • huge

    2008-2-15 23:07:50

    我也只是提出一个假设,之所以希望在寄存器里完成数据交换,是出于集群机的计算能力的瓶颈在于数据交换,希望能得到一个线性拓扑的方法。

    其实,更关键的问题就是,在单核时代,所有CPU都认为程序是自己独享的,而在多核的情况下,如何来分配任务,交换任务显得更为重要。集群机已经在尝试解决,但遇到了进程打包交换的瓶颈,我认为现在架构的多核也依然面临数据瓶颈

    至于,讨论的变量问题我建议还是看汇编的结果吧。不是因为协议层太繁琐,要跑操作系统,大多数情况下我还是喜欢用汇编。

  • syf20040100

    2008-3-8 13:48:14

    有些看不懂各位高手所云

  • ERBAO

    2008-3-29 22:03:57

    关于很少有人用汇编这一点,huge理解有点偏颇。 答案很简单,用汇编不划算 用汇编,无非是为了提高效率,能提高多少呢?从目前编译器的发展看,除了DSP的比较特殊,普通通用处理器,什么x86、mips、arm、ppc,效率提高20%就很可喜了。但是,程序员要花多久的时间呢?现在硬件都很便宜,换个快点的cpu多省事?而且高级语言的可继承性远大于汇编。所以汇编几乎没人用

  • cocappjj

    2008-6-13 23:20:01

    好文章。博主请到我博客看看,也加入到我们的原创博客群里面吧

  • huge

    2008-6-15 0:04:05

    ERBAO的账好像算反了,如果说程序算是一次性成本的话,那么硬件就是持续成本,你说有必要杀鸡用牛刀,仅因为程序员开发效率低下吗? 最近,看了不少编译原理的书,大部分程序可以控制编译结果了,还是C写起来轻松,少写不少代码,不过考虑起来还是一样复杂。