GPU编程——CUDA在VS2010下环境搭建

        最近学习GPU编程,现将GPU开发所需的的开发环境搭建过程总结如下,GPU编程首先离不开CUDA(NVIDIA显卡),GPU和CUDA在这里就不过多介绍。学习GPU编程,离不开一本好书的辅导,在这里向大家推荐一下《GPU高性能编程CUDA实战》。

        学习GPU编程,首先需要一个具有NVIDIA显卡的电脑,其他的显卡(例如ATI)是不支持CUDA编程的,有了硬件平台,接下来就是对开发环境的搭建。这里采用的是CUDA5.0 + VS2010,VS2010的安装在这里就不过多的进行介绍,CUDA可以到NVIDIADeveloper Zone去下载,下载地址为https://developer.nvidia.com/cuda-downloads。 CUDA安装好以后,安装程序也会自动在系统环境变量内修改“PATH”,


接下来手动添加

CUDA_BIN_PATH  %CUDA_PATH%\bin

CUDA_LIB_PATH  %CUDA_PATH%\lib\Win32

CUDA_SDK_BIN  %CUDA_SDK_PATH%\bin\Win32

CUDA_SDK_LIB  %CUDA_SDK_PATH%\common\lib\Win32


        VS项目测试:

        打开VS,新建项目


利用向导,会自动生成一段kernel累加代码,在代码main函数最后添加一行system(“pause”);


编译运行,打印输出如图所示


       恭喜,cuda已经在您的机器上安装成功了。

       通过函数getDeviceProperties()来获得设备的属性,在cudaDeviceProp结构中包含了以下信息:

struct cudaDeviceProp

{

      charname[256];                 //标识设备的ASCII字符串

      size_ttotalGlobalMem;          //设备上全局内存的总量,单位为字节

      size_tsharedMemPerBlock;   //在一个线程块(Block)中可使用的共享内存总量,单位为字节

      intregsPerBlock;           //每个线程块中可用的32位寄存器数量

      intwarpSize;                 //在一个线程束(warp)中包含的线程数量

      size_tmemPitch;           /在内存复制中最大的修正量(Pitch),单位为字节

      intmaxThreadsPerBlock;      //在一个线程块中包含的最大线程数目

      intmaxThreadsDim[3];         //在多维线程块数组中,每一维包含的最大线程数量

      intmaxGridSize [3];       //在一个线程格(Grid)中,每一维可以包含的线程块的数量

      size_ttotalConstMem;         //常量内存的总量

      intmajor;               //设备计算功能集的主版本号

      intminor;               //设备计算功能集的次版本号

      intclockRate;                //

      size_ttextureAlignment;  //设备的纹理对齐要求

      intdeviceoverlap;          //一个布尔类型值,表示设备是否可以同时执行一个cudaMemory()调用和一个核函数调用

      intmultiProcessorCount; //设备上多处理器的数量

      intkernelExecTimeoutEnabled;    //一个布尔值,表示该设备上执行的核函数是否存在运行时限制

      intintegrated;               //一个布尔值,表示设备是否是一个集成的GPU

      intcanMapHostMemory;      //一个布尔值,表示设备是否将主机内存映射到cuda设备地址空间

      intcomputeMode;         //表示设备的计算模式:默认,独占或禁止

      intmaxTexture1D;         //一维纹理的最大大小

      intmaxTexture2D[2];           //二维纹理的最大维数

      intmaxTexture3D[3];           //三维纹理的最大维数

      intmaxTexture2DArray[3];    //二维纹理数组的最大维数

      intconcurrentKernels ;         //一个布尔值,表示设备是否支持在同一个上下文中同时执行多个核函数

};

        如果有多个显卡设备,可以通过函数cudaGetDeviceCount()获得显卡设备的数量,也可以通过下面代码进行自动选择最佳匹配的显卡设备。

<span style="white-space:pre">	</span>int gpu_device_num = 0;
	cudaGetDeviceCount(&gpu_device_num);
	printf("gpu device num = %d\r\n",gpu_device_num);

	cudaDeviceProp prop;
	int dev;
	cudaGetDevice(&dev);
	printf("ID of current CUDA device: %d\r\n ",dev);
	memset(&prop,0,sizeof(cudaDeviceProp));
	prop.major = 1;
	prop.minor = 3;
	cudaChooseDevice(&dev,&prop);
	printf("ID of CUDA device closest to reversion 1.3: %d\r\n",dev);
	cudaSetDevice(dev);
	cudaGetDeviceProperties(&prop,dev);


 

 

 


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值