东方耀AI技术分享

标题: cuda编程:数组运算放GPU上操作,看占显存 [打印本页]

作者: 东方耀    时间: 2021-6-8 11:37
标题: cuda编程:数组运算放GPU上操作,看占显存


cuda编程:数组运算放GPU上操作,看占显存


  1. #include <stdio.h>
  2. #include <unistd.h>

  3. __global__ void add(int *a, int *b, int *c, int num){
  4.     int i = threadIdx.x;
  5.     //线程id 每个线程是并行执行
  6.     //如果数据量很大,就需要很多block和thread;当足够大的数据时,需要考虑数据的划分的!
  7.     int j = blockIdx.x;
  8.     printf("线程id=%d;block块id=%d\n", i, j);
  9.     if (i<num){
  10.         //防止溢出
  11.         c[i] = a[i] + b[i];
  12.     }
  13.    
  14. }
  15. //cuda编程:数组运算放GPU上操作,看占显存
  16. int main(){
  17.     int num = 30;
  18.     int a[num], b[num], c[num];
  19.     int *a_gpu, *b_gpu, *c_gpu;

  20.     //cudaSetDevice(0);
  21.     for(int i=0;i<num;i++){
  22.         a[i] = i;
  23.         b[i] = i*i;
  24.     }
  25.     cudaMalloc(&a_gpu, num*sizeof(int));
  26.     cudaMalloc(&b_gpu, num*sizeof(int));
  27.     cudaMalloc(&c_gpu, num*sizeof(int));

  28.     cudaMemcpy(a_gpu, a, num * sizeof(int), cudaMemcpyHostToDevice);
  29.     cudaMemcpy(b_gpu, b, num * sizeof(int), cudaMemcpyHostToDevice);

  30.     // 具体计算操作
  31.     add<<<1,num>>>(a_gpu,b_gpu,c_gpu,num);

  32.     cudaMemcpy(c, c_gpu, num*sizeof(int), cudaMemcpyDeviceToHost);

  33.    

  34.     //看看结果

  35.     for (int i=0;i<num;i++){
  36.         printf("看结果:%d+%d=%d\n", a[i],b[i],c[i]);
  37.     }

  38.     usleep(10*1000*1000);  //10秒 看显存到底占用多少M?

  39.     cudaFree(a_gpu);
  40.     cudaFree(b_gpu);
  41.     cudaFree(c_gpu);

  42.     return 0;
  43. }
复制代码



作者: zouqiqi    时间: 2021-11-23 19:40
让天下人人学会人工智能!人工智能的前景一片大好!




欢迎光临 东方耀AI技术分享 (http://www.ai111.vip/) Powered by Discuz! X3.4