cuda筆記 第乙個cuda程式

2021-10-11 18:01:14 字數 1746 閱讀 5144

釋放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和高並...