計算機底層是如何訪問顯示卡的
連結:https://www.zhihu.com/question/20722310/answer/24824346
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
其實你可以把顯示卡想象成另外一臺機器。那麼控制另外一臺機器的辦法,就是往它的記憶體裡面寫指令和資料。往一塊記憶體裡面寫東西的辦法無非就幾種,1, 用CPU去做,那麼就是用MMIO(Memory Mapped IO)把'視訊記憶體' map到CPU定址空間,然後去讀寫,2, 用DMA控制器去做,這裡面有系統自帶的DMA控制器或者顯示卡帶的,不管哪種你可以把DMA控制器再一次看作另外一臺機器,那麼其實就是向DMA控制器寫指令讓它幫你傳一些東西到視訊記憶體去,傳的這些東西就是顯示卡要執行的命令和資料。顯示卡上的記憶體控制器,原來AGP的時候叫GART,現在不知道叫啥名了,另外SoC裡面也有類似的概念,不過大多數SoC只有一個記憶體控制器,所以不分視訊記憶體和記憶體。
把顯示卡想象成另外一臺機器。它要工作,無非也是“程式儲存”原理,上電之後,從特定的記憶體(視訊記憶體)地址去取指,然後執行指令。顯示卡的工作邏輯比CPU簡單多了,它一般就從一個環形buffer不斷的取指令,然後執行,CPU就不斷的去往環形buffer填指令。
很多時候同一個動作既可以用MMIO,也可以用DMA,比如flip framebuffer。只要把flip framebuffer的指令正確傳到環形buffer就好了。但是MMIO需要CPU參與,傳大資料的時候,打亂CPU GPU並行性,划不來。
驅動程式其實也是圍繞著這件事情來做的,Vista以前,顯示卡的驅動全都是kernel mode執行的,因為只有kernel mode才能訪問的實體地址,但是kernel mode的壞處是一旦有問題,系統就崩潰,而且kernel mode有很多侷限性,比如沒有C庫支援,浮點運算很難,代價很大等等。所以Vista之後,顯示卡驅動都分兩部分,kmd負責需要訪問實體地址的動作,其他事情都放到umd去做,包括API支援等等。所以一個3D程式執行的過程是這樣的,app generate command, call D3D runtime,D3D runtime call driver umd, driver umd system call driver kmd, kmd send command to ring buffer, graphic card exeute.
至於顯示卡驅動要完成什麼部分,這個就是所謂HAL(hardware abstraction layer)層,也就是說HAL以下由廠商提供,以上就是作業系統自帶,在HAL層以上,所有的操作都是統一的,比如畫一個點,畫一條線,驅動來對應具體的某一款晶片生成真正的命令,比如畫點,需要0x9指令,把絕對座標放到地址0x12345678(舉例)。微軟管的比較寬,umd, kmd都有HAL層,意思是即使kmd你也不能亂寫,能統一的儘量統一,比如CPU GPU external fence讀寫同步機制就是微軟統一做的。
流處理器就是說,那些處理器可以執行很多的指令,而不是就幾個固定的功能,比如原來我把幾個矩陣的乘法固定成一個操作(比如T&L單元),現在我把這個操作拆了,改成更基本的指令,比如,取矩陣元素,加乘,這樣更靈活。不過你就得多費心思去組合這些指令了,組合這些指令有個高大上的名字,shader。至於為什麼叫shader,越來越長了,不說了。相關文章
- 浮點數在計算機底層的表示及運算計算機
- 細說計算機底層整型編碼機制計算機
- RX588顯示卡礦機算力與收益
- 英偉達GPU顯示卡計算能力評估GPU
- 顯示卡鎖算力和不鎖算力的區別 顯示卡鎖算力和不鎖算力的哪個好
- 獨立顯示卡與整合顯示卡的區別 獨立顯示卡與整合顯示卡哪個更好
- 底層原理:垃圾回收演算法是如何設計的演算法
- 如何在Mac上快速顯示桌面以便快速訪問Mac
- FreeBSD 物理機下顯示卡的配置
- 外甥女問我計算機是如何組成的?計算機
- 獨立顯示卡與整合顯示卡的區別 獨立顯示卡與整合顯示卡優缺點介紹
- gtx和rtx顯示卡的區別 gtx顯示卡和rtx顯示卡哪個好
- 礦卡和普通顯示卡區別是什麼 怎麼判斷顯示卡是不是礦卡
- 顯示卡瓶頸是什麼,如何識別顯示卡GPU瓶頸並解決以提升PC效能GPU
- 【計算機網路】介質訪問控制計算機網路
- 專業顯示卡和遊戲顯示卡的區別詳解 專業顯示卡和遊戲顯示卡哪個好?遊戲
- Flink的底層運算元之前如何通訊
- Mac OS系統如何把我的電腦計算機圖示顯示在桌面上Mac計算機
- el-input-number 的圖層顯示問題
- 電腦雙顯示卡交火效能提升多少,雙顯示卡交火是什麼意思?
- 【計算機網路】資料鏈路層——基於通道劃分的介質訪問控制計算機網路
- 顯示卡剛降價 RTX 30 LHR顯示卡又被破解了:挖礦算力滿血
- 當代計算機程式語言簡單梳理(附計算機硬體底層工作流程)計算機
- win10 如何禁用集顯_win10雙顯示卡怎麼禁用整合顯示卡Win10
- Linux基礎命令---uname顯示計算機名稱Linux計算機
- 探索雲端計算容器底層之Cgroup
- 這一次,徹底拿下計算機網路鏈路層!計算機網路
- 如何檢視電腦顯示卡配置 win10檢視電腦顯示卡配置的方法Win10
- Golang channel底層是如何實現的?(深度好文)Golang
- 計算機網路的物理層計算機網路
- css如何讓div顯示在最上層CSS
- js 判斷是手機訪問,還是pc訪問JS
- 顯示卡效能天梯圖2022最新 桌面顯示卡筆記本顯示卡效能天梯圖最新筆記
- 面試必問:SpringBoot中的條件註解底層是如何實現的?面試Spring Boot
- 豎裝顯示卡損失效能嗎?豎裝顯示卡的機箱優缺點知識科普
- 電腦顯示卡選擇A卡還是N卡好?DIY組裝電腦之電腦顯示卡選購指南
- 設計好的報表是如何在 web 上顯示的Web
- 電腦的獨立顯示卡是幹什麼用的 不玩遊戲有必要買獨立顯示卡嗎遊戲
- 【趣話計算機底層技術】一個故事看懂各種鎖計算機