CUDA在VS2010下5.5设置

本文介绍了如何在VS2010下配置CUDA5.5项目,解决创建CUDA项目时可能出现的错误,并详细讲解如何设置CUDA C/C++关键字和函数的高亮显示,包括CUDA关键字、CUDA函数高亮以及通过Visual AssistX实现代码提示。还提到了如何解决VS2010中CUDA函数下有波浪线的问题以及获取CUDA设备属性的方法。
摘要由CSDN通过智能技术生成

CUDA5.5是集成的CUDA ToolKit和SDK于一身的软件,可以到NVIDIA Developer Zone去下载,下载地址https://developer.nvidia.com/cuda-downloads


1.创建一个cuda项目

        由于安装cuda5.5的时候已经和vs2010绑定,所以直接可以创建一个cuda项目。选择cuda 5.5 runtime就可以。

        此时vs2010会自动为这个项目添加一个cuda程序:kernel.cu。直接编译这个.cu文件,可能会出现"转换到 COFF 期间失败: 文件无效或损坏"这样的错误信息,修改如下所示:

        右键工程->属性->配置属性-> 清单工具->输入和输出->嵌入清单,选择[否]

2.CUDA C/C++关键字和函数高亮显示

        在上面.cu文件中发现CUDA C/C++的关键字__global__等没有高亮显示,而且还有下划曲线。下面进行CUDA C/C++关键字和函数的语法高亮显示,配置Visual AssistX 函数高亮,代码提示等功能。

下面是关于代码高亮的设置。共三个设置

2.1.cu文件中C/C++关键字高亮

这个设置是让VS2010编辑.cu文件时,把.cu文件里的C/C++语法高亮。

设置方法: 在VS2010的菜单 依次点击:“工具|选项|文本编辑器|文件扩展名”,在这个界面里: “编辑器”下拉框选“Microsoft Visual C++”,在“Extension”文本框输入.cu 点击“添加”按钮 ,重复工作把.cuh 添加为vc++类型,点击确定按钮。 把全部.cu文件关闭,再打开,.cu文件C++关键字就高亮了。如果不行就重启VS2010。但是CUDA的关键字还是黑色的,下一步把CUDA关键字高亮显示。

2.2.CUDA关键字高亮

为了让CUDA的关键字,如__device__、dim3之类的文字高亮,需要如下步骤:

把SDK_PATH\C\doc\syntax_highlighting\usertype.dat(可能不在这个文件夹,在C盘直接搜索usertype.dat这个文件即可)

复制到X:\Program Files (X86)\Microsoft Visual Studio 10.0\Common7\IDE\ 目录下 

这里 X:是安装VS2010盘符,这是win7 64位下的路径。

 

注意:win7 32系统复制到这个目录里:

X:\Program Files \Microsoft Visual Studio 10.0\Common7\IDE\

再次强调:SDK_PATH要换成安装SDK的实际路径,不要直接使用这个字符串。

VS2010需要重启,重启后打开.cu文件,CUDA的关键字应该变成蓝色了。

2.3. CUDA 函数高亮,及CUDA函数输入代码提示
实现这个功能就要使用VAssistX了。 首先安装支持VS2010的Visual AssistX, 在CUDA 安装前、后安装都行。需要两步实现需要的功能:

a) 让Visual AssistX支持CUDA函数高亮和代码完成。在VS2010菜单里依次点击: “VAssistX->Visual assist X Options->Projects->C/C++Directories”在这个界面的 “Platform”下拉框选 Custom,在“Show Directories for..“下拉框选 Other include files, 然后在下面的输入框里,新建、添加三个路径,点击确定,三个路径分别如下:

SDK_PATH的\c\common\inc
       SDK_PATH的\shared\inc(这个没找到)
       X:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include

这里SDK_PATH要用你安装的SDK路径代替,X:是你的CUDA toolkit安装盘符。

这样分别在这三个目录里面的.h文件定义的函数和类型VAssistX会帮我们在编辑文件时候实现高亮和完成代码。如果少包含一个路径,这个目录里的.h定义的函数和类型就不会高亮和提示了。

b)让Visual AssistX支持.cu文件,也就让Visual AssistX帮我们实现.cu文件高亮和代码完成功能,需要编辑注册表。首先关闭VS2010,点击开始菜单输入regedit打开注册表,找到如下位置:HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X\VANet10。在右边找到ExtSource项目,鼠标右键选修改,在原有文字后添加如下文字:.cu;.cuh; 确定后
关闭注册表,重新打开vs2010,Visual AssistX开始支持.cu及.cuh文件的语法高亮及代码完成。此时.cu文件的CUDA函数是高亮的,使用函数名符号就会自动提示函数全称,参数类型等信息了。

经过上面的安装,开发程序应该没问题了,但会发现有如下的问题:

1. VS2010显示.cu文件时,有很多CUDA函数下有波浪线

2. 在.cu文件里使用VS2010的“Go to definition”功能查无法找到CUDA函数的定义。

这两个问题的原因是VS2010不认识这些函数,没有指定它们在那个头文件里包含的。解决方法其实是一样的,把CUDA tookit 和CUDA SDK的头文件路径加到VS2010的VC++目录里面。

 

        CUDA编程主要做的就是和GPU打交道,在和这样的一个陌生的家伙交流之前,我们需要做的就是先得认识和熟悉这个家伙。

