共享CUDA記憶體

2021-10-13 01:41:38 字數 1116 閱讀 6654

共享cuda記憶體

程序間共享

此功能僅限於linux。

將裝置陣列匯出到另乙個程序

使用cuda ipc api,可以與同一臺計算機上的另乙個程序共享裝置陣列。為此,請使用.get_ipc_handle()裝置陣列上的方法獲取乙個ipcarrayhandle物件,該物件可以轉移到另乙個程序。

devicendarray.get_ipc_handle()

返回乙個ipcarrayhandle物件,該物件可以安全地序列化並傳輸到另乙個程序以共享本地分配。

注意:此功能僅在linux上可用。

類numba.cuda.cudadrv.devicearray.ipcarrayhandle(ipc_handle,array_desc )

ipc陣列控制代碼可以序列化並轉移到同一臺計算機上的另乙個程序,以共享gpu分配。

在目標程序上,使用.open()方法建立乙個新的 devicendarray物件,該物件共享來自原始程序的分配。要釋放資源,請呼叫.close()方法。此後,目標將無法再使用共享陣列物件。(注意:對資源的底層weakref現在已失效。)

該物件實現了上下文管理器介面,該介面自動呼叫 .open()和.close()方法:

with the_ipc_array_handle as ipc_array:

# use ipc_array here as a normal gpu array object

some_code(ipc_array)

close()

關閉陣列的ipc控制代碼。

open()

返回乙個共享原始程序分配的新devicendarray。不得在原始過程中使用。

從另乙個程序匯入ipc記憶體

以下函式用於從另乙個程序作為裝置陣列開啟ipc控制代碼。

cuda.open_ipc_array(shape,dtype,strides = none,offset = 0 )

乙個上下文管理器,它開啟乙個ipc控制代碼(cuipcmemhandle),該控制代碼表示為乙個位元組序列(例如,位元組,int元組),並將其表示為給定形狀,步幅和dtype的陣列,步幅可以省略。在那種情況下,假定它是一維c連續陣列。

產生乙個裝置陣列。

上下文管理器退出時,ipc控制代碼將自動關閉。

CUDA 共享記憶體

於gpu上啟動的每個執行緒塊上的共享記憶體,cuda c編譯器都會建立該變數的乙個副本。同一執行緒塊的每個執行緒都共享這塊記憶體,但是執行緒無法看到也不能修改其他執行緒塊中的共享記憶體。這樣做可以使得乙個執行緒塊中的多個執行緒能夠在計算上通訊和協作。共享記憶體緩衝區駐留在物理gup上,因此訪問共享記...

cuda 共享記憶體bank conflict詳解

在cuda平行計算中,共享記憶體在gpu速度優化上扮演著重要作用,但是如果共享記憶體使用不當,也會導致速度不快反降或者提速效果不佳,如發生bank conflict bank的中文翻譯為儲存體,gpu 共享記憶體是基於儲存體切換的架構 bank switched architecture 一般現在的...

CUDA申請動態共享記憶體

直接上 include include global void kernel int main return 0 程式輸出 1021.000000 1022.000000 1023.000000 index 1021.000000 index 1022.000000 index 1023.00000...