看到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.以上仅是一时兴起的随想,有诸多不严谨处尽请原谅,仅抛砖引玉。
用户377235 2013-8-8 17:24
用户131519 2008-6-15 00:04
用户1053025 2008-6-13 23:20
用户134833 2008-3-8 13:48
用户131519 2008-2-15 23:07
我也只是提出一个假设,之所以希望在寄存器里完成数据交换,是出于集群机的计算能力的瓶颈在于数据交换,希望能得到一个线性拓扑的方法。
其实,更关键的问题就是,在单核时代,所有CPU都认为程序是自己独享的,而在多核的情况下,如何来分配任务,交换任务显得更为重要。集群机已经在尝试解决,但遇到了进程打包交换的瓶颈,我认为现在架构的多核也依然面临数据瓶颈
至于,讨论的变量问题我建议还是看汇编的结果吧。不是因为协议层太繁琐,要跑操作系统,大多数情况下我还是喜欢用汇编。
用户1338116 2008-2-15 13:18
并不同意楼上的看法,====一般的C程序中,变量一定会放到寄存器中,不再有内存读写=====。相反,变量一般是作为内存读写的,而ARM一种模式下只有10几个寄存器而已,一般不作为变量用。
BTW:多处理器之间用共享如果用共享寄存器来做,则需要很多很多的寄存器,这样的话会变得很复杂(现场实在是太大),另外,这样做非常难以扩展:(。
ash_riple_768180695 2008-2-13 21:06