|
cuda编程:数组运算放GPU上操作,看占显存
- #include <stdio.h>
- #include <unistd.h>
- __global__ void add(int *a, int *b, int *c, int num){
- int i = threadIdx.x;
- //线程id 每个线程是并行执行
- //如果数据量很大,就需要很多block和thread;当足够大的数据时,需要考虑数据的划分的!
- int j = blockIdx.x;
- printf("线程id=%d;block块id=%d\n", i, j);
- if (i<num){
- //防止溢出
- c[i] = a[i] + b[i];
- }
-
- }
- //cuda编程:数组运算放GPU上操作,看占显存
- int main(){
- int num = 30;
- int a[num], b[num], c[num];
- int *a_gpu, *b_gpu, *c_gpu;
- //cudaSetDevice(0);
- for(int i=0;i<num;i++){
- a[i] = i;
- b[i] = i*i;
- }
- cudaMalloc(&a_gpu, num*sizeof(int));
- cudaMalloc(&b_gpu, num*sizeof(int));
- cudaMalloc(&c_gpu, num*sizeof(int));
- cudaMemcpy(a_gpu, a, num * sizeof(int), cudaMemcpyHostToDevice);
- cudaMemcpy(b_gpu, b, num * sizeof(int), cudaMemcpyHostToDevice);
- // 具体计算操作
- add<<<1,num>>>(a_gpu,b_gpu,c_gpu,num);
- cudaMemcpy(c, c_gpu, num*sizeof(int), cudaMemcpyDeviceToHost);
-
- //看看结果
- for (int i=0;i<num;i++){
- printf("看结果:%d+%d=%d\n", a[i],b[i],c[i]);
- }
- usleep(10*1000*1000); //10秒 看显存到底占用多少M?
- cudaFree(a_gpu);
- cudaFree(b_gpu);
- cudaFree(c_gpu);
- return 0;
- }
复制代码
|
|