CUDA GPU基础调用:单线程加法。

之前代码出现执行出现问题,执行不了设备上的代码,后面将cuda9.2 --> cuda9.0就解决这个问题,看来cuda版本与驱动版本这些迭代版本问题还是很有迷惑性的。

本章代码源于一个学习材料,材料地址也忘了。写本文目的是为了将代码中的一些重要信息给描述出来,供后续参考:

#include <stdio.h>
__global__ void add(int *a, int *b, int *c) 
{
   *c = *a + *b;
}

int main(void) 
{
   int a, b, c;
   // host copies of a, b, c
   int *d_a, *d_b, *d_c;  
   // device copies of a, b, c
   int size = sizeof(int);   
   // Allocate space for device copies of a, b, c
    
    // 下面这三个语句的形式非常重要,这表明cuda程序分配的内存问题,内存分配在device上,但是它
    // 在设备上的地址则在host上的内存里面,所以才有了这个”指向指针变量的指针变量“
   cudaMalloc((void **)&d_a, size);
   cudaMalloc((void **)&d_b, size);
   cudaMalloc((void **)&d_c, size); 
 
   // Setup input values   a = 2;   b = 7; 
   // Copy inputs to device

   cudaMemcpy(d_a, &a, size, cudaMemcpyHostToDevice);
   cudaMemcpy(d_b, &b, size, cudaMemcpyHostToDevice); 
 
  // Launch add() kernel on GPU
   add<<<1,1>>>(d_a, d_b, d_c); 
     
   printf(" c = %d \n" , c);
  // Copy result back to host
   cudaMemcpy(&c, d_c, size, cudaMemcpyDeviceToHost); 
 
  // Cleanup
   cudaFree(d_a);
   cudaFree(d_b);
   cudaFree(d_c);
   return 0;  
} 

并且获取设备信息的代码也很重要,因为之前使用cuda9.2时候,这个代码就可以无报错的执行,但是却不能执行在device上的代码。所以这时候,获取设备就可以来验证cuda版本适配是否有问题了。

获取设备信息代码如下:

#include<iostream>
int main()
{
    cudaDeviceProp prop;
    int count;
    cudaGetDeviceCount(&count);//获取设备数目,比如GTX295 有两个GPU(也就是双核) count为2
    for(int i=0;i<count;i++)
    {
        cudaGetDeviceProperties(&prop,i);//将第i个GPU数据放到prop中
        std::cout<<"显卡名称:"<<prop.name<<std::endl;
        std::cout<<"显存大小:"<<prop.totalGlobalMem/1024/1024<<" MB"<<std::endl;
        std::cout<<"一个block的共享内存大小:"<<prop.sharedMemPerBlock/1024<<" KB"<<std::endl;
        std::cout<<"block最大线程数:"<<prop.maxThreadsPerBlock<<std::endl;
    }
return 0;
}

Done!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值