在VS上配置CUDA运行环境的问题与解决方法

在VS上配置CUDA运行环境的问题与解决方法

1、VS新建项没有NVIDIA CUDA选项

在VS2019上添加新建项
在VS上配置CUDA运行环境的问题与解决方法_第1张图片
在VS2015上添加新建项
在VS上配置CUDA运行环境的问题与解决方法_第2张图片
这里可以参考如下链接:
https://forums.developer.nvidia.com/t/no-project-templates-in-vs2017/69306
主要的问题是在D:\VS2019\VS2019\Common7\IDE\Extensions\NVIDIA路径中(上述路径以实际安装路径为主)没有存在对应的向导文件
创建$上述路径\CUDA 10.0 Wizards\10.0文件夹,新建两个快捷方式
extension.vsixmanifest

Nvda.Vsip.CudaWizards.dll.pkgdef
在VS上配置CUDA运行环境的问题与解决方法_第3张图片
打开 Visual Studio 2017 开发人员命令提示符并运行“devenv.com /setup /nosetupvstemplates”
最终可以解决上述问题

2、Windows上能否同时存在两个版本的CUDA?

答案是可以的,我的电脑上就同时安装了CUDA v8.0和CUDA v10.0,如下图

在VS上配置CUDA运行环境的问题与解决方法_第4张图片 而且对于两个CUDA我都在系统里添加了环境变量,如下图
在这里插入图片描述
其中CUDA_PATH我设置的是CUDA v10.0的路径,所以在cmd中输入“nvcc -V”查看CUDA版本时显示的是10.0的信息
在这里插入图片描述
在具体的使用时,通过在项目属性中添加不同路径下的静态库.lib或属性文件即可以在不同的CUDA版本中切换运行,我在两个项目中分别使用CUDA8.0和CUDA10.0,都可以正常运行
在这里插入图片描述
在VS上配置CUDA运行环境的问题与解决方法_第5张图片

3、无法打开helper_math.h文件或其他文件

首先要明确的是help_math.h是CUDA的一个自带的头文件,可以使用一些数学函数进行加速计算,CUDA在安装时会将该类型的文件会统一下载这些文件
在VS上配置CUDA运行环境的问题与解决方法_第6张图片
需要将这个头文件所在的路径添加到我们的项目中
在VS上配置CUDA运行环境的问题与解决方法_第7张图片

4、调用部分CUDA函数时出现“无法解析外部符号”的报错

1)error LNK2019: 无法解析的外部符号 _cudaGetDeviceCount@4,该符号在函数 “bool __cdecl InitCUDA(void)” (?InitCUDA@@YA_NXZ) 中被引用
2)error LNK2019: 无法解析的外部符号 _cudaGetDeviceProperties@8,该符号在函数 “bool __cdecl InitCUDA(void)” (?InitCUDA@@YA_NXZ) 中被引用
…etc.
出现这种问题是因为未添加cudart.lib依赖项
在项目->project 属性->链接器->输入->附加依赖项中添加对应cudart.lib文件
在VS上配置CUDA运行环境的问题与解决方法_第8张图片
如果在CUDA安装时使用的时默认安装路径,则cudart.lib文件的路径应该如下:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64\cudart.lib

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\Win32\cudart.lib
这里需要注意的是存在32位和64位的文件,分别对应VS以x86和x64两种方式运行,注意将两者进行对应,否则还是会报错
这里我为了保险起见将两个文件都添加了

5、测试运行

最后输入代码测试运行即可,这里我从网上随便摘抄了一段代码进行测试
可以创建一个.cu文件输入以下内容:

#include 
#include 
#include "cuda_runtime.h" 
#include "device_launch_parameters.h" 

bool InitCUDA()

{

	int count;
	cudaGetDeviceCount(&count);
	if (count == 0)
	{
		fprintf(stderr, "There is no device.\n");
		return false;
	}

	int i;
	for (i = 0; i < count; i++)
	{
		cudaDeviceProp prop;
		if (cudaGetDeviceProperties(&prop, i) == cudaSuccess)
		{
			if (prop.major >= 1)
			{
				break;
			}
		}
	}
	if (i == count)
	{
		fprintf(stderr, "There is no device supporting CUDA 1.x.\n");
		return false;
	}
	cudaSetDevice(i);
	return true;
}

然后创建一个cpp文件输入以下内容:

#pragma once
#include 
#include "utils.h"
#include "cudaTest.cu"

using namespace std;

int main(int argc, char** argv)
{
	if (!InitCUDA())
	{
		return 0;
	}

	printf("HelloWorld, CUDA has been initialized.\n");
	system("pause");

	return 0;
}

最终测试结果如下:
在这里插入图片描述

你可能感兴趣的:(visual,studio,c++,cuda)