标签: cuda-gdb

所有CUDA设备都用于显示:无法在桌面环境中调试我的CUDA代码

从上周开始,我的CUDA开发设置出现了很大问题.我有一个集成的GPU,我也连接了我的显示器和一个额外的NVIDIA卡,用于运行我的CUDA内核.但是,我不能再调试我的代码,因为它说:

fatal:  All CUDA devices are used for display and cannot be used while debugging. (error code = CUDBG_ERROR_ALL_DEVICES_WATCHDOGGED(0x18)
Run Code Online (Sandbox Code Playgroud)

不知何故,似乎我的X-Server阻止了我的NVIDIA GPU,因为如果我切换到另一个虚拟控制台(CTRL + ALT + F1),我可以使用cuda-gdb运行我的代码.没有显示器电缆插入NVIDIA卡...

"lsof/dev/nvidia*"不提供任何输出.我正在使用Xubuntu 14.04.

有谁知道如何解决这个问题?

ubuntu cuda cuda-gdb

6
推荐指数
2
解决办法
2750
查看次数

检测到Cuda API错误时如何查找程序在哪里崩溃:cudaMemcpy返回(0xb)

我正在调试cuda程序,并收到以下警告:

warning: Cuda API error detected: cudaMemcpy returned (0xb)

warning: Cuda API error detected: cudaMemcpy returned (0xb)

warning: Cuda API error detected: cudaGetLastError returned (0xb)

Error in kernel
GPUassert: invalid argument
Run Code Online (Sandbox Code Playgroud)

当我在cuda-gdb中键入“ where”时,它显示“ no stack”。

(cuda-gdb) where
No stack.
Run Code Online (Sandbox Code Playgroud)

如何找到我的程序崩溃的地方?

c++ cuda cuda-gdb

5
推荐指数
1
解决办法
1280
查看次数

CUDA调试,或如何在不禁用优化的情况下获取cuda-gdb中的源代码行?

我有一个相当大而复杂的CUDA代码,可以很好地挂起大量的块/线程.我试图找出代码挂起的确切位置.

当我运行代码时cuda-gdb,我可以看到哪些线程/块挂起,但我无法看到"虚拟PC"之外的位置.

如果我使用"-G"编译代码来获取调试信息,那么无论我运行多长时间,它都会运行得慢很多并且拒绝挂起.

有没有办法将"虚拟PC"映射到源代码中的一行代码,甚至大约?或者有没有办法在不关闭所有优化的情况下获取调试信息?

我尝试过使用"-G3",但无济于事.这只是给了我"#nvcc warning : Setting optimization level to 0 as optimized debugging is not supported" 类型的警告.我正在使用CUDA编译工具4.1版.

debugging cuda nvidia cuda-gdb

4
推荐指数
1
解决办法
2757
查看次数

cudaGetLastError返回(0xb)

我正在尝试解决CUDA运行时错误.cuda-gdb报告的调试信息(使用cuda-memcheck):

warning: Cuda API error detected: cudaLaunch returned (0xb)  
warning: Cuda API error detected: cudaGetLastError returned (0xb)  
[Thread 0x7fa1a28c5700 (LWP 43041) exited]
[Thread 0x7fa1a16a5700 (LWP 43042) exited]
[Thread 0x7fa18df0e700 (LWP 43056) exited]
Run Code Online (Sandbox Code Playgroud)

我检查了块,网格尺寸和正在使用的动态共享内存的大小,它们远低于限制.请告诉我什么(0xb)错误类型代表,我没有在cuda文档中找到它.另外,请告诉我有关如何解决此问题的任何建议?
设备:开普勒K20(CC = 3.5)和CUDA 5.5
代码太大,无法在此粘贴.

cuda cuda-gdb

4
推荐指数
1
解决办法
3669
查看次数

调试时看不到任何变量值

我在 Ubuntu 16.04 上使用 Nsight。我当前的设置允许我通过 nsight IDE 完美地编译和运行我的代码。在确保程序是在调试模式下构建的(最初不是)后,它最终允许我单步调试我的代码。

我遇到的问题是每当我尝试调试代码时,所有变量都显示“不可用”。另外,如果我将鼠标悬停在变量上,它会显示类似“-var-create:无法创建变量对象”之类的内容。这看起来可能是编译器的问题?也许它没有添加它应该做的事情?

Nsight 版本为 7.5,GCC & G++ 版本为 5.3.1,GDB 版本为 7.11,NVCC 版本为 7.5.17。

c c++ debugging cuda cuda-gdb

3
推荐指数
1
解决办法
3130
查看次数

cudaDeviceSynchronize上的非法内存访问

我遇到一个非常奇怪的错误,因为我在运行特定大小的Heat 2D模拟时遇到"非法内存访问"错误,但如果运行完全相同的模拟,模拟运行良好,只需少量元素.

是否有理由增加数组的大小会导致此异常?我正在使用Titan Black GPU(6 GB内存),但我正在运行的模拟远不是那么大.我计算出我可以运行4000 x 4000模拟,但是如果我超过250 x 250就会出错.

我在设备上实例化模拟对象数组后立即发生错误.实例化代码如下:

template<typename PlaceType, typename StateType>
__global__ void instantiatePlacesKernel(Place** places, StateType *state,
        void *arg, int *dims, int nDims, int qty) {
    unsigned idx = blockDim.x * blockIdx.x + threadIdx.x;

    if (idx < qty) {
        // set pointer to corresponding state object
        places[idx] = new PlaceType(&(state[idx]), arg);
        places[idx]->setIndex(idx);
        places[idx]->setSize(dims, nDims);
    }
}

template<typename PlaceType, typename StateType>
Place** DeviceConfig::instantiatePlaces(int handle, void *argument, int argSize,
        int dimensions, int size[], int qty) {

    // add …
Run Code Online (Sandbox Code Playgroud)

cuda cuda-gdb

2
推荐指数
1
解决办法
7742
查看次数

cuda异常后的内存数据状态

在CUDA应用程序抛出异常后,CUDA文档不清楚内存数据如何变化.

例如,内核启动(动态)遇到异常(例如Warp超出范围的地址),将停止当前的内核启动.在此之后,设备上的数据(例如__device__变量)是否仍然保留,或者它们是否与例外一起被删除?

一个具体的例子是这样的:

  1. CPU启动内核
  2. 内核将__device__ variableA的值更新为5,然后崩溃
  3. CPU memcpy从设备到主机的variableA的值,在这种情况下CPU获得的值是5,还是其他什么?

有人能说明这背后的理由吗?

cuda exception-handling cuda-gdb

2
推荐指数
1
解决办法
751
查看次数

传递给设备功能的共享内存地址仍然是共享内存?

假设我有这个__device__功能:

__device__ unsigned char* dev_kernel(unsigned char* array_sh, int params){
    return array_sh + params;
}
Run Code Online (Sandbox Code Playgroud)

__global__内核中,我以这种方式使用它:

uarray = dev_kernel (uarray, params);
Run Code Online (Sandbox Code Playgroud)

uarray共享内存中的数组在哪里?

但是当我使用CUDA-gdb来看到的地址的情况uarray中的__global__内核,我得到:

(@generic unsigned char * @shared) 0x1000010 "z\377*"
Run Code Online (Sandbox Code Playgroud)

__device__内核中,我得到:

(unsigned char * @generic) 0x1000010 <Error reading address 0x1000010: Operation not permitted>
Run Code Online (Sandbox Code Playgroud)

尽管有错误,程序仍可以正常运行(也许是cuda-gdb的某些限制)。

所以,我想知道:在__device__内核中,uarray是共享的吗?我将阵列从全局内存更改为共享内存,时间几乎相同(对于共享内存,时间会更糟)。

cuda cuda-gdb

1
推荐指数
1
解决办法
3475
查看次数

标签 统计

cuda ×8

cuda-gdb ×8

c++ ×2

debugging ×2

c ×1

exception-handling ×1

nvidia ×1

ubuntu ×1