下载网址:https://developer.nvidia.com/cuda-downloads
系统:wind7 64位
开发平台 vs2010
显卡:NVIDIA(英伟达) GeForce GT 640
cuda6.5
前言:我的只安装上了cuda toolkit, cuda samples没有安装成功(如果有谁实验成功请分享)
安装步骤:
运行安装程序,弹出安装过程中转文件路径设定框:
这个路径随便填无所谓,安装完后就会自动删除的,我就直接设置为默认的。
等待系统帮你检测当前平台是否适合搭建CUDA:
检测完毕后,正式进入CUDA安装界面:
同意并继续
然后选择安装模式:
为了完全安装所有功能,选择自定义模式安装。
接下来勾选要安装的组件:
全部勾上
接下来要设置三个安装路径:
这三个路径安装的是什么在日后的文章中将会解释,目前先不理会,直接安装到默认路径。点击下一步之后开始正式安装。
安装完毕后,可以看到系统中多了CUDA_PATH和CUDA_PATH_V6_0两个环境变量,接下来,还要在系统中添加以下几个环境变量:
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
CUDA_BIN_PATH = %CUDA_PATH%\bin
(我的是这样,不过没有关系,可以用,就是不能用samples的例子)
重新启动计算机以使环境变量生效
下面是配置:
1.新建一个项目 (引用(1))
打开VS2010并建立一个空的win32控制台项目:
附加选项那里请把“空项目”打钩:
第十一步
右键源文件 -> 添加 -> 新建项 如下图所示:
在打开的对话框中选择新建一个CUDA格式的源文件 (如果你只是要调用 CUDA 库编写程序而不需要自行调用核函数分配块,线程的话也可以就建立 .cpp 的源文件):
第十二步
右键工程 -> 生成自定义 如下图所示:
在弹出的对话框中勾选“CUDA 6.5 *****"选项:
第十三步
右键项目 -> 属性 -> 配置属性 -> VC++目录,添加以下两个包含目录:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include
再添加以下两个库目录:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\lib\x64
第十四步
右键项目 -> 属性 -> 配置属性 ->连接器 -> 常规 -> 附加库目录,添加以下目录:
$(CUDA_PATH_V6_5)\lib\$(Platform)
如下图所示:
右键项目 -> 属性 -> 配置属性 ->连接器 -> 输入 -> 附加依赖项,添加以下库:
cudart.lib
第十六步
右键项目 -> 属性,如下图所示:
将项类型设置为 CUDA C/C++:
第十七步
打开配置管理器,如下图所示:
点击 新建,如下图所示:
选择 X64 平台:
好了,开始测试
#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
__global__ void SaXPY(float a, float* X_d, float* Y_d, int n)
{
if (threadIdx.x < n)
Y_d[threadIdx.x] = a * X_d[threadIdx.x] + Y_d[threadIdx.x];
}
int main()
{
int n = 64;
float a = 2;
float *X_h, *X_d, *Y_h, *Y_d;
X_h = (float*)malloc(n * sizeof(float));
Y_h = (float*)malloc(n * sizeof(float));
for (int i = 0; i < n; i++)
{
X_h[i] = (float)i;
Y_h[i] = 1.0;
}
cudaMalloc(&X_d, n * sizeof(float));
cudaMalloc(&Y_d, n * sizeof(float));
cudaMemcpy(X_d, X_h, n * sizeof(float), cudaMemcpyHostToDevice);
cudaMemcpy(Y_d, Y_h, n * sizeof(float), cudaMemcpyHostToDevice);
SaXPY <<<1, 64 >>>(a, X_d, Y_d, n);
cudaMemcpy(Y_h, Y_d, n * sizeof(float), cudaMemcpyDeviceToHost);
for (int i = 0; i < n; i++)
printf("%2.1f X[%d] + Y[%d] = %f\n", a, i, i, Y_h[i]);
cudaFree(X_d);
cudaFree(Y_d);
free(Y_h);
system("Pause");
return 0;
}
引用:1.http://www.cnblogs.com/scut-fm/p/3708723.html
2.http://www.cnblogs.com/liangliangdetianxia/p/3978955.html