1. 问题描述
操作环境:VS2017+CUDA11.1
显卡:GT930M
运行第一个 Hello World程序
代码:
// An highlighted block
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "stdio.h"
/* 修饰符__global__表明这个函数是将会从CPU中调用,在GPU中进行执行。 并借此函数来启动内核函数。 */
__global__ void kernel_hello(void)
{
printf("Hello World ! \n");
}
int main(void) {
kernel_hello <<<1, 5 >>> ();
/* 三重尖括号里的参数表明的是相关的执行配置,用来表明使用多少线程来执行内核函数, 在本例子中有5个GPU线程被系统所调用。 */
cudaDeviceReset();
/* 执行完成后调用cudaDeviceReset()函数释放和清空与当前进程运行相关的资源。 */
return 0;
}
但发现发现可以运行,不报错,但不输出 printf语句里的内容
然后运行了一个cuda自带的例子:计算两个数组间的加法
输出如下
2.解决方法
查阅后分析原因可能是cuda版本过高,不匹配当前显卡
(1)查看本机显卡的算力
打开控制台,输入
cd C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\extras\demo_suite
11.1是我的cuda版本,改成你自己的
输入
deviceQuery.exe
如图,我的算力是5.0,你的是多少就是多少
(2)VS中配置
工程右键属性
增加 -arch sm_xx ,xx指算力,例如我的上面步骤得出的GT930M的算力是5.0,那么就是 -arch sm_50