一般的數據複製到的顯卡內存的部份,稱爲 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
注意,如果之前是異步啓動,該函數可能返回錯誤碼。
1.1.1 1.5.10 cudaMemcpy
名稱
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
注意,如果之前是異步啓動,該函數可能返回錯誤碼。
1.1.2 1.5.3 cudaFree
名稱
cudaFree – 釋放GPU上的存儲器
概要
cudaError_t cudaFree (void* devPtr)
說明
釋放devPtr(必須在之前調用cudaMalloc()或cudaMallocPitch()時返回)指向的存儲器空間。如果未返回或者之前已經調用過cudaFree(devPtr),則返回一個錯誤。如果devPtr爲0,則不執行任何操作。如果出現錯誤,cudaFree()將返回cudaErrorInvalid-DevicePointer。
返回值
相關返回值:
cudaSuccess
cudaErrorInvalidDevicePointer cudaErrorInitializationError
注意,如果之前是異步啓動,該函數可能返回錯誤碼。