目前版本的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默认配置的,接下来添加

  1. CUDA_BIN_PATH  %CUDA_PATH%\bin
  2. CUDA_LIB_PATH  %CUDA_PATH%\lib\Win32
  3. CUDA_SDK_BIN  %CUDA_SDK_PATH%\bin\Win32
  4. CUDA_SDK_LIB  %CUDA_SDK_PATH%\common\lib\Win32
  5. 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累加的代码:

  1. #include "cuda_runtime.h"
  2. #include "device_launch_parameters.h"
  3.  
  4. #include <stdio.h>
  5.  
  6. cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size);
  7.  
  8. __global__ void addKernel(int *c, const int *a, const int *b)
  9. {
  10. int i = threadIdx.x;
  11. c[i] = a[i] + b[i];
  12. }
  13.  
  14. int main()
  15. {
  16. const int arraySize = ;
  17. const int a[arraySize] = { , , , , };
  18. const int b[arraySize] = { , , , , };
  19. int c[arraySize] = { };
  20.  
  21. // Add vectors in parallel.
  22. cudaError_t cudaStatus = addWithCuda(c, a, b, arraySize);
  23. if (cudaStatus != cudaSuccess) {
  24. fprintf(stderr, "addWithCuda failed!");
  25. return ;
  26. }
  27.  
  28. printf("{1,2,3,4,5} + {10,20,30,40,50} = {%d,%d,%d,%d,%d}\n",
  29. c[], c[], c[], c[], c[]);
  30.  
  31. // cudaDeviceReset must be called before exiting in order for profiling and
  32. // tracing tools such as Nsight and Visual Profiler to show complete traces.
  33. cudaStatus = cudaDeviceReset();
  34. if (cudaStatus != cudaSuccess) {
  35. fprintf(stderr, "cudaDeviceReset failed!");
  36. return ;
  37. }
  38. getchar();
  39. return ;
  40. }
  41.  
  42. // Helper function for using CUDA to add vectors in parallel.
  43. cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size)
  44. {
  45. int *dev_a = ;
  46. int *dev_b = ;
  47. int *dev_c = ;
  48. cudaError_t cudaStatus;
  49.  
  50. // Choose which GPU to run on, change this on a multi-GPU system.
  51. cudaStatus = cudaSetDevice();
  52. if (cudaStatus != cudaSuccess) {
  53. fprintf(stderr, "cudaSetDevice failed! Do you have a CUDA-capable GPU installed?");
  54. goto Error;
  55. }
  56.  
  57. // Allocate GPU buffers for three vectors (two input, one output) .
  58. cudaStatus = cudaMalloc((void**)&dev_c, size * sizeof(int));
  59. if (cudaStatus != cudaSuccess) {
  60. fprintf(stderr, "cudaMalloc failed!");
  61. goto Error;
  62. }
  63.  
  64. cudaStatus = cudaMalloc((void**)&dev_a, size * sizeof(int));
  65. if (cudaStatus != cudaSuccess) {
  66. fprintf(stderr, "cudaMalloc failed!");
  67. goto Error;
  68. }
  69.  
  70. cudaStatus = cudaMalloc((void**)&dev_b, size * sizeof(int));
  71. if (cudaStatus != cudaSuccess) {
  72. fprintf(stderr, "cudaMalloc failed!");
  73. goto Error;
  74. }
  75.  
  76. // Copy input vectors from host memory to GPU buffers.
  77. cudaStatus = cudaMemcpy(dev_a, a, size * sizeof(int), cudaMemcpyHostToDevice);
  78. if (cudaStatus != cudaSuccess) {
  79. fprintf(stderr, "cudaMemcpy failed!");
  80. goto Error;
  81. }
  82.  
  83. cudaStatus = cudaMemcpy(dev_b, b, size * sizeof(int), cudaMemcpyHostToDevice);
  84. if (cudaStatus != cudaSuccess) {
  85. fprintf(stderr, "cudaMemcpy failed!");
  86. goto Error;
  87. }
  88.  
  89. // Launch a kernel on the GPU with one thread for each element.
  90. addKernel<<<, size>>>(dev_c, dev_a, dev_b);
  91.  
  92. // Check for any errors launching the kernel
  93. cudaStatus = cudaGetLastError();
  94. if (cudaStatus != cudaSuccess) {
  95. fprintf(stderr, "addKernel launch failed: %s\n", cudaGetErrorString(cudaStatus));
  96. goto Error;
  97. }
  98.  
  99. // cudaDeviceSynchronize waits for the kernel to finish, and returns
  100. // any errors encountered during the launch.
  101. cudaStatus = cudaDeviceSynchronize();
  102. if (cudaStatus != cudaSuccess) {
  103. fprintf(stderr, "cudaDeviceSynchronize returned error code %d after launching addKernel!\n", cudaStatus);
  104. goto Error;
  105. }
  106.  
  107. // Copy output vector from GPU buffer to host memory.
  108. cudaStatus = cudaMemcpy(c, dev_c, size * sizeof(int), cudaMemcpyDeviceToHost);
  109. if (cudaStatus != cudaSuccess) {
  110. fprintf(stderr, "cudaMemcpy failed!");
  111. goto Error;
  112. }
  113.  
  114. Error:
  115. cudaFree(dev_c);
  116. cudaFree(dev_a);
  117. cudaFree(dev_b);
  118.  
  119. return cudaStatus;
  120. }

在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两个文件扩展名

至此,编译环境的相关搭建就完成了。


下面提供了一段test.cu的代码,供测试使用:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <cuda_runtime.h>
  4.  
  5. #define DATA_SIZE 1024
  6. #define checkCudaErrors(err) __checkCudaErrors (err, __FILE__, __LINE__)
  7. #define getLastCudaError(msg) __getLastCudaError (msg, __FILE__, __LINE__)
  8.  
  9. int data[DATA_SIZE];
  10.  
  11. ////////////////////////////////////////////////////////////////////////////////
  12. // These are CUDA Helper functions
  13.  
  14. // This will output the proper CUDA error strings in the event that a CUDA host call returns an error
  15.  
  16. inline void __checkCudaErrors(cudaError err, const char *file, const int line )
  17. {
  18. if(cudaSuccess != err)
  19. {
  20. fprintf(stderr, "%s(%i) : CUDA Runtime API error %d: %s.\n",file, line, (int)err, cudaGetErrorString( err ) );
  21. return ;
  22. }
  23. }
  24.  
  25. // This will output the proper error string when calling cudaGetLastError
  26.  
  27. inline void __getLastCudaError(const char *errorMessage, const char *file, const int line )
  28. {
  29. cudaError_t err = cudaGetLastError();
  30. if (cudaSuccess != err)
  31. {
  32. fprintf(stderr, "%s(%i) : getLastCudaError() CUDA error : %s : (%d) %s.\n",
  33. file, line, errorMessage, (int)err, cudaGetErrorString( err ) );
  34. return ;
  35. }
  36. }
  37.  
  38. // end of CUDA Helper Functions
  39.  
  40. __global__ static void sumOfSquares(int *num, int * result){
  41. int sum=;
  42. int i;
  43. for(i=;i<DATA_SIZE;i++) {
  44. sum += num[i]*num[i];
  45. }
  46. *result = sum;
  47. }
  48. void GenerateNumbers(int *number, int size){
  49. for(int i = ; i < size; i++) {
  50. number[i] = rand() % ;
  51. printf("number[%d] is %d\n",i,number[i]);
  52. }}
  53.  
  54. int main(){
  55.  
  56. cudaSetDevice();
  57. cudaDeviceSynchronize();
  58. cudaThreadSynchronize();
  59.  
  60. GenerateNumbers(data, DATA_SIZE);
  61.  
  62. int * gpudata, * result;
  63. int sum;
  64.  
  65. checkCudaErrors( cudaMalloc((void**) &gpudata, sizeof(int)*DATA_SIZE));
  66. checkCudaErrors(cudaMalloc((void**) &result, sizeof(int)));
  67. checkCudaErrors(cudaMemcpy(gpudata, data, sizeof(int)*DATA_SIZE,cudaMemcpyHostToDevice));
  68.  
  69. sumOfSquares<<<, , >>>(gpudata, result);
  70.  
  71. checkCudaErrors(cudaMemcpy(&sum, result, sizeof(int), cudaMemcpyDeviceToHost));
  72.  
  73. cudaFree(gpudata);
  74. cudaFree(result);
  75.  
  76. printf("-----------sum: %d\n",sum);
  77.  
  78. sum = ;
  79. for(int i = ; i < DATA_SIZE; i++) {
  80. sum += data[i] * data[i];
  81. }
  82. printf("sum (CPU): %d\n", sum);
  83.  
  84. getchar();
  85. return ;
  86. }

原文链接:

手把手教你cuda5.5与VS2010的编译环境搭建

