pycuda.debug实际上是做什么的?

| 作为一个较大项目的一部分,我遇到了一个奇怪的一致错误,我无法理解,但是它是一个典型的“黑匣子”错误;当以
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出现段错误。     

要回复问题请先登录注册