首页 新闻 会员 周边

VS2013+CUDA无法命中断点

0
悬赏园豆:50 [已关闭问题] 关闭于 2016-10-10 09:28

这是一个简单的程序,在GPU上申请长度为5个int型的buffer,其他什么都没有做。

复制代码
 1 #include "cuda_runtime.h"
 2 #include "device_launch_parameters.h"
 3 #include <iostream>
 4 using namespace std;
 5 int main()
 6 {
 7     int *dev_buf = 0;
 8     cudaError_t cudaStatus;
 9     cudaStatus = cudaSetDevice(0);//选择GPU
10     if (cudaStatus != cudaSuccess) 
11     {
12         cout << "GPU设置错误\n";
13         goto Error;
14     }
15     cudaStatus = cudaMalloc((void**)&dev_buf, 5 * sizeof(int));//申请空间
16     cudaStatus = cudaDeviceReset();//结束,GPU重置
17     if (cudaStatus != cudaSuccess) 
18     {
19         cout<<"GPU重置错误";
20         return 1;
21     }
22 Error:
23     cudaFree(dev_buf);
24     return 0;
25 }
复制代码

在调试时,出现了很奇怪的现象,在第10行,cudaStatus 已经等于 cudaSuccess,但单步调试还是进入if后面{}内,但只经过了goto这一行,但却没有转跳。继续单步直接越过15行,到了16行。如果直接把断点设置在15行,启动调试时,断点就自动跳到16行了。然而程序的确给dev_buf分配了显存,程序运行正常。反复尝试发现,程序中第一次出现的cudaMalloc()函数无法命中断点,且对前面语句产生影响,如果程序里再出现一个或多个cudaMalloc,一切单步调试正常。以为是代码与程序不一致,网上找了各种设置,均无效。CUDA版本是7.5,新手,请各位大牛指教。万分感激。

临时民工的主页 临时民工 | 菜鸟二级 | 园豆:204
提问于:2016-07-17 12:39
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册