目录
前言
初次尝试CUDA编程,在Windows上配置CUDA环境属实麻烦。而且Visual Studio 2019在我做实验时还不支持CUDA,只能自己一步步踩坑配置一个模板…
一、 VS2019配置CUDA v10.0
- 前置条件:已经安装了Visual Studio。建议安装2017及以下版本,会省很多事情。
- 下载CUDA,可以选择旧版本,但是一定要注意CUDA版本和自己的显卡是否适配,是否支持cuDNN加速。如果选择旧版本安装,就选择Legacy Releases,版本号为v10.0,进行下载即可。地址为
https://developer.nvidia.com/cuda-downloads

-
下载完成后,运行文件。注意,此时出现的地址为临时文件的存放地址,并不是最终安装的地址,可以随意选择。

-
建议初学者选择精简安装即可,即使选择自定义安装也需要安装所有的组件。截至我当初做实验时,也就是2020年上半年,CUDA10.0乃至最新的10.2都只支持Visual Studio 2017及以下版本,而我安装的是Visual Studio 2019,其中并没有CUDA组件,需要进行一系列操作,相当繁琐,强烈建议安装Visual Studio 2017。如果已经安装了2019的话,之后会提供一个解决办法。
-
如果正确安装完成后,再打开Visual Studio,新建项目中即可看到对应的CUDA模板工程文件。
二、解决模板无法生成的问题
(1)思路
可以得知,目前VS2019并不支持CUDA,2017是支持的。同时VS版本往往是向下兼容的,因此,通过安装2017的编译器,采取一些小措施修改一下,即可解决模板无法生成的问题。
(2)安装VS2017编译器
首先,请打开Visual Studio Installer,安装MSVC v141 – VS 2017 C++ x64/x86生成工具。这个工具对应了2017版本的编译器。

(3)原因分析
在默认安装CUDA的情况下,可以在此处找到sample文件:
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0
选择其中一个,比如:
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0\1_Utilities\deviceQuery
进入后加载deviceQuery_vs2017.sln,会提示:intelliSense不可用。为了追踪项目加载失败的原因,我们需要设置环境变量追踪一下。

打开Developer Command Prompt for VS 2019,输入set TraceDesignTime=true,再输入devenv使环境变量生效。

之后在跳出来的Visual Studio窗口打开之前的sln文件,下方就会显示日志地址了。

找到该日志,在C:\Users\你的用户名\AppData\Local\Temp\,在最下方有以下提示。

现在,就可以解决问题了。
(4)问题解决
打开NVIDIA GPU Computing Toolkit目录下的
CUDA\v10.0\extras\visual_studio_integration\ MSBuildExtension
可以看到其中有4个文件,有一个就是CUDA v10.0.props,就是我们想要的配置文件。将其复制到图片中所说的目录下:
D:\Software\Microsoft Visual Studio 2019\MSBuild\Microsoft\VC\v160\BuildCustomizations
注意,每个人安装Visual Studio的位置不同。之后,再打开deviceQuery_vs2017.sln文件,右上角在“解决方案资源管理器”的项目上右键选择重新生成,就不会有任何报错了。这时,编译一下,可以看到结果。

当出现Result=PASS时,代表没有问题了。之后,需要更改一下设置属性,如下图所示,这样是为了保证可以搜寻到生成的文件。然后,更改一下.cpp文件的名称作为初始名称,并且添加一个文件,将其命名为kernel.cu作为核文件,以后内核函数将会在这里编写。



另外,在编译过程中会出现某些函数比如__syncthreads(),或者内核函数调用中的<<< >>>等,可能会无法识别。无需在意,这是Visual Studio无法识别,CUDA专用编译器nvcc可以正常编译。
最后的最后,选择项目-导出模板,设置一下,比如这样。

之后你就会发现,在新建项目中,已经可以找到CUDA模板了。

三、奇偶排序算法实现及结果分析
(1)串行部分
首先,先写串行的算法作为基准。代码如下:
//串行serial.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <sys/time.h><

本文介绍了在VS2019上配置CUDA v10.0的过程,包括下载、安装及解决模板无法生成的问题。还给出了奇偶排序算法的串行和并行实现,并对结果进行分析。测试表明,随着数据量增大,GPU在排序中的作用逐渐凸显,与CPU性能差距明显。
7581

被折叠的 条评论
为什么被折叠?



