其他链接:
CUDA编程基本入门学习笔记
参考博文:
https://www.cnblogs.com/skyfsm/p/9673960.html
https://www.cnblogs.com/ww1x/p/10820362.html
1.下载cuda10.0
(有更高版本建议尝试下载更高版本,高版本可支持低驱动,低版本不支持高去驱动)
https://developer.nvidia.com/cuda-10.0-download-archive
一路安装。
测试是否成功:
进入cmd,输入nvcc -V命令,出现显卡型号则说明成功。
2.打开VS2015E
2.1 创建空项目:
我们需要确定一下编译器的环境,我使用的是
release x64
2.2 然后打开右侧属性管理器,右击release x64
,然后选择添加新项目属性表:
将属性表保存到指定位置,当下次创建项目后就可以直接调用了。
然后双击我们新创建的属性表:
2.3 找到链接器->常规->附加库目录
,
添加 $(CUDA_PATH)\lib\$(Platform)
2.4 然后找到链接器->输入->附加依赖项
填入:
cublas.lib
cuda.lib
cudadevrt.lib
cudart.lib
cudart_static.lib
OpenCL.lib
//可能并用不到这么多lib,但对于新手来说,这样不会因为漏掉lib而报错
(可在cuda下的lib目录找,cuda10.0默认目录:C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/lib/x64)
然后关掉属性页。
2.5 新建CUDA C/C++文件
点开右侧解决方案资源管理器,右击:添加->新建项
,
然后选择 NVIDIA CUDA 10.0 -> code -> CUDA C/C++ File
文件取名test
2.6 关闭属性页,在右侧解决方案资源管理器,右击项目名称,
选择生成依赖项->生成自定义
选择cuda选项:
2.7 设置 test.cu的属性
在右侧解决方案资源管理器,右击新创建的test.cu
文件,选择属性:
然后在常规->项类型
中选择CUDA C/C++:
2.8 点击菜单栏:工具->选项:
然后点击:文本编译器->文件扩展名
,添加如下:
3.常见问题
如图:
解决方案:
一般都是附加依赖项添加的有缺失,可以尝试检查依赖项目录无误,然后继续添加lib/x64目录下lib文件名称
4.最后验证代码:
在test.cu中输入:
可以查看我们GPU的一些硬件配置情况:
#include "device_launch_parameters.h"
#include <iostream>
int main()
{
int deviceCount;
cudaGetDeviceCount(&deviceCount);
for(int i=0;i<deviceCount;i++)
{
cudaDeviceProp devProp;
cudaGetDeviceProperties(&devProp, i);
std::cout << "使用GPU device " << i << ": " << devProp.name << std::endl;
std::cout << "设备全局内存总量: " << devProp.totalGlobalMem / 1024 / 1024 << "MB" << std::endl;
std::cout << "SM的数量:" << devProp.multiProcessorCount << std::endl;
std::cout << "每个线程块的共享内存大小:" << devProp.sharedMemPerBlock / 1024.0 << " KB" << std::endl;
std::cout << "每个线程块的最大线程数:" << devProp.maxThreadsPerBlock << std::endl;
std::cout << "设备上一个线程块(Block)种可用的32位寄存器数量: " << devProp.regsPerBlock << std::endl;
std::cout << "每个EM的最大线程数:" << devProp.maxThreadsPerMultiProcessor << std::endl;
std::cout << "每个EM的最大线程束数:" << devProp.maxThreadsPerMultiProcessor / 32 << std::endl;
std::cout << "设备上多处理器的数量: " << devProp.multiProcessorCount << std::endl;
std::cout << "======================================================" << std::endl;
}
system("pause");
return 0;
}
效果: