作为一个较大项目的一部分,我遇到了一个奇怪的一致错误,我无法回避,但它是一个典型的“黑匣子”错误。当使用cuda-gdb python -m pycuda.debug prog.py -args运行时,它可以正常运行,但速度较慢。如果我删除pycuda.debug,它会中断。一致地,在多内核执行中的同一点。

解释;我有(目前有三个)内核,用于不同的网格和块排列中,以解决较大优化问题的“片段”。从严格意义上说,这些功能应该起作用,或者不起作用,因为除了“数据这里的内容”之外,什么都没有告诉函数本身,而且除了数据的内容之外,不知道诸如迭代编号之类的内容,无论它们的输入数据是分区的还是直到这一点,他们的表现都很出色。

基本上,如果没有pycuda.debug将调试符号暴露给GDB,我将看不到正在发生的事情,但是我也看不到pycuda.debug的问题。

pycuda实际上是做什么的,所以我知道要在内核代码中查找什么?

最佳答案

几乎没有。它主要在pycuda.driver模块中设置编译器标志,以便CUDA代码使用必要的调试符号进行编译,并按照CUDA-gdb的要求进行组装。其余的是一个很小的包装器,很好地封装了pycuda库,因此一切正常。整个过程大约有20行python,如果需要,您可以在源代码发布中看到代码。

这里的关键是调试器中运行的代码会将所有内容从寄存器和共享内存溢出到本地内存,以便驱动程序可以读取本地程序状态。因此,如果您的代码在为调试器构建时运行,而在正常构建时失败,则通常意味着存在共享内存缓冲区溢出或指针错误,这会导致GPU出现段错误。

关于python - pycuda.debug实际上是做什么的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5775246/

10-11 18:51