CUDA6.5+VS2010安装和搭建过程

来源:互联网 发布:面包板入门单片机 编辑:程序博客网 时间:2024/05/19 02:30

写在前面:

非常不情愿,可是干活需要,因此就入了CUDA的坑,只能算是萌新一枚。刚开始配置的时候,总是要走不少的弯路,大家都是这么过来的,只不过身为码农,踩过的坑还是尽量标记一下为好,不然时间长了,又得重来一遍。


言归正传,本人的笔记本电脑显卡是GeForce 710M,根据CUDA官网的介绍,计算能力是2.1,不过也没关系了,能跑就行。

查询网址:https://developer.nvidia.com/cuda-gpus#collapseOne



看了很多人的博客,比较主流的搭配是CUDA6.5 +VS2010,所以我也随大流吧。(主要是笔记本上安装了VS2010,我懒得卸载了,在安装其他的,只不过后来发生的事,让我不得不把它卸载了再装一遍,这是后话,到时后再说。)


过程都差不多,可以说很容易,我感觉其他人说的更清楚一点,在这里贴上些大牛的链接镇楼。

http://blog.csdn.net/augusdi/article/details/12833235


进入正文:

1 .CUDA6.5 的下载:

https://developer.nvidia.com/cuda-toolkit-65


注意下载的版本是Desktop(台式机)还是Notebook(笔记本),由于我的笔记本是64位的,因此选择图中下载。

2.安装cuda

2.1 CUDA的安装文件

直接双击exe文件,弹出后,首先会监测一下你的运行环境,如果找不到Nividia对应的显卡设备,他会提示你是否要继续安装。这里面nvidia的显卡,最起码也是GeForce 410M以上的,要不是无法编写CUDA的(看前面的计算能力介绍)。

2.2 它会监测你的电脑是否支持cuda的搭建,等待就行


2.3 系统检查


2.4 选择同意并继续


2.5 选择自定义安装


2.6 简单粗暴全选


2.7 安装的位置,默认(不过记录一下最好)


2.8 下一步安装就行,等10-20分钟就好了



3. 配置CUDA的环境变量

安装完后自动添加三个环境变量:

CUDA_PATHC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5CUDA_PATH_V6_5C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5
CUDA_SDK_PATHC:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.5
不过,还需要添加几个(看前人的说法):

CUDA_LIB_PATH%CUDA_PATH%\lib\x64CUDA_BIN_PATH%CUDA_PATH%\binCUDA_SDK_BIN_PATH %CUDA_SDK_PATH%\bin\x64CUDA_SDK_LIB_PATH%CUDA_SDK_PATH%\common\lib\x64
在path下添加这么一段:

;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%;
搞定

4.重新启动计算机让环境变量生效

5.在安装路径下找到C:/ProgramData/NVIDIA Corporation/CUDA Samples/v6.5/其中的Samples_vs2010.sln


打开VS2010的上图所示的工程(本人打开的时候发生了点小插曲,后面再说),编译,这个花的时间有点长,大约1个多小时吧,最后还有几个编译不过(不过这并不影响)。

6.接下来是cuda的安装成功与否

的监测了,这个步骤用在上图bin目录下的

deviceQuery.exe 和 bandwithTest.exe
在dos下,分别找到这个文件夹,运行二者即可



图中的CUDA Capacity Major 是2.1,正是我们显卡的计算能力。当然好的显卡都能达到6.5了,货比货得扔啊。

7.第一个CUDA项目

打开VS2010并建立一个CUDA 6.5 RunTime项目,它会帮你生成一系列的文件,测试是一个cu的文件,编译,运行。

代码如下,可以拿来观摩:

