win10 64 位 VS2013 + cuda10 安装编译

目录

一  硬件准备

二 安装显卡驱动

三 安装CUDA

四 配置环境变量

五 在VS2013中配置测试CUDA

六 安装多个版本的CUDA


 

二 安装显卡驱动

三 安装CUDA

四 配置环境变量

五 在VS2013中配置测试CUDA


最近在github上下载了一个程序,需要安装cuda,折腾了两天终于安装上了.

一  硬件准备

安装cuda需要电脑中带有NVIDIA的显卡,恰好我的笔记本电脑带有NVIDIA的显卡

查看电脑的显卡:设备管理器->显示适配器

二 安装显卡驱动

去NVIDIA的官网搜索自己电脑中显卡对应的驱动,比如我的显卡,就搜索

之前我装的时候没注意这个,是同事告诉我的,带有NVIDIA的显卡并不代表电脑中就有相应的显卡驱动,这个显卡驱动是需要自己去安装的.

三 安装CUDA

下载地址https://developer.nvidia.com/cuda-downloads

我安装的是cuda_10.0.130_411.31_win10.exe

安装的路径最好用默认的路径,这样后面配置环境变量就不容易出错了.安装时间大概需要二三十分钟,这个时间可以干点别的.

四 配置环境变量

这一步很重要!!!

第三步安装之后电脑中会自动生成两个系统变量

另外需要手动添加五个系统变量

(1)CUDA_BIN_PATH

%CUDA_PATH%\bin

(2)CUDA_LIB_PATH

%CUDA_PATH%\lib\x64

(3)CUDA_SDK_PATH

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0

(4)CUDA_SDK_BIN_PATH

%CUDA_SDK_PATH%\bin\win64

(5)CUDA_SDK_LIB_PATH

%CUDA_SDK_PATH%\common\lib\x64

还有非常重要的一步!!!!!要在系统变量path中添加四个变量值

%CUDA_LIB_PATH%

%CUDA_BIN_PATH%

%CUDA_SDK_BIN_PATH%

%CUDA_SDK_LIB_PATH%

我踩过的坑:  我忘记配置path中四个变量值,结果在VS编译成功之后,运行的时候报错,

出现这个问题我就想找不到dll,我就自己去找,然后在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin找到了

于是我就明白是环境变量没有配置好.在path中添加了四个变量值然后重启电脑就可以了.

注意:重启电脑使环境变量生效.

五 在VS2013中配置测试CUDA

打开VS2013并建立一个空的控制台项目

a.右键工程 -> 生成依赖项 -> 生成自定义

b 配置属性管理器,新建x64.

c.右键项目 -> 属性 -> 配置属性 -> VC++目录,添加以下两个包含目录:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0\common\inc

再添加以下两个库目录:

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0\common\lib\x64

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64

d.右键项目 -> 属性 -> 配置属性 ->链接器 -> 常规 -> 附加库目录,添加以下目录:

%CUDA_PATH_V10_0%\lib\$(Platform)

e.右键项目 -> 属性 -> 配置属性 ->链接器 -> 输入 -> 附加依赖项,添加以下库:

其实就是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64下的库文件(27个)

cublas.lib
cuda.lib
cudadevrt.lib
cudart.lib
cudart_static.lib
cufft.lib
cufftw.lib
curand.lib
cusolver.lib
cusparse.lib
nppc.lib
nppial.lib
nppicc.lib
nppicom.lib
nppidei.lib
nppif.lib
nppig.lib
nppim.lib
nppist.lib
nppisu.lib
nppitc.lib
npps.lib
nvblas.lib
nvgraph.lib
nvml.lib
nvrtc.lib
OpenCL.lib

f. 右键源文件 -> 添加 -> 新建项,选择CUDA C++/C文件,创建main.cu

在main.cu中输入以下程序

#include "cuda_runtime.h"
#include "cublas_v2.h"

#include <time.h>
#include <iostream>

using namespace std;

// 定义测试矩阵的维度
int const M = 5;
int const N = 10;

