VS2015+CUDA8.0环境配置

Anyway,在这里记录下正确的配置方式:

1、首先,上官网下载对应vs版本的CUDA toolkit:

https://developer.nvidia.com/cuda-toolkit-50-archive

(记住vs2010对应CUDA5.0,vs2013对应CUDA7.5,vs2015对应CUDA8.0)

2、接着,直接安装,记得在安装过程中如果你不想换你原有的显卡驱动的话,就选择自定义不安装driver;否则如果你直接选“精简”又不安装驱动,则CUDA安装无法成功。

3、安装完成之后,进入C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0 之后可以看到有好几个文件夹:bin、lib 、include等等,这就表明安装成功了

4、接下来,看看如何创建一个利用cuda编程的项目,打开vs创建项目时,你可以看到有了新的项目类型:

但是我们这里教你如何在一个空项目中编译cu文件,所以我们还是 创建一个vc++的空项目,接着创建一个新的cpp文件和cu文件

test.cpp代码如下:

#include <time.h>
#include <stdlib.h>
#include <stdio.h> //这里不要忘了加引用声明
extern "C" void MatrixMultiplication_CUDA(const float* M, const float* N, float* P, int Width); //构造函数...
//析构函数... // 产生矩阵,矩阵中元素0~1
void matgen(float* a, int Width)
{
int i, j;
for (i = 0; i < Width; i++)
{
for (j = 0; j < Width; j++)
{
a[i * Width + j] = (float)rand() / RAND_MAX + (float)rand() / (RAND_MAX*RAND_MAX);
}
}
} //矩阵乘法(CPU验证)
void MatrixMultiplication(const float* M, const float* N, float* P, int Width)
{
int i, j, k;
for (i = 0; i < Width; i++)
{
for (j = 0; j < Width; j++)
{
float sum = 0;
for (k = 0; k < Width; k++)
{
sum += M[i * Width + k] * N[k * Width + j];
}
P[i * Width + j] = sum;
}
}
} double MatrixMul_GPU()
{
float *M, *N, *Pg;
int Width = 1024; //1024×1024矩阵乘法
M = (float*)malloc(sizeof(float)* Width * Width);
N = (float*)malloc(sizeof(float)* Width * Width);
Pg = (float*)malloc(sizeof(float)* Width * Width); //保存GPU计算结果 srand(0); matgen(M, Width); //产生矩阵M
matgen(N, Width); //产生矩阵N double timeStart, timeEnd; //定义时间,求时间差用
timeStart = clock();
MatrixMultiplication_CUDA(M, N, Pg, Width); //GPU上计算
timeEnd = clock(); free(M);
free(N);
free(Pg);
return timeEnd - timeStart;
} double MatrixMul_CPU()
{
float *M, *N, *Pc;
int Width = 1024; //1024×1024矩阵乘法
M = (float*)malloc(sizeof(float)* Width * Width);
N = (float*)malloc(sizeof(float)* Width * Width);
Pc = (float*)malloc(sizeof(float)* Width * Width); //保存CPU计算结果 srand(0); matgen(M, Width); //产生矩阵M
matgen(N, Width); //产生矩阵N double timeStart, timeEnd; //定义时间,求时间差用
timeStart = clock();
MatrixMultiplication(M, N, Pc, Width); //CPU上计算
timeEnd = clock(); free(M);
free(N);
free(Pc);
return timeEnd - timeStart;
} //////////////////////////////////////////////////////////////////////////
int main()
{
printf("CPU use time %g\n", MatrixMul_CPU());
printf("GPU use time %g\n", MatrixMul_GPU());
system("pause");
return 0;
}

test.cu代码如下:

////CUDAtest.cu

#include "cuda_runtime.h"
#include "device_launch_parameters.h" #define TILE_WIDTH 16 // 核函数
// __global__ static void MatrixMulKernel(const float* Md,const float* Nd,float* Pd,int Width)
__global__ void MatrixMulKernel(const float* Md, const float* Nd, float* Pd, int Width)
{
//计算Pd和Md中元素的行索引
int Row = blockIdx.y * TILE_WIDTH + threadIdx.y; //行
int Col = blockIdx.x * TILE_WIDTH + threadIdx.x; //列 float Pvalue = 0.0;
for (int k = 0; k < Width; k++)
{
Pvalue += Md[Row * Width + k] * Nd[k * Width + Col];
}
//每个线程负责计算P中的一个元素
Pd[Row * Width + Col] = Pvalue;
} // 矩阵乘法(CUDA中)
// 在外部调用,使用extern
extern "C" void MatrixMultiplication_CUDA(const float* M, const float* N, float* P, int Width)
{
cudaSetDevice(0); //设置目标GPU float *Md, *Nd, *Pd;
int size = Width * Width * sizeof(float);//字节长度 cudaMalloc((void**)&Md, size);
cudaMalloc((void**)&Nd, size);
cudaMalloc((void**)&Pd, size); //Copies a matrix from the memory* area pointed to by src to the memory area pointed to by dst
cudaMemcpy(Md, M, size, cudaMemcpyHostToDevice);
cudaMemcpy(Nd, N, size, cudaMemcpyHostToDevice); //
dim3 dimGrid(Width / TILE_WIDTH, Width / TILE_WIDTH); //网格的维度
dim3 dimBlock(TILE_WIDTH, TILE_WIDTH); //块的维度
MatrixMulKernel <<< dimGrid, dimBlock >>>(Md, Nd, Pd, Width); cudaMemcpy(P, Pd, size, cudaMemcpyDeviceToHost);
//释放设备上的矩阵
cudaFree(Md);
cudaFree(Nd);
cudaFree(Pd);
}

接下来就是第三方库的链接了,首先呢,你得右击项目,打开项目属性