在深入研究如何编写设备代码之前,我们需要通过某种机制来判断计算机中当前有哪些设备,以及每个设备都支持哪些功能。幸运的是,可以通过一个非常简单的接口来获得这种信息。首先,我们希望知道在系统中有多少个设备是支持CUDA架构的,并且这些设备能够运行基于CUDA C编写的核函数。要获得CUDA设备的数量.可以调用cudaGetDeviceCount()。这个函数的作用从色的名字就可以看出来。在调用cudaGetDeviceCount()后,可以对每个设备进行迭代、井查询各个设备的相关信息。CUDA运行时将返回一个cudaDevice Prop类型的结构,其中包含了设备的相关属性。我们可以获得哪些属性?从CUDA 3.0开始,在cudaDeviceProp结构中包含了以下信息:

  1. struct cudaDeviceProp   
  2. {  
  3.     char name[256];         //标识设备的ASCII字符串  
  4.     size_t totalGlobalMem;          //设备上全局内存的总量,单位为字节  
  5.     size_t sharedMemPerBlock;   //在一个线程块(Block)中可使用的共享内存总量,单位为字节  
  6.     int regsPerBlock;       //每个线程块中可用的32位寄存器数量  
  7.     int warpSize;           //在一个线程束(warp)中包含的线程数量  
  8.     size_t memPitch;        /在内存复制中最大的修正量(Pitch),单位为字节  
  9.     int maxThreadsPerBlock;     //在一个线程块中包含的最大线程数目  
  10.     int maxThreadsDim[3];       //在多维线程块数组中,每一维包含的最大线程数量  
  11.     int maxGridSize [3];        //在一个线程格(Grid)中,每一维可以包含的线程块的数量  
  12.     size_t totalConstMem;       //常量内存的总量  
  13.     int major;          //设备计算功能集的主版本号  
  14.     int minor;          //设备计算功能集的次版本号  
  15.     int clockRate;          //  
  16.     size_t textureAlignment;    //设备的纹理对齐要求  
  17.     int deviceoverlap;      //一个布尔类型值,表示设备是否可以同时执行一个cudaMemory()调用和一个核函数调用  
  18.     int multiProcessorCount;    //设备上多处理器的数量  
  19.     int kernelExecTimeoutEnabled;   //一个布尔值,表示该设备上执行的核函数是否存在运行时限制  
  20.     int integrated;         //一个布尔值,表示设备是否是一个集成的GPU  
  21.     int canMapHostMemory;       //一个布尔值,表示设备是否将主机内存映射到cuda设备地址空间  
  22.     int computeMode;        //表示设备的计算模式:默认,独占或禁止  
  23.     int maxTexture1D;       //一维纹理的最大大小  
  24.     int maxTexture2D[2];        //二维纹理的最大维数  
  25.     int maxTexture3D[3];        //三维纹理的最大维数  
  26.     int maxTexture2DArray[3];   //二维纹理数组的最大维数  
  27.     int concurrentKernels ;     //一个布尔值,表示设备是否支持在同一个上下文中同时执行多个核函数  
  28. };  

设备属性的使用

通过上面的结构体,我们大致了解了设备的属性,然后我们就可以通过这个结构体来查询设备属性了。可能会有人问,到底我们需要这些设备属性来干嘛,别着急,以后在编写相关性能优化的代码的时候,就知道了解这些属性的好处了。现在我们只需要知道方法就可以了。

首先我们可以通过两个函数,第一个就是上面的cudaGetDeviceCount()来选择设备,然后循环地通过getDeviceProperties()来获得设备的属性,之后我们就可以通过这样的一个结构体变量将设备的属性值获取出来。

  1. #include <cuda_runtime.h>   
  2. #include <iostream>   
  3. using namespace std;  
  4.   
  5. int main()  
  6. {  
  7.     cudaDeviceProp prop;  
  8.   
  9.     int count;  
  10.     cudaGetDeviceCount(&count);  
  11.   
  12.     for(int i = 0 ; i < count ; i++)  
  13.     {  
  14.         cudaGetDeviceProperties(&prop,i);  
  15.         cout<<"the information for the device : "<<i<<endl;  
  16.         cout<<"name:"<<prop.name<<endl;  
  17.         cout<<"the memory information for the device : "<<i<<endl;  
  18.         cout<<"total global memory:"<<prop.totalGlobalMem<<endl;  
  19.         cout<<"total constant memory:"<<prop.totalConstMem<<endl;  
  20.         cout<<"threads in warps:"<<prop.warpSize<<endl;  
  21.         cout<<"max threads per block:"<<prop.maxThreadsPerBlock<<endl;  
  22.         cout<<"max threads dims:"<<prop.maxThreadsDim[0]<<"  "<<prop.maxThreadsDim[1]<<  
  23.             "  "<<prop.maxThreadsDim[2]<<endl;  
  24.         cout<<"max grid dims:"<<prop.maxGridSize[0]<<"  "<<  
  25.             prop.maxGridSize[1]<<"  "<<prop.maxGridSize[2]<<endl;  
  26.   
  27.     }  
  28.     return 0;  
  29. }  

 


     这里只是一部分的属性值,具体的其他属性值可以按照这样的方法来获取。

 

 


 


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值