介绍一篇“VS2010+CUDA5.5配置方法”

_梦魇花葬 2014-07-11 07:07:53
加精
引用
出自xingoo的博客,连接在此:http://www.cnblogs.com/xing901022/p/3248469.html

目前版本的cuda是很方便的,它的一个安装里面包括了Toolkit`SDK`document`Nsight等等,而不用你自己去挨个安装,这样也避免了版本的不同步问题。
1 cuda5.5的下载地址,官方网站即可:
https://developer.nvidia.com/cuda-downloads 在里面选择你所对应的电脑版本即可。
2 VS2010这个没什么说的了,网上各种的免费资源,下载一个不需要钱的就行。
3 Cuda的安装:(win7版32bit)
安装cuda
3.1 cuda的安装文件

直接双击exe文件,弹出后,首先会监测一下你的运行环境,如果找不到Nividia对应的显卡设备,他会提示你是否要继续安装。这里面nvidia的显卡,最起码也是8800以上的,要不是无法编写CUDA的。千万不要电脑上面是intel或者AMD的显卡,却要编写cuda,除非你有钱买一个cuda-x86这个编译器。
3.2 弹出的对话框直接OK就行,这个是CUDA的一些安装文件,无所谓的:

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

3.4 系统检查

3.5 选择同意并继续

3.6 推荐先选择自定义安装

3.7 最主要的是cuda document\cuda Toolkit \cuda samples(SDK),Nsight\图形驱动程序,3D如果需要的话安装,不安装也无所谓。这里主要就是能看见都有什么,免得漏掉了,博主当初就因为选了精简安装,没安装上SDK。

3.7 安装的位置,推荐自己建三个好找的文件夹,不用他默认的路径,免得稍后配置环境变量麻烦。

博主的安装路径为:

3.8 下一步安装就行了。
至此,cuda的安装就搞定了。
4 接下来配置cuda的环境变量,默认安装好后,他会自动帮你设置好2个环境变量,但是最好还自己添加下其他的几个,方便日后配置vs使用

上面的两个环境变量是cuda默认配置的,接下来添加
CUDA_BIN_PATH %CUDA_PATH%\bin
CUDA_LIB_PATH %CUDA_PATH%\lib\Win32
CUDA_SDK_BIN %CUDA_SDK_PATH%\bin\Win32
CUDA_SDK_LIB %CUDA_SDK_PATH%\common\lib\Win32
CUDA_SDK_PATH C:\cuda\cudasdk\common

添加完就行了
5 接下来是cuda的安装成功与否的监测了,这个步骤我们用到两个东西,这两个东西,都是cuda为我们准备好的。
deviceQuery.exe 和 bandwithTest.exe
首先启动cmd DOS命令窗口(博主的cuda安装到c:\cuda文件夹下)
默认进来的是c:\users\Admistrator\>路径,输入 cd .. 两次,来到c:目录下
输入dir 找到安装的cuda文件夹

进入Release文件夹后,直接执行bandwithTest.exe

再执行deviceQuery.exe


得到以上信息,因为我的显卡比较古老9300属于第一代的cuda显卡了。Rsult=PASS及说明,都通过了。如果Rsult=Fail 那不好意思,重新安装吧(或者是您的显卡真心不给力)。
关于VS项目测试(推荐)
打开VS,新建项目

利用安装好的cuda向导,直接建立工程,里面会自动有一段kernel累加的代码
#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;
}


在main函数return之前加入getchar(),停止自动退出,以便观测效果

进入后,点击运行按钮,可能发生LINK错误(如果没有错误,跳过此段)

这时进入-》项目-》属性-》通用配置-》输入和输出-》嵌入清单 ---- 修改成否,原来可能为“是”


再次编译,成功运行后,会显示下面的结果

恭喜,cuda已经在您的机器上安装成功了。
如果是新手,推荐这样新建工程后,在里面修改代码成为自己的工程,配置属性不会出错。
如果想要自己手动配置也可以参考下面的例子。
手动配置VS项目(不推荐)
最后就是VS的配置了(这个是自己手动配置的,有时候容易出现问题,不是很推荐,建议用上面的方法建立项目进行测试)
5.1 启动VS2010
5.2 新建一个win32的控制台工程,空的。


5.3 右键源文件文件夹->新建项->选择cuda c/c++->新建一个以.cu结尾的文件

5.4 右键工程-》生成自定义-》选择cuda生成

5.5 右键test.cu-》属性-》选择cuda c/c++编译器

5.6 右键工程-》属性-》链接器-》常规-》附加库目录-》添加目录 $(CUDA_PATH_V5_5)\lib\$(Platform);

  5.7 在链接器-》输入中添加 cudart.lib

  5.8 在工具-》选项-》文本编辑器-》文件扩展名-》添加cu \cuh两个文件扩展名

至此,编译环境的相关搭建就完成了。
...全文
2705 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
_梦魇花葬 2014-07-27
  • 打赏
  • 举报
回复
你是不是没有更新呀?
梦男孩 2014-07-24
  • 打赏
  • 举报
回复
------ 已启动生成: 项目: cuda1, 配置: Debug Win32 ------ 1>生成启动时间为 2014/7/24 星期四 16:15:58。 1>InitializeBuildStatus: 1> 正在对“Debug\cuda1.unsuccessfulbuild”执行 Touch 任务。 1>AddCudaCompileDeps: 1>正在跳过目标“AddCudaCompileDeps”,因为所有输出文件相对于输入文件而言都是最新的。 1>CudaBuild: 1> Compiling CUDA source file cuda1.cu... 1> 1> C:\Users\Administrator\Documents\Visual Studio 2010\Projects\cuda1\cuda1>"C:\cuda\cudatoolkit\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2010 -ccbin "g:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -IC:\cuda\cudatoolkit\include -IC:\cuda\cudatoolkit\include -G --keep-dir Debug -maxrregcount=0 --machine 32 --compile -cudart static -g -DWIN32 -D_DEBUG -D_CONSOLE -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\cuda1.cu.obj "C:\Users\Administrator\Documents\Visual Studio 2010\Projects\cuda1\cuda1\cuda1.cu" 1>nvcc : warning : The 'compute_10' and 'sm_10' architectures are deprecated, and may be removed in a future release. 1>c:\cuda\cudatoolkit\include\math_functions.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\math_functions.h(870): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\math_functions.h(1850): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\math_functions.h(2751): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\math_functions.h(3698): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\math_functions.h(4617): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\math_functions.h(5509): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\math_functions.h(6392): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\math_functions.h(7307): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\device_functions.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\device_functions.h(783): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\device_functions.h(1659): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\cuda\cudatoolkit\include\sm_13_double_functions.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>C:/Users/Administrator/Documents/Visual Studio 2010/Projects/cuda1/cuda1/cuda1.cu(45): error : identifier "nim_threads" is undefined 1> 1>C:/Users/Administrator/Documents/Visual Studio 2010/Projects/cuda1/cuda1/cuda1.cu(45): error : identifier "gpu_clac_thread" is undefined 1> 1>C:/Users/Administrator/Documents/Visual Studio 2010/Projects/cuda1/cuda1/cuda1.cu(30): warning : variable "num_threads" was declared but never referenced 1> 1>C:/Users/Administrator/Documents/Visual Studio 2010/Projects/cuda1/cuda1/cuda1.cu(31): warning : variable "ch" was set but never used 1> 1> 2 errors detected in the compilation of "C:/Users/ADMINI~1/AppData/Local/Temp/tmpxft_00001ecc_00000000-5_cuda1.cpp1.ii". 1> cuda1.cu 1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 6.0.targets(597,9): error MSB3721: 命令“"C:\cuda\cudatoolkit\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2010 -ccbin "g:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -IC:\cuda\cudatoolkit\include -IC:\cuda\cudatoolkit\include -G --keep-dir Debug -maxrregcount=0 --machine 32 --compile -cudart static -g -DWIN32 -D_DEBUG -D_CONSOLE -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\cuda1.cu.obj "C:\Users\Administrator\Documents\Visual Studio 2010\Projects\cuda1\cuda1\cuda1.cu"”已退出,返回代码为 2。 1> 1>生成失败。 1> 1>已用时间 00:00:01.35 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
碧海凌云 2014-07-18
  • 打赏
  • 举报
回复
大部分程序都能编译成功,多谢楼主指点,受益匪浅!
_梦魇花葬 2014-07-18
  • 打赏
  • 举报
回复
谢谢支持,有什么不懂的,可以提出来,大家交流一下!~~ 嘿嘿
_梦魇花葬 2014-07-17
  • 打赏
  • 举报
回复
上述warning的原因是不是你在定义变量的时候,采用不同的定义呀!~~ 要不就是将double强制转化为了float了!~~等等各方面,
_梦魇花葬 2014-07-17
  • 打赏
  • 举报
回复
一般情况下有一些warning是很正常的,关键是有没有error呀! 没有,就好说,有的话就改改!
_梦魇花葬 2014-07-17
  • 打赏
  • 举报
回复
warning这些你不要管它,没啥大的问题就可以,只要不是errors就好,你编译成功没?
_梦魇花葬 2014-07-17
  • 打赏
  • 举报
回复
谢谢各位小伙伴的支持,大家一起学习哟!
  • 打赏
  • 举报
回复
jx20027456 2014-07-17
  • 打赏
  • 举报
回复
很详细,很受用,学习,辛苦
碧海凌云 2014-07-16
  • 打赏
  • 举报
回复
还有一个问题想请教一下楼主 上面给的代码我编译时出现许多警告: Compiling CUDA source file 3.cu... 1> 1> F:\Users\wangrr\Documents\visual studio 2010\Projects\cuda6.0_example\cuda6.0_example>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2010 -ccbin "D:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" --keep-dir Release -maxrregcount=0 --machine 32 --compile -cudart static -DWIN32 -DNDEBUG -D_CONSOLE -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W3 /nologo /O2 /Zi /MD " -o Release\3.cu.obj "F:\Users\wangrr\Documents\visual studio 2010\Projects\cuda6.0_example\cuda6.0_example\3.cu" 1>nvcc : warning : The 'compute_10' and 'sm_10' architectures are deprecated, and may be removed in a future release. 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(870): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(1850): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(2751): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(3698): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(4617): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(5509): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(6392): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(7307): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\device_functions.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\device_functions.h(783): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 ........ 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(4617): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(5509): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(6392): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1>c:\program files\nvidia gpu computing toolkit\cuda\v6.0\include\math_functions.h(7307): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 1> 3.cu 1>Link: 1> LINK : 已指定 /LTCG,但不需要生成代码;从链接命令行中移除 /LTCG 以提高链接器性能 1> cuda6.0_example.vcxproj -> F:\Users\wangrr\Documents\visual studio 2010\Projects\cuda6.0_example\Release\cuda6.0_example.exe 1>FinalizeBuildStatus: 1> Deleting file "Release\cuda6.0_example.unsuccessfulbuild". 1> Touching "Release\cuda6.0_example.lastbuildstate". 1> 1>生成成功。 1> 1>Time Elapsed 00:00:16.70 ========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ========== 您能帮我看看这是什么原因吗?谢谢!
碧海凌云 2014-07-16
  • 打赏
  • 举报
回复
我安装的是CUDA6.0,v6.0文件下面没有doc文件,不过你上面给的代码我试过了可以正常运行。
这是我安装后的文件下面的目录,我邮箱是792688152@qq.com
_梦魇花葬 2014-07-16
  • 打赏
  • 举报
回复
刚才那张上传错了,,我电脑上是有的,一般安装成功后,都会有!你再找找,不行的话,再说! 我给你传一份给你!
_梦魇花葬 2014-07-16
  • 打赏
  • 举报
回复
,我电脑上是在这个里面,安装成功后都会有的!
_梦魇花葬 2014-07-16
  • 打赏
  • 举报
回复
你安装过CUDA吗,正常安装成功的话,都应该有的呀! 你安装CUDA到哪个盘里了?
碧海凌云 2014-07-16
  • 打赏
  • 举报
回复
楼主好!这是我在另一篇博客中看到的,为什么我的电脑上找不到usertype.dat文件? CUDA C/C++关键字及函数高亮显示 为了让CUDA 的关键字,如__device__、dim3 等的文字高亮,需按如下步骤设置: 将C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\doc\syntax_highlighting\visual_studio_8 目录下的usertype.dat 文件复制到C:\Program Files\Microsoft Visual Studio10.0\Common7\IDE\ 目录下( 对x64 位Win7 系统为X:\Program Files(X86)\Microsoft Visual Studio 10.0\Common7\IDE\)。重启Visual Studio 2010 后打开.cu 文件,CUDA 的关键字应该变成蓝色了。
GW786228836 2014-07-15
  • 打赏
  • 举报
回复
_梦魇花葬 2014-07-15
  • 打赏
  • 举报
回复
客气了,小伙伴!让我们一起加油吧!
yangfeilong1988 2014-07-15
  • 打赏
  • 举报
回复
好的,谢谢版主!~~
_梦魇花葬 2014-07-15
  • 打赏
  • 举报
回复
可以的,你按照这个安装是可行的!有什么不会的可以咨询!谢谢
加载更多回复(14)

353

社区成员

发帖
与我相关
我的任务
社区描述
CUDA高性能计算讨论
社区管理员
  • CUDA高性能计算讨论社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