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
- CUDA6.5+VS2010安装和搭建过程
- CUDA6.5-VS2010安装
- CUDA6.5+VS2010+OpenCV2.4.9的环境搭建过程
- cuda6.5 vs2010
- Jetson TK1开发环境搭建(二)安装CUDA6.5
- 安装cuda6.5
- ubuntu安装cuda6.5
- ubuntu14.04 安装cuda6.5
- ubuntu14.04 安装cuda6.5
- Ubuntu14.04安装CUDA6.5
- ubuntu14.04+cuda6.5+kaldi环境搭建
- DL学习笔记【4】caffe+win10+VS2013+cuda6.5+python安装过程
- Win64平台CUDA6.5+VS2010+opencv2.4.8配置
- win7+cuda6.5+opencv2.4.10+vs2010,64位机, 配置
- Caffe+Ubuntu 13.10+ CUDA6.5 安装指南
- Ubuntu+CUDA6.5+Caffe安装配置汇总
- centos6.6 64位安装cuda6.5
- ubuntu14.04 + cuda6.5 + pycuda 安装
- 博弈论的纳什平衡的两个例题
- leetcode 30. Substring with Concatenation of All Words
- HDU 5974 A Simple Math Problem
- Spark 之 一些常用的操作
- 中企动力全面赋能中小企业 让大数据场景化营销落地生花
- CUDA6.5+VS2010安装和搭建过程
- 8086CPU端口读写
- webrtc libjingle worker thread
- HTML与CSS练习——js选择器
- 安卓学习-(数据存储(数据库,原生sql,和原生安卓操作))
- spring_定时任务_spring-task_定时输出
- C语言实现2048小游戏
- 欢迎使用CSDN-markdown编辑器
- USB 中MTP和UMS 模式