Visual Studio IDE环境下利用模板创建和手动配置CUDA项目教程的更多相关文章

  1. Visual Studio 2013环境下操作vc6/vc7/vc8等低版本平台项目【编译|生成|调试】

    现代化的开发环境,微软一直在推出更新换代,我们所处的技术环境在日新月异的变化:不过在中国多数人们一边疲惫的追赶着时代的步伐,一边坚守着自己所获悉所掌握的那些紧吧吧的知本.对技术工具的掌握并非他们所想要 ...

  2. MariaDB + Visual Studio 2017 环境下的 ODBC 入门开发

    参考: Easysoft公司提供的ODBC教程 微软提供的ODBC文档 环境: Windows 10 x64 1803 MariaDB TX 10.2.14 x64 MariaDB ODBC Conn ...

  3. (转)在SQL Server 2016,Visual Studio 2017环境下,连接数据库屡屡失败,在connectionString上出的问题

    适用情景: 1,ServerVersion出了问题,“SqlCnt.ServerVersion”引发了类型“System.InvalidOperationException”的异常 2,在String ...

  4. 安装Visual Studio Scrum 1.0过程模板

    近几年里,Scrum变成了相当流行的软件开发方法学.因为它轻量.可迭代且快速等优点,以致于在敏捷开发中极受欢迎.微软甚至将TFS2010自带的MSF Agile5.0过程模板做得像Scrum,开发者们 ...

  5. WIN7环境下CUDA7.5的安装、配置和测试(Visual Studio 2010)

    以下基于"WIN7(64位)+Visual Studio 2010+CUDA7.5". 系统:WIN7,64位 开发平台:Visual Studio 2010 显卡:NVIDIA ...

  6. OpenCV2.4.9 & Visual Studio 2010 环境配置篇

    1. 准备工作 1.1. 安装 Visual Studio 2010, 需要安装 VC++ 相关功能.具体可求助度娘. 1.2. 下载 OpenCV 2.4.9 For Windows:https:/ ...

  7. Qt5 FOR WINCE7, Visual Studio 2008环境的搭建

    Qt5 FOR WINCE7, Visual Studio 2008环境的搭建 Qt5发布时,试过配置Qt5 for wince的环境,原因是暂时不支持WINCE.前几天意外发现官方博客说明已经开始支 ...

  8. 在 C 代码中嵌入 Python 语句或使用 Python 模块 (Visual Studio 2013 环境设置)

    1) 新建一个 内嵌 Python 语句的 C 代码, // This is a test for check insert the Python statements or module in C. ...

  9. 从头开始学eShopOnContainers——Visual Studio 2017环境配置

    一.安装和配置Docker环境 1.安装Docker CE for Windows 从官方网站下载并安装,https://docs.docker.com/docker-for-windows/inst ...

随机推荐

  1. Ace教你一步一步做Android新闻客户端(五) 优化Listview

    今天写存货了 调试一些动画参数花了些时间 ,嘿嘿存货不多了就没法做教程了,今天来教大家优化listview,等下我把代码编辑下 这次代码有些多 所以我把条理给大家理清楚.思路就是把加载图片的权利交给O ...

  2. 常用Redis命令

    在 Windows 下配置 Redis 集群 在 Windows 下配置多个 Redis(简化配置) MicrosoftArchive/redis 官方Redis集群搭建文档 Redis命令 Cent ...

  3. C#的params参数遇到null

    params参数支持数组作为参数传入,但并不支持List 定义一个使用params的参数 private static void UseParam(params int[] args) { if (a ...

  4. 小型Basic编译器问题

    # include <stdio.h> # include <string.h> # include <ctype.h> # include <stdlib. ...

  5. jQuery 菜单小练习(实现点击和移动鼠标效果)

    这个代码的练习是点击事件后 如何用jQuery联动的方式找到相关标签 实现的结果是点击菜单一或者菜单二等 会出现相关菜品,并隐藏其他菜品.鼠标移动才菜品上会在右侧框内出现相关菜品的价格.实现特殊的效果 ...

  6. 网页生命周期-PageLoad事件

    PageLoad事件的作用 l 页面载入是执行的处理命令 l 可以动态创建控件 l 可以设置现有控件的属性和状态 l 常用来设置数据库的连接 l 每次页面载入都会执行

  7. linux安装lua_nginx_module模块

    ngx_lua_module 是一个nginx http模块,它把 lua 解析器内嵌到 nginx,用来解析并执行lua 语言编写的网页后台脚本,可以用来实现灰度发布.另外淘宝的OpenResty也 ...

  8. ef linq 查询某时间段内数据 踩的坑

    var now = DateTime.Now;var list =db.Jinbi_TypeLimit.Where(x => x.IsAvailable && x.JinbiTy ...

  9. ireport 导出excel 分页 和 文本转数字格式的解决方法

    景:ireport 画excel 报表,导出时要求 数据分页,每页包含 标题和页脚 1.画excel 2.处理分页 首先建立一个变量totalNum 用于记录总共有多少条记录,注意设置属性为Integ ...

  10. clearfix为什么用display:table,而不用display:block

    我们都知道clearfix一般这么写: .clearfix:before,.clearfix:after{ content:""; display:table; } .clearf ...