簡體   English   中英

圖形驅動程序如何以編程方式從CPU到GPU進行通信?

[英]How does a graphics driver programmatically communicate from CPU to GPU?

我很想知道CPU指令如何與GPU交互。 據我所知,CPU具有一定的指令(機器代碼),它可以理解和執行,驅動程序是一個通過CPU與GPU通信的軟件。

但是這個軟件如何溝通? CPU是否包含明確告訴它與另一個設備通信的某些匯編指令?

我可以編寫匯編代碼或C / C ++代碼來與圖形卡進行通信,就像驅動程序給出了一個特定的機器環境一樣嗎?

與PC上的任何硬件設備一樣,圖形卡將響應對某些存儲器地址的讀寫,以及可能的輸入/輸出端口。 PCI總線定義了這些分配的方式。

沒有特定的CPU指令可以與顯卡通信,在寫入內存位置的情況下,它只使用普通指令來執行此操作,而在端口IO的情況下,它只使用通用指令來執行此操作。 在這兩種情況下,都需要一些CPU設置來將內存位置“映射”到虛擬地址空間或允許訪問端口。

例如,可以將對存儲器位置1234567的寫入指向圖形卡以指示對其的命令。 (當然這只是一個組成的例子)你當然可以編寫自己的驅動程序來做到這一點,但是你必須確切地知道卡所期望的不同的東西,而這通常只是一個秘密,只有制造商,他們在他們的驅動軟件中實現它。 有些卡比其他卡更好記錄,有些卡已部分逆向工程。

是的,內存地址映射到計算機系統中的每個設備。 基本的是,如果您寫入映射到設備的某個內存區域,則會寫入設備。 為此,設備具有映射到主存儲器的特定寄存器和其他可編程空間。 使用這些寄存器可以根據情況配置GPU等設備。 最后,對於巨大的數據傳輸,GPU顯然使用了DMA傳輸,因此一旦啟動DMA傳輸,它就可以在沒有CPU干預的情況下工作。

因此,最重要的是,為了與GPU或其他硬件設備進行通信,您需要研究安裝GPU的系統架構,因為最終系統軟件在安裝GPU的系統中后退,負責所有類型的內存映射和分配。

視頻卡不比計算機內部或外部的任何其他項目更神奇。 您是如何閱讀此網頁的,至少有兩台計算機通過接口(以太網/互聯網)相互通信。 內存,pcie(視頻,硬盤,USB等),usb(鼠標,鍵盤等),網絡,都通過最終連接到cpu外部接口的接口連接到主cpu(內存總線缺少a更好的術語)。

我們認為這些設備中的許多都是純粹的邏輯,並且當您寫入路由到該外設的某個地址時,似乎有意義,地址和數據告訴該blob邏輯執行某些操作。 但就像在一台由其他計算機提供的計算機上閱讀此網頁一樣,它不一定是純邏輯,只需要一個界面來移動數據。 不僅是gpu而且計算機中的許多其他東西都有處理器,網絡接口可能,鼠標和鍵盤可能都有,硬盤最有可能,而且我們現在知道筆記本電腦上的電池組有一個固件處理器好吧(mac battery感染了病毒,在重新安裝后重新感染計算機)。

沒有魔法。 在計算機中的這些其他處理器上運行的軟件/固件與邏輯沒有什么不同,他們的工作的一部分是等待來自主cpu的命令來執行操作。 鼠標請給我按鈕狀態。 Gpu請給我畫一個三角形。

cpu中沒有特殊的匯編語言指令用於視頻。 cpu不知道牆上一個洞的視頻卡,驅動程序知道/確定它知道如何通話的視頻卡的地址空間,通過該地址空間寫入告訴視頻卡所需的數據值的東西。 畫一個三角形可能涉及幾個數據項,毫無疑問是三個角坐標,也許是填充顏色或是直線,這可能只是與該外圍設備的通信接口定義的一部分。

這里沒有魔力,如果你想讓別人為你做點什么,你會提供他們要做的事情清單,並以他們能理解的方式進行交流(去123大街,按門鈴,告訴那個人這個答案你想要兩張今晚演出門票,給他們這筆錢,隨着更改和門票返回),硬件更容易,因為通訊接口已經很好地定義了該外圍設備。

作為Von Neumann架構,內存總線是硬件系統的核心。 每個設備都與內存總線通信,包括CPU。

讓我們看一下CPU,它只能對內存總線發出基本的讀/寫操作,還有一些額外的操作,比如鎖/屏障。

其他設備也是如此,例如GPU可以通過PCI接口通過DMA讀/寫主存儲器; GPU還將一些寄存器映射到主總線,寫入寄存器映射的特定地址可以發出特定命令。

通常,所有設備通過主存儲器總線相互通信。

但另外,CPU還有一個中斷接口,這是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM