CUDA+VS2017+win环境下 cuda工程环境搭建(解决标识符未定义或申明)

引言

在学习CUDA并行计算原理时,在VS下新建了一个CUDA工程,但是对加载函数定义中的一些CUDA标识符无法正常识别。错误如下:

__device__   错误:该符号未定义

这个标识符的作用是声明函数从设备端调用并在设备端执行

前提准备(CUDA和VS的安装)

  • Visual Studio(如果确定CUDA和VS安装正确,可以直接转到到Visual Studio配置。) :首先安装VS必要组件(C++桌面程序) 图-1创建CUDA工程

  • CUDA 在 NVIDIA官网链接(此处是CUDA11.0)上下载符合自己显卡且所需版本的CUDA安装,安装后需要配置环境变量,这个网上教程很多,不再赘述。
    安装完成后,记得使用测试程序测试一下是否正确安装。

Visual Studio 配置

  1. 创建CUDA工程:打开vs,创建新项目,选择CUDA项目,填写项目名称选择路径。如上图所示。

  2. 增加包含目录
    右键项目属性->VC++目录->包含目录,将安装好CUDA中include加入包含目录中,将下方这两个路径加入。
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include
    C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.0\common\inc在这里插入图片描述

  3. 增加项目扩展名
    点击上方菜单栏工具=>选项=>文本编辑器=>文件扩展名,在扩展名栏中输入.cu,并选择编辑器为:Microsoft Visual C++。
    在这里插入图片描述

5.工具–>选项–>项目和解决方案–>VC++项目设置,添加要包括的扩展名".cu"

在这里插入图片描述
6. 右键打开的项目–>生成依赖项–>生成自定义–>勾选CUDA v11.0
在这里插入图片描述

测试

测试案例来自: [CUDA高性能并行计算链接]第三章中项目dist_v1_cuda
下面展示一些 案例代码

// An highlighted block

#include<stdio.h>
#include<iostream>
#define N 64
#define TPB 32

__device__ float scale(int n, int i) {
	return((float)i) / (n - 1);
}
__device__ float distance(float x1, float x2) {
	return sqrt((x2 - x1)*(x2 - x1));
}

__global__ void distanceKernel(float *d_out,float ref,int len)
{
	const int i = blockIdx.x*blockDim.x + threadIdx.x;
	float x = scale(i, N);
	d_out[i] = distance(x, ref);
	printf("i=%2d:dist from %f to %f is %f.\n", i, ref, x, d_out[i]);
}
int main() {
	float ref = 0.5f;
	float *d_out = 0;
	cudaMalloc(&d_out, N * sizeof(float));
	distanceKernel <<<N/TPB, TPB>>>(d_out,ref,N);
	system("pause");
	cudaFree(d_out);
	return 0;

}

编译成功
在这里插入图片描述
结果
在这里插入图片描述

Reference

[1] Storti D , Yurtoglu M . CUDA for Engineers: An Introduction to High-Performance Parallel Computing[C]// Addison-Wesley Professional. Addison-Wesley Professional, 2016.
[2] 欧阳求败 https://www.bilibili.com/read/cv7335974/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值