int main()
{
	// 定义状态变量
	cublasStatus_t status;

	// 在 内存 中为将要计算的矩阵开辟空间
	float *h_A = (float*)malloc(N*M*sizeof(float));
	float *h_B = (float*)malloc(N*M*sizeof(float));

	// 在 内存 中为将要存放运算结果的矩阵开辟空间
	float *h_C = (float*)malloc(M*M*sizeof(float));

	// 为待运算矩阵的元素赋予 0-10 范围内的随机数
	for (int i = 0; i<N*M; i++) {
		h_A[i] = (float)(rand() % 10 + 1);
		h_B[i] = (float)(rand() % 10 + 1);

	}

	// 打印待测试的矩阵
	cout << "矩阵 A :" << endl;
	for (int i = 0; i<N*M; i++){
		cout << h_A[i] << " ";
		if ((i + 1) % N == 0) cout << endl;
	}
	cout << endl;
	cout << "矩阵 B :" << endl;
	for (int i = 0; i<N*M; i++){
		cout << h_B[i] << " ";
		if ((i + 1) % M == 0) cout << endl;
	}
	cout << endl;

	/*
	** GPU 计算矩阵相乘
	*/

	// 创建并初始化 CUBLAS 库对象
	cublasHandle_t handle;
	status = cublasCreate(&handle);

	if (status != CUBLAS_STATUS_SUCCESS)
	{
		if (status == CUBLAS_STATUS_NOT_INITIALIZED) {
			cout << "CUBLAS 对象实例化出错" << endl;
		}
		getchar();
		return EXIT_FAILURE;
	}

	float *d_A, *d_B, *d_C;
	// 在 显存 中为将要计算的矩阵开辟空间
	cudaMalloc(
		(void**)&d_A,    // 指向开辟的空间的指针
		N*M * sizeof(float)    // 需要开辟空间的字节数
		);
	cudaMalloc(
		(void**)&d_B,
		N*M * sizeof(float)
		);

	// 在 显存 中为将要存放运算结果的矩阵开辟空间
	cudaMalloc(
		(void**)&d_C,
		M*M * sizeof(float)
		);

	// 将矩阵数据传递进 显存 中已经开辟好了的空间
	cublasSetVector(
		N*M,    // 要存入显存的元素个数
		sizeof(float),    // 每个元素大小
		h_A,    // 主机端起始地址
		1,    // 连续元素之间的存储间隔
		d_A,    // GPU 端起始地址
		1    // 连续元素之间的存储间隔
		);
	cublasSetVector(
		N*M,
		sizeof(float),
		h_B,
		1,
		d_B,
		1
		);

	// 同步函数
	cudaThreadSynchronize();

	// 传递进矩阵相乘函数中的参数,具体含义请参考函数手册。
	float a = 1; float b = 0;
	// 矩阵相乘。该函数必然将数组解析成列优先数组
	cublasSgemm(
		handle,    // blas 库对象 
		CUBLAS_OP_T,    // 矩阵 A 属性参数
		CUBLAS_OP_T,    // 矩阵 B 属性参数
		M,    // A, C 的行数 
		M,    // B, C 的列数
		N,    // A 的列数和 B 的行数
		&a,    // 运算式的 α 值
		d_A,    // A 在显存中的地址
		N,    // lda
		d_B,    // B 在显存中的地址
		M,    // ldb
		&b,    // 运算式的 β 值
		d_C,    // C 在显存中的地址(结果矩阵)
		M    // ldc
		);

	// 同步函数
	cudaThreadSynchronize();

	// 从 显存 中取出运算结果至 内存中去
	cublasGetVector(
		M*M,    //  要取出元素的个数
		sizeof(float),    // 每个元素大小
		d_C,    // GPU 端起始地址
		1,    // 连续元素之间的存储间隔
		h_C,    // 主机端起始地址
		1    // 连续元素之间的存储间隔
		);

	// 打印运算结果
	cout << "计算结果的转置 ( (A*B)的转置 ):" << endl;

	for (int i = 0; i<M*M; i++){
		cout << h_C[i] << " ";
		if ((i + 1) % M == 0) cout << endl;
	}

	// 清理掉使用过的内存
	free(h_A);
	free(h_B);
	free(h_C);
	cudaFree(d_A);
	cudaFree(d_B);
	cudaFree(d_C);

	// 释放 CUBLAS 库对象
	cublasDestroy(handle);
	getchar();
	return 0;
}

编译成功之后,运行结果如下

好了,以后可以愉快的开始cuda学习了,加油!!

 

参考博客:

https://blog.csdn.net/AP1005834/article/details/52140143

https://blog.csdn.net/u011314529/article/details/51505029

____________________________________________________________________________________________________

补充

六 安装多个版本的CUDA

在完成cuda10的安装之后,我又需要安装cuda8.

这个地方我犯了一个错误,下载CUDA8版本下错了,导致报错说:此NVIDIA驱动程序与此windows版本不兼容

因为我下载的是cuda_8.0.61_windows.exe,但是我的系统是win10.意识到这个问题之后重新下载cuda_8.0.61_win10.exe就可以安装了.

我安装cuda8之后环境变量发生了变化

CUDA_PATH变成了最新安装的cuda8的路径.这个和下面参考博客中提到的新版本会覆盖上一版本是一致的.

参考博客:

https://blog.csdn.net/jizhidexiaoming/article/details/81324733

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值