#include "cuda_runtime.h"#include "device_launch_parameters.h"#include <stdio.h>cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size);__global__ void addKernel(int *c, const int *a, const int *b){    int i = threadIdx.x;    c[i] = a[i] + b[i];}int main(){    const int arraySize = 5;    const int a[arraySize] = { 1, 2, 3, 4, 5 };    const int b[arraySize] = { 10, 20, 30, 40, 50 };    int c[arraySize] = { 0 };    // Add vectors in parallel.    cudaError_t cudaStatus = addWithCuda(c, a, b, arraySize);    if (cudaStatus != cudaSuccess) {        fprintf(stderr, "addWithCuda failed!");        return 1;    }    printf("{1,2,3,4,5} + {10,20,30,40,50} = {%d,%d,%d,%d,%d}\n",        c[0], c[1], c[2], c[3], c[4]);    // cudaDeviceReset must be called before exiting in order for profiling and    // tracing tools such as Nsight and Visual Profiler to show complete traces.    cudaStatus = cudaDeviceReset();    if (cudaStatus != cudaSuccess) {        fprintf(stderr, "cudaDeviceReset failed!");        return 1;    }    getchar();    return 0;}// Helper function for using CUDA to add vectors in parallel.cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size){    int *dev_a = 0;    int *dev_b = 0;    int *dev_c = 0;    cudaError_t cudaStatus;    // Choose which GPU to run on, change this on a multi-GPU system.    cudaStatus = cudaSetDevice(0);    if (cudaStatus != cudaSuccess) {        fprintf(stderr, "cudaSetDevice failed!  Do you have a CUDA-capable GPU installed?");        goto Error;    }    // Allocate GPU buffers for three vectors (two input, one output)    .    cudaStatus = cudaMalloc((void**)&dev_c, size * sizeof(int));    if (cudaStatus != cudaSuccess) {        fprintf(stderr, "cudaMalloc failed!");        goto Error;    }    cudaStatus = cudaMalloc((void**)&dev_a, size * sizeof(int));    if (cudaStatus != cudaSuccess) {        fprintf(stderr, "cudaMalloc failed!");        goto Error;    }    cudaStatus = cudaMalloc((void**)&dev_b, size * sizeof(int));    if (cudaStatus != cudaSuccess) {        fprintf(stderr, "cudaMalloc failed!");        goto Error;    }    // Copy input vectors from host memory to GPU buffers.    cudaStatus = cudaMemcpy(dev_a, a, size * sizeof(int), cudaMemcpyHostToDevice);    if (cudaStatus != cudaSuccess) {        fprintf(stderr, "cudaMemcpy failed!");        goto Error;    }    cudaStatus = cudaMemcpy(dev_b, b, size * sizeof(int), cudaMemcpyHostToDevice);    if (cudaStatus != cudaSuccess) {        fprintf(stderr, "cudaMemcpy failed!");        goto Error;    }    // Launch a kernel on the GPU with one thread for each element.    addKernel<<<1, size>>>(dev_c, dev_a, dev_b);    // Check for any errors launching the kernel    cudaStatus = cudaGetLastError();    if (cudaStatus != cudaSuccess) {        fprintf(stderr, "addKernel launch failed: %s\n", cudaGetErrorString(cudaStatus));        goto Error;    }        // cudaDeviceSynchronize waits for the kernel to finish, and returns    // any errors encountered during the launch.    cudaStatus = cudaDeviceSynchronize();    if (cudaStatus != cudaSuccess) {        fprintf(stderr, "cudaDeviceSynchronize returned error code %d after launching addKernel!\n", cudaStatus);        goto Error;    }    // Copy output vector from GPU buffer to host memory.    cudaStatus = cudaMemcpy(c, dev_c, size * sizeof(int), cudaMemcpyDeviceToHost);    if (cudaStatus != cudaSuccess) {        fprintf(stderr, "cudaMemcpy failed!");        goto Error;    }Error:    cudaFree(dev_c);    cudaFree(dev_a);    cudaFree(dev_b);        return cudaStatus;}
结果:


至此,安装和检查工作算是全都做完了。


后记:我在安装的时候出了点小意外,就是在第5步打开那个amples_vs2010.sln的时候,提示我vs2010的部分内容在安装CUDA的时候进行了更新,现在要用VS2010,需要全部都更新。什么需要下载Microsoft sevice pack 1,下了好几个版本补丁,按上去没啥用,于是又把vs2010 卸载了再安装一遍(此处有作者的叹息声),之后进行下面的步骤。

第一回正经八百的写博客,累死我了。虽然多是重复记录别人的经历,但是整理的过程就是学习的过程,希望自己能够保持下去。


参考:

https://wenku.baidu.com/view/9893ec57763231126edb11b8.html

http://blog.csdn.net/u013241840/article/details/41831939














原创粉丝点击