原创 CPU演化随想

2008-2-11 01:24 3321 8 14 分类: MCU/ 嵌入式

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


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


ca75f0c4-eb5d-4e1a-ba13-2896a1d9b64e.jpg


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


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


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

PARTNER CONTENT

文章评论6条评论)

登录后参与讨论

用户377235 2013-8-8 17:24

哈哈

用户131519 2008-6-15 00:04

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

用户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

very good 随想!
相关推荐阅读
用户131519 2009-04-05 19:58
下一代上网本期待点什么?
sse4.2不是别的,正是sse4.2指令集,atom的成功很大程度上得益于ssse3指令集的高效。对于上网本的定位在说,最关心的不是能否播放1080p的电影(720p足够了)而是文字处理的效率。现在...
用户131519 2008-12-25 14:03
ADS '.ses 'could not be loaded
关于通常的一些问题和解决,我就不废话了,今天发现个比较郁闷的问题,就是工程放在U盘里,尽然也会引起这个问题,实在费解,只好讲AXD设为默认的软件仿真方式,然后锁住配置文件。还有费解的是,换机器为什么要...
用户131519 2008-11-15 11:54
质疑linux的依赖性
Linux是否过于依赖GCC了?arm-linux-gcc-2.95.3.tar.bz2  交叉编译器2.95.3版本 (用于编译vivi)arm-linux-gcc-3.3.2.tar.bz2   ...
用户131519 2008-10-13 20:05
NXP的含糊地带——IAP
之前在LPC2200上用过一次NXP的IAP,第一感觉就是ISP就是靠它来实现的,而且是段不知道在哪个阴暗角落工作的代码。最担心的是一不小心跑飞代码,冲进IAP搞乱了,不知道怎么修复。后来批量LPC2...
用户131519 2008-08-31 14:15
贴段乱码
#include<stdio.h>main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,main(-86...
用户131519 2008-08-16 12:58
FPGA speed grade
在选择FPGA的时候,常常会比较器件的指标,speedgrade是其中之一。同等级的芯片,最高工作频率不同,也即芯片内部的门级延时和布线延时是不同的。如Xilinx的芯片有-5,-6,-7,等级越高,...
我要评论
6
8
关闭 站长推荐上一条 /3 下一条