|
本帖最后由 largewc 于 2011-9-2 04:25 编辑
mooncocoon 发表于 2011-9-1 19:23 ![]()
任务的无损拆解和网格化。
想要明白我下面在说什么,请先自行股沟败毒上面这个简单的黑字,都给了路 ...
I服了U,我说了那么多,看来你完全没看懂啊,你以为单核CPU就是在单个线程每个周期顺序执行一个指令啊,从奔腾一开始,CPU就可以在一个线程内,一个周期运行两条指令,这个其实就是相当于双核了,这是基于单核顺序执行外,额外增加了一套计算单元,明白了吗。
现在讲的单核,基本上指的是已经经过若干路计算单元加速过的单核,跟楼主提出的原理是一样的。
比如说
mov eax,0
mov ebx,0
add eax,ebx
mov eax
mov ebx
在奔腾一上,可以同时执行,因为他们互相没有关联。
由于有大量的上下文关联存在,所以双运算单元加速单线程,并不能按照倍数关系,所以大概双计算单元可以加速60%-80%附近,这也是为什么当初奔腾一 133可以顶上其他家200的,因为实际上,它相当于两个133运算单元在加速单个线程程序,大概相当于200m附近了。
现在之所以不再增加计算单元,而改成做多核,实际上是无奈的,因为超过四套运算单元后,同时计算四个,之间的相关性大大提高,反而没有性能提升,所以奔四实际上有四套运算单元,但是加速单线程,实际上只允许三条同时运行,关闭了一条。除了使用SIMD以后,可以用满计算单元,或者利用超线程来用满所有运算单元。
但是你不能否认,楼主的设想没问题的,多套运算单元确实可以加速单线程程序。
不知道你是做什么的,我是游戏这个行业的,工作了十多年了,经历过汇编级别优化,对CPU运算的一些系列略有了解。
多核是因为多运算单元已经到瓶颈,在增加计算单元,已经不能加速单线程程序以后,才补充了完整的寄存器和内存控制单元,做成多核并行运行多任务的,并不是不能加速单任务,我说的够明白了吧。 |
|