作者Absolitude (别再睡了起床了爱丽)
看板C_and_CPP
标题[问题] 新手 VS2015 CUDA addKernel launch fail
时间Sun Oct 1 15:31:28 2017
开发平台(Platform): (Ex: Win10, Linux, ...)
win8.1
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Visual Studio 2015
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
cuda
问题(Question):
我最近才知道有gpu运算这个东西,是cuda完全新手,想按照这个官方的影片练习
https://www.youtube.com/watch?v=2EbHSCvGFM0
所以安装了Visual Studio 2015和NVIDIA CUDA Toolkit 9.0,用VS2015建立专案就会有
一个预设的程式(如影片),但是这个程式建立专案时会遇到一些问题
https://imgur.com/wauloBh
我用记事本把这些档案存成UNICODE後这些错误讯息就不见了
https://imgur.com/o3Ic0Om
但是执行後抓不到kernel
https://imgur.com/WSbM65U
========
如果改成影片中的程式建立专案也没问题,但是执行後直接当掉
https://imgur.com/hW9Gz0A
https://imgur.com/W07Ckas
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
https://imgur.com/WSbM65U
addKernel launch failed
程式码(Code):(请善用置底文网页, 记得排版)
VS2015开cuda预设的程式以及影片中的范例程式,如果有需要我再贴上来~
https://github.com/wreardan/GlimmerCuda/blob/master/kernel.cu
补充说明(Supplement):
虽然用cmd执行结果跟官网范例的Figure 1 好像不太一样(这样有问题吗?)
https://imgur.com/viLPYnR
https://goo.gl/TBa5Ua
但是NVIDIA CUDA Toolkit 9.0安装应该没有问题,因为本来MATLAB抓不到gpuDevice,安
装之後就可以抓到,变数可以存到gpuArray也可以顺利执行
想请问一下问题可能是出在哪里? 感恩
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.114.235.65
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1506843115.A.56B.html
1F:→ a1u1usul3: code附一下吧 10/02 12:38
2F:→ a1u1usul3: figure1是deviceQuery,你自己跑的只是nvcc -v,就不同 10/02 12:44
原来如此
我刚刚发现我没有deviceQuery那个档案!?
https://imgur.com/oFQyc7u
已补上(别人上传的) 感恩~
※ 编辑: Absolitude (140.114.253.178), 10/02/2017 13:29:11
对了
之前有遇到建立侦错时出现"找不到或无法开启 PDB 档案。"的错误讯息
参考
https://goo.gl/uBMFdu 可以处理掉大部分的错误讯息,但是还是有几个看起来跟
NVIDIA有关的dll档无法开启,但是实际上是有这些档案的,有可能是这个原因吗
https://imgur.com/TAq1mGe
※ 编辑: Absolitude (140.114.253.178), 10/02/2017 13:52:57
※ 编辑: Absolitude (140.114.253.178), 10/02/2017 13:59:42
范例档侦错时有这些讯息
https://imgur.com/giYOrCF
※ 编辑: Absolitude (140.114.253.178), 10/02/2017 14:36:49
3F:→ a1u1usul3: 最新的cuda通常支援度都不太好,要不要试试cuda8 10/02 15:34
4F:→ a1u1usul3: 我很不会用visual studio,都用linux写cuda程式 10/02 15:34
我先试试CUDA8 噢
对LINUX不熟>"< 希望未来有机会学
谢谢~
※ 编辑: Absolitude (140.114.253.178), 10/02/2017 15:37:56
就是这个原因!!!!! 装第八版之後范例程式档和另一个SAMPLE档都可以执行了!
浪费我一天..
不过那个影片的范例档还是无法执行@@
https://imgur.com/pEINkNc
程式码
#include <stdio.h>
#define SIZE 1024
__global__ void VectorAdd(int *a, int *b, int *c, int n)
{
int i = threadIdx.x;
c[i] = a[i] + b[i];
}
int main()
{
int *a, *b, *c;
cudaMallocManaged(&a, SIZE * sizeof(int));
cudaMallocManaged(&b, SIZE * sizeof(int));
cudaMallocManaged(&c, SIZE * sizeof(int));
for (int i = 0; i < SIZE; ++i)
{
a[i] = i;
b[i] = i;
c[i] = 0;
}
VectorAdd << <1, SIZE >> > (a, b, c, SIZE);
cudaDeviceSynchronize();
for (int i = 0; i < 10; ++i)
printf("c[%d] = %d\n", i, c[i]);
cudaFree(a);
cudaFree(b);
cudaFree(c);
return 0;
}
我看看怎麽把程式码放到网路上
※ 编辑: Absolitude (140.114.253.20), 10/02/2017 17:34:01
5F:→ a1u1usul3: 我用linux执行你贴的code没问题 10/02 20:09
7F:→ a1u1usul3: 贴code可以用codepad或类似的网站 10/02 20:13
谢谢~
8F:→ a1u1usul3: 我加了一点error handling的code,你看看是什麽原因吧 10/02 20:24
结果是这样..
https://imgur.com/Zz3YEIa
我稍早发现一个问题,就是预设的范例档跟自己额外写的程式__global__似乎不一样
范例档
https://imgur.com/aKOr5qV
自己的
https://imgur.com/GWZOQtW
我原本以为是vs版本不同,因为之前又装了2013,想说他影片里是2015,今晚重装vs2015
第一次装坏,装第二次,又装两次nvidia toolkit从晚上八点装到刚刚才装好....但
global的问题还是在不知道怎麽办,我真该学linux了,windows真的快搞死我.....
※ 编辑: Absolitude (140.114.235.65), 10/03/2017 02:00:30
如果同时把范例档最上面的两个INCLUDE拿掉global就会从"#define...."变成下面的
"这个宣告.....",如果在维持有define的global的情况下(不删最上面include)执行
你的程式,结果也是operation not supported.....到底怎麽回事,快被搞疯了..
※ 编辑: Absolitude (140.114.235.65), 10/03/2017 02:11:59
※ 编辑: Absolitude (140.114.235.65), 10/03/2017 02:13:00
好像跟"这个宣告没有任何储存...."无关
下载了 cuda by example的范例档,读取他自创的的book.h档案也会显示"这个宣告没有
任何储存....",但是可以执行,所以是我的stdio.h有问题@@
https://developer.nvidia.com/cuda-example
※ 编辑: Absolitude (140.114.235.65), 10/03/2017 03:59:39
12F:→ a1u1usul3: In CUDA 6, Unified Memory is supported starting wit 10/03 13:44
13F:→ a1u1usul3: h the Kepler GPU architecture (Compute Capability 3 10/03 13:44
14F:→ a1u1usul3: .0 or higher) 10/03 13:45
15F:→ a1u1usul3: 你的卡会不会很旧了,Capability有大於3吗? 10/03 13:45
我的是 810M,刚刚查了一下,不知道为什麽这张表没有,820、800都有就是跳过810,
不过没意外的话这两张都只有2.1,那我这张也不会超过3
https://developer.nvidia.com/cuda-gpus
GeForce 820M 2.1
GeForce 800M 2.1
请问这个计算是属於Unified Memory吗? (其实我完全不懂>"<),不过CUDA给VS的范例档
目前看起来都还算能执行,之前用MATLAB也能跑gpuArray的工作
真的很谢谢你愿意持续回答我的问题
※ 编辑: Absolitude (140.114.235.65), 10/03/2017 14:57:33
16F:推 a1u1usul3: 不是每个范例都跑得起来,有些function会要新的显卡才 10/03 15:32
17F:→ a1u1usul3: 支援,有用到那些function的范例就会跑不起来 10/03 15:32
18F:推 a1u1usul3: 2.1确实是有点旧了,要常常考虑是不是不被支援的问题 10/03 15:35
19F:→ a1u1usul3: cudaManagedAlloc看起来是Unified的 10/03 15:37
原来真相是这样,我了解了!! 非常感谢
※ 编辑: Absolitude (140.114.235.65), 10/03/2017 16:56:57