CPU與GPU之間資料傳輸

2021-05-22 13:34:55 字數 2668 閱讀 1043

一般的資料複製到的顯示卡記憶體的部份,稱為global memory

int* gpudata, *result;

cudamalloc((void**) &gpudata, sizeof(int) * data_size);

cudamalloc((void**) &result, sizeof(int));

cudamemcpy(gpudata, data, sizeof(int) * data_size,

cudamemcpyhosttodevice);

int sum;

cudamemcpy(&sum, result, sizeof(int), cudamemcpydevicetohost);

cudafree(gpudata);

cudafree(result);

關鍵函式說明:

1.5.1

cudamalloc

名稱

cudamalloc –

在gpu

上分配儲存器

概要

cudaerror_t cudamalloc( void** devptr

,size_t count )

說明

向裝置分配

count

位元組的線性儲存器,並以

*devptr

的形式返回指向所分配儲存器的指標。可針對任何型別的變數合理調整所分配的儲存器。儲存器不會被清除。如果出現錯誤,

cudamalloc()

將返回cudaerrormemoryallocation。

返回值

相關返回值:

cudasuccess cudaerrormemoryallocation

注意,如果之前是非同步啟動,該函式可能返回錯誤碼。

名稱

cudamemcpy –

在gpu

和主機之間複製資料

概要

cudaerror_t cudamemcpy( void* dst

,const void* src

,size_t count

,enum cudamemcpykind kind )

cudaerror_t cudamemcpyasync( void* dst

,const void* src

,size_t count

,enum cudamemcpykind

kind

,cudastream_t stream )

說明

src指向的儲存器區域中將

count

個位元組複製到

dst指向的儲存器區域,其中

kind

是cudamemcpyhosttohost

、cudamemcpyhosttodevice

、cudamemcpydevicetohost

或cudamemcpydevicetodevice

之一,用於指定複製的方向。儲存器區域不可重疊。呼叫

cudamemcpy()

時,如果

dst和

src指標與複製的方向不匹配,則將導致不確定的行為。

cudamemcpyasync()

是非同步的,可選擇傳入非零流引數,從而將其關聯到乙個流。

它僅對分頁鎖定的主儲存器有效,如果傳入指向可分頁儲存器的指標,那麼將返回乙個錯誤。

返回值

相關返回值:

cudasuccess

cudaerrorinvalidvalue

cudaerrorinvaliddevicepointer cudaerrorinvalidmemcpydirection

注意,如果之前是非同步啟動,該函式可能返回錯誤碼。

名稱

cudafree –

釋放gpu

上的儲存器

概要

cudaerror_t cudafree (void* devptr)

說明

釋放

devptr

(必須在之前呼叫

cudamalloc()

或cudamallocpitch()

時返回)指向的儲存器空間。如果未返回或者之前已經呼叫過

cudafree(devptr)

,則返回乙個錯誤。如果

devptr為0

,則不執行任何操作。如果出現錯誤,

cudafree()

將返回cudaerrorinvalid-devicepointer。

返回值

相關返回值:

cudasuccess

cudaerrorinvaliddevicepointer cudaerrorinitializationerror

注意,如果之前是非同步啟動,該函式可能返回錯誤碼。

scp 在不同主機之間資料傳輸

不同的linux之間copy檔案常用有3種方法,第一種就是ftp,也就是其中一台linux安裝ftp server,這樣可以另外一台使用ftp的client程式來進行檔案的copy。第二種方法就是採用samba服務,類似windows檔案copy 的方式來操作,比較簡潔方便,第三種就是利用scp命令...

兩個fragment之間資料傳輸

最近要折騰兩個fragment之間傳資料的問題,在網上看了很多文章,基本都是使用兩種方法 1,兩個fragment之間使用getfragmentmanager begintransaction replace r.id realtabcontent 容器 myjdeditfragment 要跳轉的f...

scp 在不同主機之間資料傳輸

不同的linux之間copy檔案常用有3種方法,第一種就是ftp,也就是其中一台linux安裝ftp server,這樣可以另外一台使用ftp的client程式來進行檔案的copy。第二種方法就是採用samba服務,類似windows檔案copy 的方式來操作,比較簡潔方便,第三種就是利用scp命令...