回覆列表
  • 1 # 使用者2930554037072

    顯示卡/GPU是具體幹活的晶片,其從host端拿命令和資料。顯示卡驅動,分核心態和使用者態兩部分。核心態驅動只管將使用者態驅動發過來的命令和資料準備好,通知GPU來拿,利用環形fifo來下發命令和資料指標,並追蹤命令的完成狀態。使用者態部分,負責對shader程式的編譯,編譯成GPU的二進位制程式碼指令。OS提供的D3D,OpenGL等函式庫,遮蔽底層不同顯示卡的差異。上層程式比如遊戲,在準備好對應的模型、貼圖紋理、著色器程式等資料之後,呼叫統一的D3D/OpenGL介面發起繪製請求,D3D則呼叫顯示卡使用者態驅動提供的回撥函式將對應的資料傳遞給後者,後者進行執行時編譯生成底層程式碼,然後傳遞給核心態驅動,核心態驅動將命令和資料傳送給GPU。至於GPU怎麼算的,那就是完全另外一回事了。

    那麼,GUDA又是什麼呢。CUDA就是通用計算,遊戲讓GPU算的是一堆畫素的顏色,而GPU完全可以算其他任何運算,比如大資料量矩陣乘法等。同樣,程式準備好對應的陣列,以及讓GPU如何算這些陣列的描述結構(比如讓GPU內部開多少個執行緒來算,怎麼算,之類),這些資料和描述,都要呼叫CUDA庫提供的函式來傳遞給CUDA,CUDA再呼叫顯示卡使用者態驅動對CUDA程式進行編譯,後者再呼叫核心態驅動將命令以及編譯好的程式資料傳送給GPU,算。CUDA,就是相當於一個專門與通用程式而不是圖形程式對接的庫,那麼它的角色和地位與D3D/OpenGL在系統架構層次中是齊平的。

    附錄,比較有用的。

  • 中秋節和大豐收的關聯?
  • 秦檜到底是自己從金人那裡逃回來的,還是金人放他回來的?