内存颗粒容量计算的容量是怎么计算的

6482人阅读
C和C++(5)
C++类所占内存大小计算
转载时请注明出处和作者联系方式
文章出处:
作者联系方式:
说明:笔者的操作系统是32位的。
class A {};
sizeof( A ) = ?
sizeof( A ) = 1
明明是空类,为什么编译器说它是1呢?
空类同样可以实例化,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.所以sizeof( A )的大小为1.
& void MemberFuncTest( int para ) { }
& static void StaticMemFuncTest( int para ){& }
sizeof( B ) = ?
sizeof( B ) = 1
类的非虚成员函数是不计算在内的,不管它是否静态。
&virtual ~C() {}
sizeof( B ) = ?
sizeof( B ) = 4
类D有一个虚函数,存在虚函数的类都有一个一维的虚函数表叫虚表,虚表里存放的就是虚函数的地址了,因此,虚表是属于类的。这样的类对象的前四个字节是一个指向虚表的指针,类内部必须得保存这个虚表的起始指针。在32位的系统分配给虚表指针的大小为4个字节,所以最后得到类C的大小为4.
&virtual ~D() {}
&virtual int VirtualMemFuncTest1()=0;
&virtual int VirtualMemFuncTest2()=0;
&virtual int VirtualMemFuncTest3()=0;
sizeof( D ) = ?
sizeof( D ) = 4
原理同类C,不管类里面有多少个虚函数,类内部只要保存虚表的起始地址即可,虚函数地址都可以通过偏移等算法获得。
sizeof( E ) = ?
sizeof( E ) = 8
32位的操作系统int占4个字节,char占一个字节,加上内存对齐的3字节,为8字节。
class F : public E
&static int s_
int F::s_data=100;
sizeof( F ) = ?
sizeof( F ) = 8
类F为什么跟类E一样大呢?类F的静态数据成员被编译器放在程序的一个global data members中,它是类的一个数据成员,但是它不影响类的大小,不管这个类实际产生了多少实例还是派生了多少新的类,静态成员数据在类中永远只有一个实体存在,而类的非静态数据成员只有被实例化的时候,他们才存在.但是类的静态数据成员一旦被声明,无论类是否被实例化,它都已存在.可以这么说,类的静态数据成员是一种特殊的全局变量.
class G : public E
&virtual int VirtualMemFuncTest1(int para)=0;
class H : public G
sizeof( G ) = ?
sizeof( H ) = ?
sizeof( G ) = 16
sizeof( H ) = 20
可以看出子类的大小是本身成员的大小再加上父类成员的大小.如果父类还有父类,也加上父类的父类,这样一直递归下去。
class I : public D
&virtual int VirtualMemFuncTest1()=0;
&virtual int VirtualMemFuncTest2()=0;
sizeof( I ) = ?
sizeof( I ) = 4
父类子类工享一个虚函数指针,虚函数指针保留一个即可。
空的类也是会占用内存空间的,而且大小是1,原因是C++要求每个实例在内存中都有独一无二的地址。
(一)类内部的成员变量:
普通的变量:是要占用内存的,但是要注意内存对齐(这点和struct类型很相似)。
static修饰的静态变量:不占用内存,原因是编译器将其放在全局变量区。
从父类继承的变量:计算进子类中
(二)类内部的成员函数:
非虚函数(构造函数、静态函数、成员函数等):不占用内存。
虚函数:要占用4个字节(32位的操作系统),用来指定虚拟函数表的入口地址。跟虚函数的个数没有关系。父类子类工享一个虚函数指针。
&&&&&&& 构成对象本身的只有数据,任何成员函数都不隶属于任何一个对象,非静态成员函数与对象的关系就是绑定,绑定的中介就是this指针。成员函数为该类所有对象共享,不仅是处于简化语言实现、节省存储的目的,而且是为了使同类对象有一致的行为。同类对象的行为虽然一致,但是操作不同的数据成员。
测试代码如下:
* file name
: main.cpp
* description : test the size of c++'s class
* create on
* create by
: chenchong
#include&iostream&
class A {};
void MemberFuncTest( int para ) { }
static void StaticMemFuncTest( int para ){
virtual ~C() {}
virtual ~D() {}
virtual int VirtualMemFuncTest1()=0;
virtual int VirtualMemFuncTest2()=0;
virtual int VirtualMemFuncTest3()=0;
class F : public E
static int s_
int F::s_data=100;
class G : public E
virtual int VirtualMemFuncTest1(int para)=0;
class H : public G
class I : public D
virtual int VirtualMemFuncTest1()=0;
virtual int VirtualMemFuncTest2()=0;
int main( int argc, char **argv )
cout&&&sizeof( A ) = &&&sizeof( A )&&
cout&&&sizeof( B ) = &&&sizeof( B )&&
cout&&&sizeof( C ) = &&&sizeof( C )&&
cout&&&sizeof( D ) = &&&sizeof( D )&&
cout&&&sizeof( E ) = &&&sizeof( E )&&
cout&&&sizeof( F ) = &&&sizeof( F )&&
cout&&&sizeof( G ) = &&&sizeof( G )&&
cout&&&sizeof( H ) = &&&sizeof( H )&&
cout&&&sizeof( I ) = &&&sizeof( I )&&
#if defined( _WIN32 )
system(&pause&);
Windows 7 32位 VC 2010运行结果:
Linux(cent os 6.2 32位)运行结果:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:101186次
排名:千里之外
原创:11篇
(1)(1)(1)(2)(4)(5)(2)(1)内存带宽_百度百科
从功能上理解,大家可以将内存看作是(一般位于北桥芯片中)与CPU之间的桥梁或与仓库。显然,内存的容量决定“仓库”的大小,而内存的带宽决定“桥梁”的宽窄,两者缺一不可,这也就是常常说道的“内存容量”与“”。除了内存容量与内存速度,延时周期也是决定其性能的关键。当CPU需要内存中的数据时,它会发出一个由内存控制器所执行的要求,内存控制器接著将要求发送至内存,并在接收数据时向CPU报告整个周期(从CPU到内存控制器,内存再回到CPU)所需的时间。
内存带宽基础知识
内存带宽定义
毫无疑问,缩短整个周期也是提高内存速度的关键,这就好比在桥梁上工作的警察,其指挥疏通能力也是决定通畅度的因素之一。更快速的内存技术对整体性能表现有重大的贡献,但是提高内存带宽只是解决方案的一部分,数据在CPU以及内存间传送所花的时间通常比处理器执行功能所花的时间更长,为此被广泛应用。其实,所谓的就是CPU中的与,它们是内存这座“大桥梁”与CPU之间的“小桥梁”。事实上,一级缓存与二级缓存采用的是SRAM,大家也可以将其宽泛地理解为“内存带宽”,更多地被解释为“前端总线”,所以也只是简单的提一下。事先预告一下,“前端总线”与“内存带宽”之间有着密切的联系,将会在后面的测试中有更加深刻的认识。
内存带宽重要性
内存带宽为何会如此重要呢?在回答这一问题之前,先来简单看一看系统工作的过程。基本上当CPU接收到指令后,它会最先向CPU中的(L1 Cache)去寻找相关的数据,虽然一级缓存是与CPU同频运行的,但是由于容量较小,所以不可能每次都命中。这时CPU会继续向下一级的(L2 Cache)寻找,同样的道理,当所需要的数据在二级缓存中也没有的话,会继续转向L3 Cache(如果有的话,如K6-2+和K6-3)、内存和硬盘。由于系统处理的数据量都是相当巨大的,因此几乎每一步操作都得经过内存,这也是整个系统中工作最为频繁的部件。如此一来,内存的性能就在一定程度上决定了这个系统的表现,这点在多媒体设计软件和3D游戏中表现得更为明显。3D显卡的内存带宽(或许称为显存带宽更为合适)的重要性也是不言而喻的,甚至其作用比系统的内存带宽更为明显。大家知道,显示卡在进行时,都需要从显存的不同中读写数据。这些缓冲区中有的放置描述像素ARGB(,红,绿,蓝)元素的颜色数据,有的放置像素Z值(用来描述像素的深度或者说可见性的数据)。显然,一旦产生Z轴数据,显存的负担会立即陡然提升,在加上各种材质贴图、深度复杂性渲染、3D特效,其工作量可想而知。在更多情况下,显存带宽的重要性超越了显存容量,这点将在后文的测试中有详细说明。
内存带宽如何提高
内存带宽的计算方法并不复杂,大家可以遵循如下的计算公式:带宽=总线宽度×总线频率×一个时钟周期内交换的数据包个数。很明显,在这些乘数因子中,每个都会对最终的内存带宽产生极大的影响。然而,如今在频率上已经没有太大文章可作,毕竟这受到制作工艺的限制,不可能在短时间内成倍提高。而总线宽度和数据包个数就大不相同了,简单的改变会令内存带宽突飞猛进。DDR技术就使感受到提高数据包个数的好处,它令内存带宽疯狂地提升一倍。 当然,提高数据包个数的方法不仅仅局限于在内存上做文章,通过多个内存控制器并行工作同样可以起到效果,这也就是如今热门的双通道DDR(如nForce2、I875/865等)。事实上,双通道DDR内存控制器并不能算是新发明,因为早在RAMBUS时代,RDRAM就已经使用了类似技术,只不过当时RDRAM的总线宽度只有16Bit,无法与DDR的64Bit相提并论。内存技术发展到如今这一阶段,四通道内存控制器的出现也只是时间问题,VIA的QBM技术以及SiS支持四通道RDRAM的,这些都是未来的发展方向。至于显卡方面,对其显存带宽更加敏感,这甚至也是很多厂商用来区分高低端产品的重要方面。同样是使用DDR显存的产品,128Bit宽度的产品会表现出远远胜过64Bit宽度的产品。当然提高显存频率也是一种解决方案,不过其效果并不明显,而且会大幅度提高成本。值得注意的是,部分高端显卡甚至动用了DDRII技术,这项技术还为时过早。
内存带宽识别
对于内存而言,辨别内存带宽是一件相当简单的事情,因为SDRAM、DDR、RDRAM这三种内存在外观上有着很大的差别,大家通过下面这副图就能清楚地认识到。唯一需要去辨认的便
是不同频率的DDR内存。主流DDR内存分为DDR266、DDR333以及DDR400,其中后三位数字代表工作频率。通过上的标识,自然可以很方便地识别出其规格。相对而言,显卡上显存带宽的识别就要困难一些。在这里,应该抓住“显存位宽”和“显存频率”两个重要的技术指标。显存位宽的计算方法是:单块显存颗粒位宽×显存颗粒总数,而显存频率则是由&1000/显存颗粒纳秒数&来决定。一般来说,可以从显存颗粒上一串编号的最后2两位看出其纳秒数,从中也就得知其显存频率。至于单块显存颗粒位宽,只能在网上查询。HY、三星、EtronTech(钰创)等都提供专用的显存编号查询网站,相当方便。如三星的显存就可以到如下的地址下载,只要输入相应的显存颗粒编号即可此外,使用RivaTuner也可以检测显卡上显存的总位宽,大家打开RivaTuner在MAIN菜单即可看到。
先说功耗:互连网络是个耗电大户,可以消耗整个芯片供电的三分之一!如增加互连网络带宽,就会增加能耗。所以一方面要考虑实际带宽的需求,也要考虑相应的电源管理技术方面的要求,达到按需供应,以节约电能。
芯片面积:集成电路的特点就是有大量的晶体管备用,可以构成各种电路。就是由芯片中的一部分晶体管构成的,在芯片上占用的面积可超过内核晶核面积的五分之一。此涨彼消,用了太多的晶体管作互连网络,用于计算功能的晶体管数量就会减少。必须找到一个合理的比例,不能牺牲太多计算功能区域,也就是说互连网络的片上面积是有限制的。
设计复杂度:所有的电路设计都是要经过优化的。显而易见,简单的电路容易进行优化,复杂的电路在进行优化的时候难度就增大。在各种类型的网络结构中,总线(BUS)最简单,但一次只能收或是发一个消息。双向的环结构(Ring)可以做到同时收发,链路速度也快,但是内核大量增加后就不经济了,因为只有一条路可走。增加维度,2维的(mesh)可以处理大量并发消息,并且有大量的不同可供选择。如果继续增加维度,在矩阵(Crossbar)的结构下,所有的核均可与其他核同时通信。网络有更好的架构性能,但也更难优化设计。[1]
内存带宽带宽误区
对于初级玩家来说,内存的带宽是一个比较难搞懂的东西。
内存带宽内存速度
从技术上讲,DDR DIMM(Dual In-line Memory Modules)内存总线的与内存型号有着这样的对应关系:100MHz-PCMHz-PCMHz-PCMHz-PCMHz-PCMHz-PC4200,与之相对应的,上述每个内存型号分别运行在以下的有效时钟频率之下:200MHz, 266MHz, 333MHz, 400MHz, 466MHz以及533MHz。也就是说,计算机业界采用了把实际频率转换为对应型号的命名方法来标称这些DDR内存,换言之,DDR内存中的PC1600就是指实际频率运行在200MHz的内存,以此类推,PC2100运行于266MHz, PC2700运行于333MHz, PC3200运行于400MHz, PC3700运行于466MHz,PC4200运行于533MHZ。
内存带宽剖析
在同等配置的情况下,一台装配了 2-2-2-5 的DDR内存的计算机要比采用 3-4-4-8 DDR内存的计算机快。这是因为前者使用在获得指令或者数据以及把它们发送出去的实际时间要少于后者。
类似于“2-2-2-5”这样的参数,被称作内存的时序(timing)。为了得到较低的时存,DIMM(Dual In-line Memory Modules,双边接触内存模组)运行的频率通常要比系统前端总线低。然而,当你对CPU进行后,DIMM的带宽限制会变为对CPU的扼制,影响了CPU的运行速度,除非你放弃较低的时存,那么DIMM才有可能工作在与系统前端总线或者CPU相同的频率。这是由于当对带宽的需求很大的时候,CPU只能够等待下一个才能够得到所需要的数据,因为内存的速度跟不上CPU的频率。当需要运行具有大量临时数据的应用程序的时候,例如Photoshop和数据库,具有一个足够大的带宽是很有帮助的。
另外,一个CAS(Column Address Strobe,控制器)为2的PC3200或者3500内存可以填补带宽不够的缺陷。由于这些内存具备更低延迟时间,因此,能够使CPU与内存间的数据传输更加快。诸如游戏和一些3D应用程序等等不需要太大带宽的程序,能够通过这些内存获得更快的。
双通道不等于双倍带宽
出于对速度的追求,为低速DDR内存寻找增加带宽的方法算是很理所当然的“路子”了。最新的解决方案是,在上面采用双通道总线,换言之,就是在不增加内存的前提下,增加内存的潜在带宽。尽管内存生产商能够依据JEDEC标准生产高于DDR 400的内存产品,但是,采用双通道总线无可否认是解决内存带宽问题的一个好方法。如果有留意测试数据的话,你会发现一个双通道的内存平均会比普通内存快1-5%。在某些测试当中,速度的提升甚至可以达到15%。
在配置了Althon XP处理器的系统里面,由于受到Althon XP系统本身前端(3200MB/second)的限制,它并不能够从双通道的DDR400内存上得到任何优势。然而,由于实际上是不可能运行在100%的效率之下的,因此,对于Althon XP的系统,你只能够选择一款带宽明显低于3200MB/second的单通道内存产品。对于双通道解决方案来说,由于它能够消除内存控制器非全功率运作所带来的性能下降,因此,你会发现采用双通道的系统的内存带宽会稍微高于单通道内存。
对于Pentium 4处理器来说,由于CPU以及系统前端总线的带宽相对较高(800mhz),它能够通过双通道的内存得到比Althon XP系统更高的内存带宽。
内存带宽并不是检验性能的唯一标准,实际上,系统的实际性能是根据每个人所使用的具体的应用程序不同而有差异的。
普遍来说,Athlon XP与Pentium 4之间的性能存在着一定的对应关系。拿Athlon XP 3000+和3200+与800MHz前端总线的Pentium 4 3.0C以及与i865/i875配套的处理器作比较的话,它们之间是存在着一定差别的,这便道明了为什么P4在测试中能够得到更高的分数。
内存带宽技术
双通道DDR技术
双通道DDR技术是一种内存的控制技术,它和双通道RDRAM技术非常相类似,是在现有的DDR内存技术上,通过子系统使得内存子系统的带宽在频率不变的情况提高了一倍:即通过两个64bit来获得128bit内存总线所达到的带宽。不过虽然双64bit内存体系所提供的带宽等同于一个128bit内存体系所提供的带宽,但是二者所达到效果却是不同的。双通道体系包含了两个独立的、具备互补性的智能内存控制器,两个内存控制器都能够在彼此间零等待时间的情况下同时运作。当控制器B准备进行下一次存取内存的时候,控制器 A就在读/写主内存,反之亦然,这样的内存控制模式可以让有效等待时间缩减50%。同时由于双通道DDR的两个在功能上是完全一样的,并且两个控制器的时序参数都是可以单独编程设定的,这样的灵活性可以让用户使用三条不同构造、容量、速度的DIMM,此时双通道DDR简单地调整到最低的密度来实现128bit带宽,允许不同密度/等待时间特性的DIMM内存条可以可靠地共同运作(不过这一点在实现时比较困难,要依赖于厂商的实现)。
总的来说,的特点是通过改变内存的控制方式来获得更高的带宽,它不需要内存生产商改变生产方式,是的技术条件下无疑是最省时省力的扩展内存带宽的办法,所以可以说双通道DDR技术给DDR带来了新的活力。
四倍带宽内存技术
用四倍带宽内存技术的英文全称是Quad Band Memory,简称,QBM并不是什么全新的内存架构,也不是什么全新的内存产品,与双通道DDR技术一样也是一种内存控制技术。QBM采用一种‘位填塞’机制,不需要更高时脉频率的内存组件,在不增加内存基准频率的条件下,QBM可以利用现有的DDR内存和其它组件,实现了能获得两倍数据率的配置。
QBM与DDR一样,是通过缩短数据传输的来提高传输带宽的,但两者有有所不同。DDR是通过在的上下沿都存取数据来实现带宽倍增的。而则是在此基础上做了一种改进。一个QBM模块由两个DDR内存模块组成,其中一个模块运行在正常频率的速度,而另外一个的模块的时钟周期比前一个模块时钟周期正好慢90度的相位差,也就是说两者的工作起始时间相差1/4个时钟周期,通过这种简单的方法来让QBM得到两倍于DDR内存的工作效率,即一个时钟周期实现了4次数据读写。QBM的两个DDR模块之间采用FET芯片进行连接,而这个FET芯片就起到场效应管的作用--当做延迟开关。这样就简单的完成了串联了两个DDR模块。
所以从功效上看,QBM技术可以达到双通道DDR技术的效果,可以从根本上解决了DDR架构所面临的带宽瓶颈问题。而的最大优势在于QBM利用成熟的DDR内存组件,不再需要设计更高频的内存组件,所以对于厂商来说几乎不用对于生产线做什么调整,从普通的DDR转产QBM芯片的成本比较低。而对主板厂商来说,由于这种内存技术在内存接口和内存针脚定义等方面和DDR内存完全一样,所以在的基础上也不需要经过复杂的改造,只要将内存控制重新设计为支持QBM就可以了,原来传统的64位DDR SDRAM内存接口还是能继续使用,主板布线等设计因素几乎不用改动。[2]
内存带宽测试分析
对于不同的CPU平台,内存带宽的重要性不尽相同,而在与内存延时的搭配上,内存带宽也有很多学问。好了,还是请大家看具体的测评。
1.AMD-nForce2平台的内存带宽分析
正是nForce2的出现才让AthlonXP平台向更高的前端总线发展,而经过一段时间的体验,不少用户都会前端总线与内存带宽之间的关联有了一定的认识。一般而言,我们的常理告诉我们越高越好,因为它直接决定了内存带宽。然而在nForce2芯片组中则并不是这样一回事。由于的特殊性,它要求DDR内存与CPU同步运行时才能达到最佳性能。下面是nForce2在内存同步/异步条件下的测试成绩:
简单说来,即CPU设定为166MHz(333MHz前端总线)、DDR运行于DDR333模式时,其性能要比CPU设定为166MHz外频、DDR运行于DDR400模式的方案更好。所以,无论在何种情况下,我们都建议nForce2用户将“MemoryFrequency”设定为“Sync(同步)”。事实上,同样的情况也出现在ALiMAGiK1和SiS745这两款芯片组上,DDR333在不同步时性能反而不如DDR266同步,好在它们的市场份额并不大。
此外,当我们使用不的SPP北桥时,单通道与双通道之间的性能差距微乎其微,甚至都可以将微小的差距理解为测试误差。而在使用集成显卡的IGP北桥中,双通道确实展现出很大的优势。毫无疑问,对于nForce2而言,双通道尽管能够提升内存带宽,但是AthlonXP的前端总线利用不上,单通道DDR已经完全能够满足其需求。之所以nForce2能再KT400面前横行霸道,其关键还在于的效率,而非。
2.AMD-KT400A平台
VIA的KT400A也是一款主流SocketA,那么它究竟是否会出现高异步时性能不佳的情况呢?请大家先不要忙着下结论,更应该抛弃以往对KT333/400的陈见,因为KT400A的内存控制器经过了VIA的重新设计。
显然,KT400A已经能够利用里DDR400的高带宽,即便是在内存异步的情况下。现大家应该很明白在SocketA平台下的了吧,确实很简单:nForce2要保持同步,而KT400A/600应该尽可能提高内存频率。
3.Intel-I845PE平台
尽管单通道的I845PE已经略显落伍,但是我们能够从中分析出单通道情况下,内存带宽的重要性。事实上,P4处理器很早就达到533MHz前端总线(133MHz),此时只有使用DDR333才算是同步运行。
很明显,DDR333的高内存带宽在此表现出明显的性能优势,无论对3D游戏还是商业应用软件都大有裨益。事实上,单通道DDR对于Pentium4的Netburst架构而言仅仅是杯水车薪,即便是DDR333也无法满足Pentium4的需求,因为533MHz前端总线的Pentium4必须拥有4。2GB/s的内存带宽才能充分别发挥性能,而单通道的DDR333只具备2。7GB/s,更不用说DDR266了。
4.Intel-I865PE
I865PE是如今毫无疑问的当红小生,凭借双通道DDR技术。它完全解决了内存带宽的瓶颈,引爆P4处理器的最大动力。在这里,我们将对比单通道DDR400、双通道DDR400以及双通道DDR333之间的性能。当然,此时的P4处理器运行于800MHz前端总线。
??双通道DDR确实是P4处理器的最佳拍档,在这种环境下,系统的整体性能得到最佳发挥。如果对比一下各种前端总线的P4处理器所需要的带宽以及各种内存模式能够提供的带宽,我们也就不难理解出现这一现象的原因了。
  前端总线频率/工作频率
双通道DDR266
双通道DDR333
双通道DDR400
由于双通道DDR400的带宽是6.4GB/s,正好满足800MHz前端总线的P4处理器,因此表现出最佳的组合。
5.Intel-SiS655
一直对于内存异步相当保守,甚至一直不允许高于CPU的外频。不过SiS可并不这样认为,其高端的SiS655同样支持双通道DDR400,而且能够以更加灵活的方式进行异步,这意味着即便我们的P4处理器运行于533MHz前端总线,也可以在SiS655芯片组上使用DDR400。那么这种异步模式是否有价值呢?测试中,我们选择了533MHz前端总线的P4处理器,分别配合单通道DDR400、单通道DDR333以及双通道DDR333。
内存带宽计算
内存带宽计算公式:带宽=内存×内存总线位数×倍增系数/8。以DDR400内存为例,它的运行频率为200MHz,位数为64bit,由于上升沿和下降沿都传输数据,因此倍增系数为2,此时带宽为:200×64×2/8=3.2GB/s(如果是两条内存组成的双通道,那带宽则为6.4 GB/s)。很明显,在现有技术水准下,运行频率很难成倍提升,此时数据总线位数与倍增系数是技术突破点。
单通道内存节制器一般都是64-bit的,8个二进制位相当于1个字节,换算成字节是64/8=8,再乘以内存的运行频率,如果是DDR内存就要再乘以2,因为它是以SD内存双倍的速度传输数据的,所以:
DDR266,运行频率为133MHz,带宽为133×2×64/8 = 2.1GBps (PC2100)
DDR333,运行频率为166MHz,带宽为166×2×64/8 = 2.7GBps (PC2700)
DDR400,运行频率为200MHz,带宽为200×2×64/8 = 3.2GBps (PC3200)
所谓双通道DDR,就是可以在两个不同的数据通道上分离、读取数据。这两个相互独立工作的内存通道是依靠于两个独立并行工作的、为64-bit的内存节制器下,因此使普通的DDR内存可以到达128-bit的位宽,因此,内存带宽是单通道的两倍,因此:
双通道DDR266的带宽为133×2×64/8×2 = 4.2GBps
双通道DDR333的带宽为166×2×64/8×2 = 5.4GBps
双通道DDR400的带宽为200×2×64/8×2 = 6.4GBps
提醒,在显卡选购时,不要只看显存的大小,还要注意这个因素,除非有特殊需求,64bit显存的显卡是不建议游戏玩家购买的。[3]
在了解一些相关的重要知识之后,我们将通过详细的测试向大家展示内存带宽的奥秘。对于不同的CPU平台,内存带宽与内存延时的搭配上,有很多学问。
单说来:1、CPU设定为166MHz外频(333MHz前端总线)、DDR运行于DDR333模式;2、CPU设定为166MHz外频、DDR运行于DDR400。1模式的方案更好。所以,无论在何种情况下,我们都建议nForce2用户将&Memory Frequency&设定为&Sync(同步)&。事实上,同样的情况也出现在ALi MAGiK1和SiS745这两款芯片组上。相反:DDR333在不同步时,性能反而不如DDR266同步,好在它们的市场份额并不大。
内存带宽矛盾
熟悉的朋友一定知道内存延时(CL值)的重要性,然而如今大多数DDR内存都难以运行在CL=2的模式下,特别在提高其的情况下。很多DDR266内存能够在266MHz下稳定运行于CL=2,也可以在333MHz下稳定运行于CL=2.5,同样的情况也出现在DDR333内存中。这就带给我们这样一个矛盾,究竟应该提高还是缩短内存延时。
??为此,分别选择了AMD和Intel的平台进行测试。为了凸现出内存带宽的重要性,我们特意将CL=2时的内存频率低于CPU外频,这样的数据更有评判价值。
从测试结果来看,AthlonXP平台显然对于内存延时更加敏感。对于前端总线并不高的AthlonXP平台而言,我们认为DDR333+CL2的性能肯定在DDR400+CL2.5之上,因此建议大家在可能的情况下优化CL延时。至于I865PE平台,毕竟Pentium4还是对内存带宽相当饥渴,此时自然应该尽可能地保证内存频率,而牺牲内存延时。
内存带宽匹配问题
细心的朋友可能会发现,在品牌机的广告中对于内存的规格往往只粗略标注“DDR 256MB”或“DDR2 356MB”字样,对于的重要指标(如“DDR 400”)却是犹抱琵琶半遮面,是厂家忘记了吗?那这种频率/带宽上的差异又会给我们带来什么样的影响呢?
带宽是影响CPU和内存数据交换的关键因素,要让两者发挥最佳性能,CPU的和最好与内存相匹配。
对于Intel主流处理器而言,CPU前端总线带宽=(FSB)×64位总线÷8。比如,外频为133MHz的P4 CPU的FSB为533MHz带宽为533×64÷8=4.2GB/s。
小知识:相对于Intel的CPU提到的前端总线,AMD的处理器已经没有了前端总线的概念,因为其是集成在处理器内部的,而则还是在主板芯片组上。
内存的频率和带宽的关系可以用下面的公式来计算:内存带宽=内存倍速××内存总线÷8(SD内存倍速=1,DDR/倍速=2,双通道DDR内存倍速=4)。如DDR400的带宽为:2×200×64÷8=3.2GB/s。
大家根据上面给出的计算方法,应该可以很简单就找到适合自己CPU的内存,内存带宽必须大于或等于CPU所需带宽,没有瓶颈才能发挥CPU的性能。
品牌机多采用FSB 533MHz的CeleronD 340、FSB 800MHz的Pentium4 560和Pentium D820,而需要的内存带宽分别 为4.2GB/s、6.4GB/s和6.4GB/s。根据观查,当前低端的品牌机通常采用DDR266的内存,中端多采用DDR333的内存,而高端则采用DDR400的内存。前两种的品牌机都会造成计算机不同程度的性能下降。
Intel的CPU,从P4开始就对内存带宽有一定要求,为什么当年Intel非要推RamBUS来搭配P4?就是因为SDRAM和DDR RAM都不足以满足P4的需求。具体说一下,FSB为533的P4(为133),数据带宽需求为4.3GB/S(可以这么粗略估算,CPU带宽=FSB×8),FSB800的P4带宽需求为6.4GB/s。而同时期的DDR 400能提供的带宽也只有3.2GB/s(所以DDR400又叫PC3200内存,就是以带宽命名的),DDR266带宽为2.1GB/s,DDR333带宽为2.7GB/s,可见单根DDR内存满足不了FSB800的P4的需求,当CPU要数据时内存却传不过来足够的数据,造成CPU闲置。所以Intel费劲功夫硬性推广RamBUS来搭配自家的P4。但无奈RamBUS成本和产能都摆在那里,成了曲高和寡的东西。不得已Intel舍弃850,重新推出的支持SDRAM的845芯片组来搭配P4,早期买P4的可能就是这种主板,其实此时P4的性能被内存制约了。包括后来出的支持DDR单通道内存的845D、848等等芯片组,都没有完美解决问题。
后来出现了支持“双通道”的865芯片组才解决了问题,双通道的DDR266带宽正好满足FSB533的P4,而双通道的DDR400则满足了FSB800的P4。这个规律可以简单的推算为*2=FSB频率。如DDR 400的双通道内存可以满足FSB800的CPU,DDR2 533的双通道内存可以满足FSB1066的CPU,DDR2 667的内存双通到可以满足FSB1333的CPU,DDR2 800内存双通就可以满足FSB1600。
CPU,低端的仍旧是FSB800的(肉羊420、E2140、E4300等),此时一根DDR2 667的内存还满足不了CPU的需求(如果到800也可以),而1根DDR2 800的内存则正好能满足需求(或者2跟DDR400内存组双通道也可以,不过极少有这种主板)。 如果进行超频,比如E2140,当CPU从200超到266,FSB为1066,此时双通道的DDR2 533可以满足带宽,超频到333外频时则双通道的667可以满足带宽,超频到400外频时,此时FSB已是1600了,则只有双通道的DDR2 800内存才能满足CPU的需求。
由此可见,如果不,搭配FSB800系列,最好起步就是单根800的内存,如果购买的是FSB的U,单根内存就彻底没法满足要求了,最好上双通道。如果还打算超频,比如大家梦寐以求的400外频,则最好一次就购入2条800的内存组成双通道。否则即使CPU频率上去了,实际使用中还是会因为内存带宽不足而拖CPU的后退。 800内存和667内存几乎一个价,所以就不要再考虑667内存了。
如果不知道自己的系统到底cpu和内存带宽是多少,可以运行一个叫EVEREST的软件,在“主板”-“主板”下可以查到2者的带宽情况。只要内存带宽高于前端总线(FSB)带宽就可以了。
部分CPU的FSB
FSB8004XX系列,奔腾E2XXX系列,E4XXX系列,还有很老的奔腾D系列。
FSB1066部分E6XXX系列(00/),E7XXX系列(),X6(X6800),4核的Q6XXX系 列()。
FSB1333部分E6XXX系列(50),E8XXX系列(00/8400),4核的Q9XXX系列(50)/QX9XXX(9650)/QX6XXX(6850),
补充:发现老有DIYer选用E之类CPU,却只搭配1根DDR2 800内存,这样会严重拖累系统的。请装机时注意避免。
注:对于AMD的CPU,因为内部整合了,所以不需要经过北桥来读取内存数据,而是CPU直接读取数据,因此不像Intel的CPU这么需要强调带宽搭配问题,一般可以用单条2G DDR2 800来装机。
内存带宽发展
CPU架构是整个PC系统中的核心部分,CPU架构性能的提升不仅仅需要提升CPU的主频。CPU和系统主内存的数据带宽对整个CPU架构的执行效能都非常关键。对于Pentium 4架构来说,是集成在MCH芯片内部,CPU需要通过MCH芯片中的内存控制器和内存实现数据交换。那么,CPU和内存的数据带宽受到两个因素的限制:CPU和MCH芯片之间的数据带宽、MCH芯片和内存的数据带宽。两者无论任何一边成为瓶颈,都会影响整个系统效能。
对于Intel平台来说,CPU、MCH芯片、内存的数据带宽对于内存性能很重要
CPU与内存带宽
CPU和MCH芯片之间的数据带宽主要是由系统FSB决定:总线(bit)×FSB频率(MHz),得到的单位为bit/s,如果要得到Byte/s的单位,还需要÷8。例如,FSB为800MHz,CPU和MCH的数据带宽就为64bit×800MHz÷8=6.4GB/s;同理FSB为1066MHz,CPU和MCH的带宽就约为8.5GB/s。
Intel CPU最高FSB为1066MHz,当然1333MHz FSB的Core 2 E6850已经发布,不过距离上市还有一段时间。同理,MCH芯片和内存的数据带宽也很关键,这个带宽主要是由总线位宽(bit)×÷8所得,例如DDR 2 667,带宽即为64bit×667MHz÷8≈5.3GB/s,如果是双通道内存,还得×2,即双通道DDR 2 667内存数据带宽为10.6GB/s。[4]
内存带宽比较
目前最高时钟频率(单位MHz)
533(非标准)
1066(非标准)
数据带宽(GB/s)
最高物理Bank
最高逻辑Bank
数据预取(bit)
通过上面的表格,很明显,DDR2的工作电压比DDR低近30%,功耗也能相应下降大约50%了。采用FBGA等CSP方式封装,减小了模组尺寸,并提高信号完整性,它增加了各模块之间的空气流动空间因而提高了热性能和可靠性。综合来看,更容易达到最高的频率。厂商等不及动作太慢的JEDEC,自行推出了DDR1066的产品。这种产品单条即有8.5GB/s的带宽,相当于双通道DDR 533。
由于核心频率和外部频率的倍进关系,而我们又是以外部频率作为衡量内存的标准,因此同频DDR 2内存和DDR内存相比,数据传输率是一样的。
仅仅是频率上的提升,顶多算个“DDR.改”,谈不上“DDR 2”。DDR2的重大改进之处就在于数据预取从DDR的2bit提升为4bit。所谓2bit预取,可以理解为内存核心向外部I/O缓冲传递一次数据,可供外部I/O传输两次的量。而4bit预取,就是内存核心向外部I/O缓冲传递一次数据,可供外部I/O传输4次的量。
内存芯片的频率也有芯片核心频率和外部频率两种:在DDR时代,这两个频率是相同的;但在DDR2时代,核心频率就变成了外部频率的一半。这是为什么呢?因为DDR的2bit预取,核心一次传输的数据可供外部I/O缓冲传输2次,而数据以DDR方式传输,数据传输是CLK时钟的上下沿触发,因此外部时钟频率与核心频率保持一致。而4bit预取就不一样了,核心一次传输数可供外部I/O缓冲传输4次,同样使DDR方式传输,外部频率也要是核心频率的两倍才行。[5]
DDR3与DDR2内存带宽比拼
提升带宽是的核心使命,这一点无疑是DDR3最为突出的PC使命,简单地说,DDR3面世就是为了进一步地提升内存带宽,为FSB越来越高的CPU提供足够的匹配指标。DDR2内存其频率需要可以达到1066MHz这样的极端频率,但它的良率及成本都不理想,这种玩家级的产品没法进入到市场主流。要用低成本切入到更高的频率的话,新一代的解决方案必将出台,这就是DDR3内存了。从技术指标上看,DDR3内存的起跑频率就已经是在1066MHz了,尽管延时参数方面没法与DDR2内存相抗衡,但是将来推出的MHz产品的内存带宽肯定大幅度抛离DDR2内存,以DDR3 2000MHz为例,其带宽可以达到16GB/s(双通道内存方案则可以达到32GB/s的理论带宽值),所以将来DDR3内存肯定成为用户唯一的高带宽选择。其实DDR3内存提升有效频率的关键依然是旧招数,就是提高预取设计位数,这与DDR2采用的提升频率的方案是类似的。我们知道,DDR2的预取设计位数是4Bit,也就是说DRAM内核的频率只有接口频率的1/4,所以DDR2-800内存的核心工作频率为200MHz的,而DDR3内存的预取设计位数提升至8Bit,其DRAM内核的频率达到了接口频率的1/8,如此一来同样运行在200MHz核心工作频率的DRAM内存就可以达到1600MHz的等值频率,这种“翻倍”的效果在DDR3上依然非常有效。如果说2006年是CPU双核元年的话,那么2007年则可以说是PC的功耗年,因为2007nian 有太多关系功耗性能比的宣传,从环保角度去看,降低功耗对业界是有着实实在在的贡献的,全球的PC每年的耗电量相当惊人,即使是每台PC减低1W的幅度,其省电量都是非常可观的。DDR3内存在达到高带宽的同时,其功耗反而可以降低,其核心工作电压从DDR2的1.8V降至1.5V,相关数据预测DDR3将比现时DDR2节省30%的功耗,当然发热量我们也不需要担心。就带宽和功耗之间作个平衡,对比现有的DDR2-800产品,DDR3-800、的功耗比分别为0.72X、0.83X及0.95X,不但内存带宽大幅提升,功耗表现也比上代更好。
提升带宽是DDR3内存的核心使命
1、逻辑Bank数量
DDR2 SDRAM中有4Bank和8Bank的设计,目的就是为了应对未来大容量芯片的需求。而DDR3很可能将从2Gb容量起步,因此起始的逻辑Bank就是8个,另外还为未来的16个逻辑Bank做好了准备。
2、封装(Packages)
DDR3由于新增了一些功能,所以在引脚方面会有所增加,8bit芯片采用78球,16bit芯片采用96球FBGA封装,而DDR2则有60/68/84球FBGA封装三种规格。并且DDR3必须是绿色封装,不能含有任何有害物质。
3、突发长度(BL,Burst Length)
由于DDR3的预取为8bit,所以突发传输周期(BL,Burst Length)也固定为8,而对于DDR2和早期的DDR架构的系统,BL=4也是常用的,DDR3为此增加了一个4-bit Burst Chop(突发突变)模式,即由一个BL=4的读取操作加上一个BL=4的写入操作来合成一个BL=8的数据突发传输,届时可通过A12地址线来控制这一突发模式。而且需要指出的是,任何突发中断操作都将在DDR3内存中予以禁止,且不予支持,取而代之的是更灵活的突发传输控制(如4bit顺序突发)。
4、寻址时序(Timing)
就像DDR2从DDR转变而来后延迟周期数增加一样,DDR3的CL周期也将比DDR2有所提高。DDR2的CL范围一般在2至5之间,而DDR3则在5至11之间,且附加延迟(AL)的设计也有所变化。DDR2时AL的范围是0至4,而DDR3时AL有三种选项,分别是0、CL-1和CL-2。另外,DDR3还新增加了一个时序参数——写入延迟(CWD),这一参数将根据具体的工作频率而定。
中国通信学会是全国通信...
提供资源类型:内容
企业信用信息}

我要回帖

更多关于 内存存储容量计算 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信