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

写在前面:

非常不情愿,可是干活需要,因此就入了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_PATH	C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5
CUDA_PATH_V6_5	C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5	C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5
CUDA_PATH_V6_5	C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5
CUDA_SDK_PATH	C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.5
	C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.5

不过,还需要添加几个(看前人的说法):

 

 

CUDA_LIB_PATH		%CUDA_PATH%\lib\x64
CUDA_BIN_PATH		%CUDA_PATH%\bin
CUDA_SDK_BIN_PATH 	%CUDA_SDK_PATH%\bin\x64
CUDA_SDK_LIB_PATH	%CUDA_SDK_PATH%\common\lib\x64		%CUDA_PATH%\lib\x64
CUDA_BIN_PATH		%CUDA_PATH%\bin
CUDA_SDK_BIN_PATH 	%CUDA_SDK_PATH%\bin\x64
CUDA_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

 


 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值