(转)CUDA学习笔记:CUDA Toolkit安装与项目设置

0 环境

  • Win7 32bit
  • VS2013
  • CUDA Toolkit 6.5

1 下载

最新版为CUDA Toolkit 7,下载之后发现该版本只支持64bit系统,我的系统是win7 32位的,于是选择了上一版本6.5,历史版本下载地址https://developer.nvidia.com/cuda-toolkit-archive

2 安装

只有一个安装文件,运行后首先会检查是否安装有支持cuda的NVIDIA显卡,然后自定义安装,我用不到3D相关的就都没选,默认路径太长,改了一下。CUDA Toolkit: “C:\NVIDIA\CUDA Toolkit”, CUDA Samples: “C:\NVIDIA\CUDA Samples”。然后下一步到安装完成。我同时装有VS2008与VS2013,但只有2013可以用,可能是cuda默认配置到高版本中吧。

3 测试

运行CUDA Samples\bin\win32\Release中的deviceQuery.exe程序查看是否安装成功以及显卡cuda信息。注意用命令行运行(可以直接拖动文件到命令行窗口中回车运行),否则结果一闪而过。该程序会输出CUDA Driver版本、CUDA计算能力、显存大小等信息,最后一行Result = PASS表示通过测试。
对于CUDA Toolkit 7,安装后Samples只有工程源码,没有可执行文件,需要自己编译一下相应工程生成deviceQuery.exe(Samples默认安装在ProgramData路径下,找了好久才找到)。

4 高亮

可能是我装的cuda与vs的版本都比较新吧,cu文件的语法高亮显示与函数自动提示并不需要任何配置。(如果是在非cuda runtime项目中,默认只有c++语法部分高亮,但添加cuda的附加依赖项(详细见后文6.3.3)后,全部均可高亮显示)

5 cuda工程

  1. 新建一个cuda runtime工程,会自动生成一个kernel.cu文件,实现两个向量相加
  2. 为了防止闪退,在main()函数最后加上getchar()语句,或者使用system("pause"),不过后者要加上头文件#include <stdlib.h>
  3. 如果运行出错可能是计算能力设置错误,项目属性 -> 配置属性 -> CUDA C/C++ -> Device -> Code Generation,默认为compute_20,sm_20,我的显卡为1.2则改为compute_12,sm_12
  4. 运行成功则输出{1,2,3,4,5} + {10,20,30,40,50} = {11,22,33,44,55}

6 C++控制台工程/MFC工程中使用cuda

二者都是非cuda runtime的工程,配置方法完全一样,下面以控制台工程为例说明

  1. 新建控制台工程(VC++ -> 常规 -> 空项目)
  2. 添加cu文件(这里使用cuda runtime工程自动生成的模版文件,即将5中的kernel.cu拷贝到该工程路径下然后添加),可以新建一个筛选器专门存放cu文件,这样文件较多时看起来比较清楚
    项目结构
  3. cuda配置

  1. 生成自定义,选中CUDA
    生成自定义 这里写图片描述
  2. 计算能力设置,见5.3
  3. 附加依赖项设置,项目属性 -> 配置属性 -> 链接器 -> 输入 -> 附加依赖项,编辑加入cuda runtime工程中的对应内容,具体如下

cudart.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib

  • kernel.cu文件属性“项类型”设为 CUDA C/C++

  • 修改kernel.cu文件,只需要将main()函数改为普通函数,如addVec()。相关代码片段如下

  • // ……
    // 此处main函数改为addVec
    // int main()
    int addVec()
    {
        const int arraySize = 5;
        const int a[arraySize] = { 1, 2, 3, 4, 5 };
        const int b[arraySize] = { 10, 20, 30, 40, 50 };
        int c[arraySize] = { 0 };
    
        // 中间代码省略……
    
        if (cudaStatus != cudaSuccess) {
            fprintf(stderr, "cudaDeviceReset failed!");
            return 1;
        }
        getchar();
        return 0;
    }
    // ……
      
      
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 添加一个cpp文件,内容如下

  • extern int addVec();
    
    int main(void)
    {
        addVec();
        return 0;
    }
      
      
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 编译运行,应该可以输出{1,2,3,4,5} + {10,20,30,40,50} = {11,22,33,44,55}了
    运行结果
  • 本文原文链接 http://blog.csdn.net/yanglx2022/article/details/46446105

    0 环境

    猜你喜欢

    转载自blog.csdn.net/zyb418/article/details/88048784
    今日推荐