作者alvinli (alvin)
看板VideoCard
标题Re: [问题] Bit数
时间Mon Nov 6 11:47:23 2006
※ 引述《FiveAaaa ([5A]aaa)》之铭言:
: ※ 引述《maply0703 (落叶)》之铭言:
: : 传输频宽
: : 记忆体时脉每跳动一次时
: : 所传输的位元数量
: : 例如记忆体时脉400MHZ
: 此处提到了记忆体时脉, 那核心时脉又有什麽影响呢?
: 是指: 用 [ (记忆体时脉) * (传输频宽) ] bps传入GPU, GPU再用xxxMHz来运算吗?
: 谢谢!
小弟刚好是做GPU的..来大概简述一下好了~
不过我是写drvier跟demo的..所以会比较以软体的角度来想~
名词解释:
视讯记忆体(VRAM)=>也就是显示卡所标榜的记忆体
系统记忆体(System RAM)=>也就是平常所说的记忆体
GPU=>就是绘图显示晶片, 7300GT, 7600GT这类的东西.
大致上流程是这样的:
1. 传统:
3D应用程式透过API将节点资料跟效果设定从System Memory送进VRAM
Shader:
3D应用程式透过Shader program将资料(包含程式)从System Memory送进VRAM
这是第一个传送瓶颈:system memory->vram,
最大值限制为PCI/AGP/PCI-E所能承受的频宽.
2. 上面的步骤是将系统记忆体资料跟命令送进command queue,
command queue是什麽呢? 从头解释的话太麻烦, 就简述吧!
当驱动程式下命令给硬体的时候, 硬体是不能做其他事情的,
这一点跟CPU跟OS的关系是一样的, 所以这时候如果有一个buffer,
把要给硬体的命令存起来 每隔一段时间发一次给硬体,
其他的时间就可以给硬体去做其他事情, 而不会被传送这些命令占住时间.
而这些给硬体的命令中, 有很多时候会是送节点资料给硬体的,
这个时候这个机制就很重要了,
如果没有这个机制的话, 驱动程式跟硬体说,
现在开始从某记忆体位置开始搬资料到VRAM去,
而假设资料很多, 搬动资料需要100毫秒, 那麽这100毫秒就没办法做3D运算,
所以FPS就会被限制在10fps以下,
如果有这个机制的话, 那麽驱动程式只要跟硬体说"搬资料罗!"
然後就不用管硬体搬资料搬到哪, 而可以继续做之前没做完的3D运算,
而不用等硬体搬资料.
这个道理跟最近新兴的硬碟NCQ原理是一样的,
不过这个机制在显示卡上已经行之有年了~
command queue就是这个buffer, 而这时候引擎&记忆体的时脉就开始有影响了:
GPU这时候会从VRAM command queue部分parse资料, 然後做运算,
送到frame buffer去(frame buffer定义请查google, 因为很基本)
这里就扯到VRAM跟GPU时脉的关系了, VRAM送的快, GPU就收的多,
能处理的3D指令也就多, 速度也就越快, 如果VRAM太慢, 那麽资料送不够快,
那麽引擎工作当然也快不起来, 会有很多时间闲置.
如果VRAM够快, GPU却不够快, 那麽GPU就会卡住效能.
3. GPU画完之後, 如果非全萤幕的话, 通常会将framebuffer放在一个看不见的buffer,
然後在将buffer打到window内, 这部分就跟vram有很大的关系了,
因为这是一个gpu->vram->vram copy的动作,
这个部分记忆体时脉就直接影响到所谓的Fill Rate (像素填充率)
假设GPU能力可以负荷到每秒一亿个点, 但是记忆体却没办法跟上,
那麽Fill Rate就会被卡VRAM那端.
如果vram每秒有效时脉是400Mhz, 那麽一秒钟就可以搬4亿次资料,
假设记忆体宽度是128bit, 那麽一秒就是51200000000bps,
约6GB/s,如果画面是32bit RGBA的话, 那麽fill rate就是1.5 Billion pixel/sec.
注意, 这是以vram的速度来判断的, 并不是GPU时脉去算,
假设GPU时脉560Mhz, 256bit, 那麽一秒可运算的资料量就是:
560000000*256bit/32bit=>fill rate = 4.48Billion pixel/sec,
而全萤幕的时候不需要做搬动的动作, 因为不需考虑视窗重叠的状况,
所以实际能力可以加倍, 将资料搬移简化到单纯一次gpu->vram,
所以在16bit色彩理想状态可达到9 billion pixel/sec, 扣掉GPU自己的耗时,
就是实际的fill rate.
(这是假设没有interrupt发生或者其他因素的理想状态, 实际不大可能达到XD)
也有些厂商会用32bit当spec, 但是会做一些加成, 或者特殊的"偷吃步",
来省时间以达到一些漂亮的数字, 也就是牺牲品质换取速率.
也就是说, 就算GPU可以做到这麽快, 但是如果VRAM冲不到这麽快,
则像素填充率就会被限制在VRAM上, 这也就是为什麽超频记忆体会有用的原因之一.
上面我是拿7600GT当范例, 但是7600GT spec写的是6.7 billion pixel/sec?
这部分是因为command会有一些overhead,
并不是所有的时脉都可以全部拿来做填充的动作.(就是上面提的gpu自己的耗时)
至於为什麽我会拿400Mhz而不是拿ddr的800Mhz来说呢?
因为, GPU跟VRAM沟通是需要做hand-shaking的,而记忆体本身也会有些延迟,
hand-shaking这个动作就是在做: GPU发命令跟记忆体说"我要送资料了"
接着等一小段时间, 可能是1个tick, 也可能会慢到3~4个tick,
接着记忆体会回"ok我可以收", 然後又会等1~3个tick去等GPU发资料,
所以说这些频宽能力并不是直接拿来乘就好,
实际频宽还是需要除掉这些hand-shaking的时间的,
在这里我用了比较低的数据去估计, 毕竟我不知道各厂商的记忆体设定:p
所以说, 记忆体宽度决定了视讯记忆体是否会成为GPU瓶颈,
但是或许有人会说, 照这样算起来, 7900GTX的记忆体根本也达不到需要的频宽!?
没错, 因为事实上根本没必要让记忆体完全跟上GPU,
透过OpenGL/Direct3D这些API, 可以事先把资料送进VRAM,
然後之後就不在需要每个frame都送一次资料, 这部分就相当的省时了,
这使得传输的资料可以简化到大部分都是送硬体命令,
省下了最占时间的资料传输时间.
这个时候, game跟game engine设计好坏就可以一分高下了,
好的引擎跟游戏设计规划可以省下许多不必要的资料传输,
对於vram频宽的需求相对就减少许多,
EA Games就是这方面我认为最强的专家,
而这也是为什麽有些厂商的游戏竟然普通的效果就要很高的硬体,
有些厂商的游戏居然可以用低硬体要求究可以做到更好的效果的原因.
至於polygon rate又是另一个故事了....0rz 就不提啦XD
所以呢..我一直觉得买最好的显示卡是阻碍那些烂游戏引擎发展的元凶阿XD
但是也有时候游戏程式写的烂但是把时间花在游戏内容上的话
我还是会觉得很值得就是了...真两难阿QQ
: : 传输频宽64BIT
: : 传输速度就是
: : 400*64/8(/8是bit转换成byte)=3200MB/sec
: : 如果时脉相同,bit变成128bit
: : 400*128/8=6400MB/sec
: : 直接变成两倍
: : 所以bit数是相当重要的喔!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.88.74
1F:推 sjory:专业 推 218.184.198.9 11/06 11:50
2F:推 jackcheng:未看先推220.132.120.108 11/06 11:50
3F:推 Gayarou:大推>_o b 163.25.148.46 11/06 11:52
4F:推 HDTV:好文 推 125.233.7.186 11/06 12:10
5F:推 quamtum:应该不是ncq吧ncq还会找最佳路径解读取区 61.66.243.100 11/06 12:13
6F:→ quamtum:块,也就是比较好的dramc可以out of order 61.66.243.100 11/06 12:16
7F:推 cn1754:好文推一个 220.131.32.106 11/06 12:18
8F:推 tmac:高手 211.74.234.212 11/06 12:20
9F:推 alvinli:ncq部分我不清楚 不过概念一样噜 220.135.88.74 11/06 12:20
10F:→ alvinli:gpu command queue其实也是会有最佳化的 220.135.88.74 11/06 12:20
11F:→ alvinli:ncq是临时想到才举的 说错话请见谅 XD 220.135.88.74 11/06 12:20
12F:推 ws1204:推 59.112.8.94 11/06 12:32
13F:推 nrsair:好文大推 210.68.141.220 11/06 12:41
14F:推 nan13579:好文 推 140.125.203.38 11/06 12:45
15F:推 Pojin:被m前先推 高手高手高高手XDDD 59.105.25.56 11/06 13:02
16F:推 hellk:用大陆的说法 技术帖!我顶 140.135.9.11 11/06 13:12
17F:推 ytyty:推 163.17.44.34 11/06 13:29
18F:推 FiveAaaa:谢谢! 但是频宽6GBps如何求得Fill Rate? 140.113.151.87 11/06 13:30
19F:推 alvinli:每笔资料4byte, 一秒送1.5G次 220.135.88.74 11/06 13:38
20F:→ alvinli:所以..刚刚打错了..1.5才对 不是1.25XD 220.135.88.74 11/06 13:38
※ 编辑: alvinli 来自: 220.135.88.74 (11/06 13:39)
21F:→ alvinli:已修正~ 220.135.88.74 11/06 13:39
※ 编辑: alvinli 来自: 220.135.88.74 (11/06 13:48)
22F:推 roseritter:真屌 59.126.49.245 11/06 14:10
23F:推 halt:专业的来惹~ 版主请M! 59.120.154.109 11/06 15:48
24F:推 onicid:这个一定要先来推一下的 218.168.70.32 11/06 15:55
25F:推 cychi:推推 长知识220.228.165.112 11/06 15:58
※ 编辑: alvinli 来自: 220.135.88.74 (11/06 16:05)
26F:推 alvinli:有一行不小心删了 刚自己看发现会大误导 220.135.88.74 11/06 16:05
27F:→ alvinli:已补上@@ 220.135.88.74 11/06 16:06
28F:推 Rafallos:超专业...受教了 61.57.148.10 11/06 16:41
29F:推 euro99:超专业!218.162.175.197 11/06 16:57
30F:推 MRjk:GOOD 218.165.78.242 11/06 17:09
31F:推 Zerocks:天啊..好文大推! 220.135.206.31 11/06 17:26
32F:推 fa18e: <( ̄▽ ̄)/ .. 61.57.128.42 11/06 17:40
33F:推 spirit711628:虽然直接END还是要推 163.15.33.90 11/06 17:58
34F:推 albert0507:超专业 推~ 163.24.253.16 11/06 18:03
35F:推 hyde211:推 218.168.84.232 11/06 18:15
36F:推 truemail0616:真强者!!!先推一个!! 61.31.133.203 11/06 18:42
37F:推 bartester:专业 61.225.35.144 11/06 19:22
38F:推 Draculalu:这篇怎麽还没被m起来?125.232.155.209 11/06 20:19
39F:推 rock0807:先推在慢慢看 59.112.26.51 11/06 20:23
40F:推 sugini:虽然有点看不懂不过还是推.不是念理工的=_=218.174.174.247 11/06 20:23
41F:推 icome:您真内行! 61.62.135.23 11/06 20:44
42F:推 Cisse:专业的 推! 61.59.230.214 11/06 20:47
43F:推 basala7477:好文 推一个 59.127.15.186 11/06 20:53
44F:推 panasony:这个专业啊! 该M 218.170.30.186 11/06 22:18
45F:推 jeffrank:cool~220.134.102.148 11/06 22:56
46F:推 FiveAaaa:那麽VRAM时脉还是GPU时脉决定fill rate?140.113.140.149 11/06 23:16
47F:→ FiveAaaa:然後fill rate就决定效能对吧?140.113.140.149 11/06 23:17
48F:推 Karter:这篇不M吗? 61.224.81.60 11/07 01:04
49F:推 matrixkiller:push!!!125.229.216.166 11/07 02:08
50F:推 needhp:太厉害了,我有点看不懂呢@@ 163.24.253.18 11/07 02:26
51F:推 Limsea:这个专业! 59.113.50.122 11/07 03:56
52F:推 MickJan:WOW 一整个超专业的啦~ 61.216.169.70 11/07 09:27
53F:推 ntnumaxpower:push 太专业了@@ 218.167.71.105 11/07 18:24