Re: [問題] Bit數

看板VideoCard (顯卡板)作者 (alvin)時間18年前 (2006/11/06 11:41), 編輯推噓46(4607)
留言53則, 43人參與, 最新討論串1/3 (看更多)
※ 引述《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

11/06 11:50, , 1F
專業 推
11/06 11:50, 1F

11/06 11:50, , 2F
未看先推
11/06 11:50, 2F

11/06 11:52, , 3F
大推>_o b
11/06 11:52, 3F

11/06 12:10, , 4F
好文 推
11/06 12:10, 4F

11/06 12:13, , 5F
應該不是ncq吧ncq還會找最佳路徑解讀取區
11/06 12:13, 5F

11/06 12:16, , 6F
塊,也就是比較好的dramc可以out of order
11/06 12:16, 6F

11/06 12:18, , 7F
好文推一個
11/06 12:18, 7F

11/06 12:20, , 8F
高手
11/06 12:20, 8F

11/06 12:20, , 9F
ncq部分我不清楚 不過概念一樣嚕
11/06 12:20, 9F

11/06 12:20, , 10F
gpu command queue其實也是會有最佳化的
11/06 12:20, 10F

11/06 12:20, , 11F
ncq是臨時想到才舉的 說錯話請見諒 XD
11/06 12:20, 11F

11/06 12:32, , 12F
11/06 12:32, 12F

11/06 12:41, , 13F
好文大推
11/06 12:41, 13F

11/06 12:45, , 14F
好文 推
11/06 12:45, 14F

11/06 13:02, , 15F
被m前先推 高手高手高高手XDDD
11/06 13:02, 15F

11/06 13:12, , 16F
用大陸的說法 技術帖!我頂
11/06 13:12, 16F

11/06 13:29, , 17F
11/06 13:29, 17F

11/06 13:30, , 18F
謝謝! 但是頻寬6GBps如何求得Fill Rate?
11/06 13:30, 18F

11/06 13:38, , 19F
每筆資料4byte, 一秒送1.5G次
11/06 13:38, 19F

11/06 13:38, , 20F
所以..剛剛打錯了..1.5才對 不是1.25XD
11/06 13:38, 20F
※ 編輯: alvinli 來自: 220.135.88.74 (11/06 13:39)

11/06 13:39, , 21F
已修正~
11/06 13:39, 21F
※ 編輯: alvinli 來自: 220.135.88.74 (11/06 13:48)

11/06 14:10, , 22F
真屌
11/06 14:10, 22F

11/06 15:48, , 23F
專業的來惹~ 版主請M!
11/06 15:48, 23F

11/06 15:55, , 24F
這個一定要先來推一下的
11/06 15:55, 24F

11/06 15:58, , 25F
推推 長知識
11/06 15:58, 25F
※ 編輯: alvinli 來自: 220.135.88.74 (11/06 16:05)

11/06 16:05, , 26F
有一行不小心刪了 剛自己看發現會大誤導
11/06 16:05, 26F

11/06 16:06, , 27F
已補上@@
11/06 16:06, 27F

11/06 16:41, , 28F
超專業...受教了
11/06 16:41, 28F

11/06 16:57, , 29F
超專業!
11/06 16:57, 29F

11/06 17:09, , 30F
GOOD
11/06 17:09, 30F

11/06 17:26, , 31F
天啊..好文大推!
11/06 17:26, 31F

11/06 17:40, , 32F
<( ̄▽ ̄)/ ..
11/06 17:40, 32F

11/06 17:58, , 33F
雖然直接END還是要推
11/06 17:58, 33F

11/06 18:03, , 34F
超專業 推~
11/06 18:03, 34F

11/06 18:15, , 35F
11/06 18:15, 35F

11/06 18:42, , 36F
真強者!!!先推一個!!
11/06 18:42, 36F

11/06 19:22, , 37F
專業
11/06 19:22, 37F

11/06 20:19, , 38F
這篇怎麼還沒被m起來?
11/06 20:19, 38F

11/06 20:23, , 39F
先推在慢慢看
11/06 20:23, 39F

11/06 20:23, , 40F
雖然有點看不懂不過還是推.不是唸理工的=_=
11/06 20:23, 40F

11/06 20:44, , 41F
您真內行!
11/06 20:44, 41F

11/06 20:47, , 42F
專業的 推!
11/06 20:47, 42F

11/06 20:53, , 43F
好文 推一個
11/06 20:53, 43F

11/06 22:18, , 44F
這個專業啊! 該M
11/06 22:18, 44F

11/06 22:56, , 45F
cool~
11/06 22:56, 45F

11/06 23:16, , 46F
那麼VRAM時脈還是GPU時脈決定fill rate?
11/06 23:16, 46F

11/06 23:17, , 47F
然後fill rate就決定效能對吧?
11/06 23:17, 47F

11/07 01:04, , 48F
這篇不M嗎?
11/07 01:04, 48F

11/07 02:08, , 49F
push!!!
11/07 02:08, 49F

11/07 02:26, , 50F
太厲害了,我有點看不懂呢@@
11/07 02:26, 50F

11/07 03:56, , 51F
這個專業!
11/07 03:56, 51F

11/07 09:27, , 52F
WOW 一整個超專業的啦~
11/07 09:27, 52F

11/07 18:24, , 53F
push 太專業了@@
11/07 18:24, 53F
文章代碼(AID): #15JgxDiy (VideoCard)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
10
16
完整討論串 (本文為第 1 之 3 篇):
10
16
46
53
文章代碼(AID): #15JgxDiy (VideoCard)