釋放gpu中的記憶體cudafree()
cuda函式的定義:
__global__:定義在gpu上,可以在cpu上呼叫的函式;
__device__:定義在gpu上,由gpu呼叫函式;
__host__:在cpu上定義的函式,一般與__device__一起用
在gpu上開闢空間:cudamalloc(**devptr, byte_size)
如:
int *gpu_int;
cudamalloc((void**)&gpu_int, sizeof(int))
gpu上陣列的初始化cudamemset(*devptr, value, byte_size)
gpu、cpu引數傳遞cudamemcpy(*dst, *src, byte_size, 型別)
其中這個型別包括:
cpu2cpu:cudamemcpyhosttohost
cpu2gpu:cudamemcpyhosttodevice
gpu2cpu:cudamemcpydevicetohost
gpu2gpu:cudamemcpydevicetodevice
原始碼如下:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include using namespace std;
__device__ int add_one(int a)
__global__ void show(int *a)
printf("\n");
}__global__ void changevalue(int *a)
}int main() ;
int *gpu_int;
//在gpu上分配空間
cudamalloc((void**)&gpu_int, 10 * sizeof(int));
show << <1, 1 >> > (gpu_int);
//初始化其值
cudamemset(gpu_int, 0, 10 * sizeof(int));
show<< <1, 1 >> > (gpu_int);
//將cpu_int賦值給gpu_int
cudamemcpy(gpu_int, cpu_int, 10 * sizeof(int), cudamemcpyhosttodevice);
show << <1, 1 >> > (gpu_int);
//改變gpu_int的值
changevalue << <1, 1 >> >(gpu_int);
show << <1, 1 >> > (gpu_int);
//將gpu_int的值賦值到cpu_int
cudamemcpy(cpu_int, gpu_int, 10 * sizeof(int), cudamemcpydevicetohost);
printf("----------華麗的分割線----------\n");
for (int i = 0; i < 10; i++)
//釋放gpu_int的空間
cudafree(gpu_int);
getchar();
return 0;
}
程式執行截圖如下:
CUDA 第乙個CUDA程式 addVector
本文主要通過對兩個浮點陣列中的資料進行相加,並將其結果放入第三個陣列中。其演算法分別在cpu gpu上分別執行,並比較了所需時間,強烈感受到gpu的平行計算能力。這裡,每個陣列的元素大小為30000000個。include include include include for the cuda r...
CUDA程式設計(一)第乙個CUDA程式
cuda compute unified device architecture 是顯示卡廠商nvidia推出的運算平台。是一種通用平行計算架構,該架構使gpu能夠解決複雜的計算問題。說白了就是我們可以使用gpu來並行完成像神經網路 影象處理演算法這些在cpu上跑起來比較吃力的程式。通過gpu和高並...
CUDA程式設計(一)第乙個CUDA程式
cuda compute unified device architecture 是顯示卡廠商nvidia推出的運算平台。是一種通用平行計算架構,該架構使gpu能夠解決複雜的計算問題。說白了就是我們可以使用gpu來並行完成像神經網路 影象處理演算法這些在cpu上跑起來比較吃力的程式。通過gpu和高並...