2012-05-24 79 views
2

我在寫一個OpenCL程序,我希望使用DMA將數據從圖像採集卡傳輸到GPU。我如何獲得GPU上的OpenCL緩衝區的物理地址來完成此操作?如何獲取DMA的GPU內存的物理地址? (OpenCL)

+0

很可能,你不能。根據您使用的操作系統和硬件,將會有主機端驅動程序和/或操作系統分割,這將阻止直接訪問GPU內存。 – talonmies

+0

我實際上使用自己設計的圖像採集卡,所以司機在我的控制之下。使用的操作系統是Windows或Linux。仍然無法訪問GPU內存地址? –

+1

當我指的是驅動程序,我的意思是GPU驅動程序。主機GPU驅動程序(或WDDM窗口中的顯示管理器)正在主動管理設備內存。每個GPU進程都有自己的虛擬化地址空間,用戶空間進程根本無法看到原始內存(實際上,我非常確定所有現代GPU都使用板載TLB來處理任何給定上下文中的地址轉換)。 NVIDIA爲CUDA提供了一些特殊的驅動程序掛鉤,以支持對其Telsa卡進行DMA的Inifiband適配器,但這些卡不是公共AFAIK。 – talonmies

回答

2

使用OpenCL,您無法獲取緩衝區的物理GPU地址。

但是,您可以將緩衝區的某個區域直接映射到主機內存中,從而允許使用標準C/C++代碼(如memcpy)將內存複製到內存中。請參見clEnqueueMapBuffer。