分别在可执行文件目录下输入:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin

在包含目录下输入:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include

在库目录下输入:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\Win32

之后在链接器/输入/附加依赖项中输入:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\Win32目录下的所有lib文件的文件名

这时,如果你急于立马编译的话,你就会发现报错了:大致的意思是extern修饰的函数被应用,无法解析的外部命令

因为这时其实编译器没有编译cu文件,所以cpp文件中无法引用cu文件里的函数。

最关键的一步来了:

右击项目,点击生成依赖 项,选择“生成自定义”,然后勾选cuda


之后右击test.cu文件打开属性,修改“项目类型”如下:


大功告成,愉快的调试吧


CUDA编程之环境配置的更多相关文章

  1. CUDA学习,环境配置和简单例子

    根据摩尔定律,每18个月,硬件的速度翻一番.纵使CPU的主频会越来越高,但是其核数受到了极大的限制,目前来说,最多只有8个或者9个核.相比之下,GPU具有很大的优势,他有成千上万个核,能完成大规模的并 ...

  2. STM32编程环境配置(kile5)

    2018-08-2513:53:33 折腾了很久,花了两天的空闲时间终于烧进去程序了.完成了kile5对stm32编程的环境配置. 1.下载kile5 激活破解 2.安装stm32配置环境 3.加载工 ...

  3. GPU编程自学2 —— CUDA环境配置

    深度学习的兴起,使得多线程以及GPU编程逐渐成为算法工程师无法规避的问题.这里主要记录自己的GPU自学历程. 目录 <GPU编程自学1 -- 引言> <GPU编程自学2 -- CUD ...

  4. Java/javaEE/web/jsp/网站编程环境配置及其软件下载和网站路径

    Java/javaEE/web/jsp/网站编程环境配置及其软件下载和网站路径 (2015/07/08更新) JDK下载地址(JDK官网下载地址) 下载地址为:http://www.oracle.co ...

  5. 【软件安装与环境配置】ubuntu16.04+caffe+nvidia+CUDA+cuDNN安装配置

    前言 博主想使用caffe框架进行深度学习相关网络的训练和测试,刚开始做,特此记录学习过程. 环境配置方面,博主以为最容易卡壳的是GPU的NVIDIA驱动的安装和CUDA的安装,前者尝试的都要吐了,可 ...

  6. windows下《Go Web编程》之Go环境配置和安装

    <Go Web编程>笔者是基于unix下讲述的,作为入门练手,我选择在windows下开发,全程按照目录进行... 一.安装 windows下需要安装MinGW,通过MinGW安装gcc支 ...

  7. 深度学习 GPU环境 Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 + CUDA 9.0 + cuDNN 7.1 + TensorFlow 1.6 环境配置

    本节详细说明一下深度学习环境配置,Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 + CUDA 9.0 + cuDNN 7.1 + TensorFlow 1.6 ...

  8. CUDA & cuDNN环境配置

    环境 python3.5 tensorflow 1.3 VUDA  8.0 cuDNN V6.0 1.确保GPU驱动已经安装 lspci | grep -i nvidia 通过此命令可以查看GPU信息 ...

  9. TensorFlow-GPU环境配置之二——CUDA环境配置

    1.安装最新显卡驱动 到系统设置->软件和更新->附加驱动中选中最新的显卡驱动,并应用 2.下载CUDA8.0 https://developer.nvidia.com/cuda-down ...

随机推荐

  1. spring mvc 初始

    今天带领大家开始第一天的spring  mvc学习 首先我们要下载maven然后配置IDE 然后选择new 新建项目 然后选择maven,然后选择maven的webapp 然后创建springmvc ...

  2. 使用密码登陆Amazon EC2

    用的是亚马逊推荐的系统:Amazon Linux AMI 2015.09.1 (HVM) 创建instance后,会有一个pem的key使用该密钥登陆到服务器上后,默认用户名为 ec2-user 直接 ...

  3. Mosaic

    Mosaic 是最古老的WEB浏览器,这是个套件FOR WINDOWS(包括TCP/IP,拨号,EMAIL等).

  4. [bzoj4589]Hard Nim(FWT快速沃尔什变化+快速幂)

    题面:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 题意 求选恰好n个数,满足每个数都是不大于m的质数,且它们的异或和为0的方案数. 解法 ...

  5. Java拦截过滤器模式

    当我们想要对应用程序的请求或响应进行一些预处理/后处理时,使用截取过滤器设计模式. 在将请求传递到实际目标应用程序之前,在请求上定义和应用过滤器. 过滤器可以进行请求的认证/授权/日志记录或跟踪,然后 ...

  6. 洛谷P1629 邮递员送信 最短路-Djistra

    先上一波题目qwq https://www.luogu.org/problem/P1629· 复习了一波 dijstra 的 priority_queue(优先队列)优化的写法 tips: 求单项路中 ...

  7. 转 python3 读取 ini配置文件

    在代码中经常会通过ini文件来配置一些常修改的配置.下面通过一个实例来看下如何写入.读取ini配置文件. 需要的配置文件是: 1 [path] 2 back_dir = /Users/abc/Pych ...

  8. Android组件内核之Fragment管理与内核(二)

    阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680本篇文章将先从以下三个内容来介绍Fragment管理与内核: [Fragm ...

  9. Java面试必问-ThreadLocal

    前言 在面试环节中,考察"ThreadLocal"也是面试官的家常便饭,所以对它理解透彻,是非常有必要的. 有些面试官会开门见山的提问: “知道ThreadLocal吗?” “讲讲 ...

  10. Spark和pyspark的配置安装

    如何安装Spark和Pyspark构建Spark学习环境[MacOs] JDK环境 Python环境 Spark引擎 下载地址:Apache-Spark官网 MacOs下一般安装在/usr/local ...