|
|
原帖由 smilexp 于 2006-6-5 01:12 发表9 e8 L: W7 D2 b* Z) K+ K8 \
% A' @ v4 s+ T& Y
! T# F8 M" q: l' ?* T; i建议你去了解一下PCI总线,PCI总线是并行工作的,加上FIFO缓冲区以及DMA,数据时延没有你想像中那么严重,基本上可以认为是实时传送1 n3 \: Y) ^. H0 O
按照你的逻辑,ISA声卡时代莫非玩游戏都是按一下等半天才有声音出来? $ J7 _7 L/ a) c9 y% {2 m2 ~- ?
$ Y. e9 g0 y, z
pci总线是并行总线,但pci总线也是共享总线,挂在上面的设备共同分享带宽,而pcie的一个明显好处就是各设备独享带宽,而且不像pci总线,pcie总线可以同时读写,是“全双工”。
! M' P0 S+ P* ~# x0 s% t: y0 J3 M1 q7 x& \! x* M
到底pci总线的实际速度有多少,我搜索了一下:+ J5 y/ {! r$ y4 @- `) {6 U
@2 [6 U2 o. h9 X我们经常提到的132MByte/s只是在数据传输Burst时达到的峰值,实际中不可能。
9 J. q: I. ^; g4 g: ]因为还要有仲裁、地址段、译码等时间。% P/ U; r: h& u
: ]. C V" ^/ M$ I8 @
一般认为在一个轻载的系统中,一个设计优秀的PCI系统是可以获得40MB/s到50MB/s的 ! G. h+ g% s* e/ L1 t
实际运行带宽的。请注意一定是轻载系统。如果有大量的其他设备需要占用PCI 4 V8 f+ s5 s" N2 ~
总线,那么你的设备所得到的带宽就会大大下降(例如大量的图形刷新,网络 3 |% L: f: \" P! _( l
传输,硬盘操作等等)。
3 j Y9 ^- w) @% j
% e+ s) p- I4 U5 B m你还要考虑到:
! R# T, C/ N3 ?# M9 C1 Y$ S: \; \% u& P' {& H8 ^, J
Retry
' Y% b2 T. _% K2 RWait State
5 \4 J& W1 m9 @( C. g9 O$ h8 T- kInterrupt service polling
. \9 e& {" H9 ]: U* G( X1 V" b& w9 H2 O' @# @
即使你能够一个接一个地传输,但是 Single Read / Single Write 将使得真正实用的带宽降到四分之一或更低。
8 ^8 \) o$ ?# Q0 K7 e+ B* q
$ S w s, L5 B! t. N如果需要 CPU 频繁地调度各个芯片之间的工作,或者是 SW/HW 有频繁的交互,即,
' \( X( P6 F( W7 J6 D5 Q q5 [5 N. S' D0 ?( @3 T6 a* M% j
Set registers
" i5 W* e0 l7 F3 q, O4 |Service interrupt, \2 M7 S5 j6 @" s8 z
) K, T8 n# n/ O6 Y6 k6 X传输数据的带宽又被迫降低。# L ]& l/ J3 b0 j- h
4 V, T+ c; n; r# X1 z更深一步看系统,如果系统的 Memory 的组织,排的不利于 Burst,那么,即使使用DMA也无济于事,过多的 Transaction Overhead 将使得使用带宽进一步下降。: p' X7 V* Z2 }9 K4 T0 P* f
1 h, f8 G. p! O& E+ }: |% ^说实话,以上的文字我看不太懂,但结论很明显。
5 s+ R* v& l0 S- W. y0 ?$ q7 m" |% W$ ]2 C) z
要讨论延迟,总得有个参照,看和谁比,如果是听mp3,几百毫秒的延迟也不影响,因为你要关注的就是声音本身,没有其它参照;如果是看多声道电影,过高的延迟人们会察觉出来,就是音画不同步,但实际中这种情况很少见,播放软件会控制音画同步,个别情况比如mpc+创新dts硬解码,就要靠外挂的软件来实现同步,就是reclock这个滤镜。
+ P) m. V; S M0 b1 n% Z2 i( x, w
$ e/ F8 C2 Z0 \+ |! Q+ D% A1 M我在顶楼说的很明白,讨论的是3D音频加速性能,就是常说的声卡游戏性能。这时候对延迟的要求就很高了,因为要求音画同步的同时对画面的帧数还有极高要求。电影的fps要么23.976要么25,游戏的fps降到这个水平就没人玩了,而且游戏的时候cpu是满载,片刻的分心就会在fps上体现出来。就是说20ms的延迟在听音乐、看电影的时候不是问题,但跑游戏的时候就是严重问题。 |
|