CUDA:如何在内核代码中断言?

Ash*_*ppa 17 cuda assertion

CUDA 内核代码中断言的等效技术是什么?

似乎没有CUDA内核代码的断言.我想要一种在内核代码中轻松捕捉程序员错误的方法.一种机制,我可以设置需要为true的条件,并且当条件为false并且出现错误消息时内核应该挽救.

jmi*_*loy 5

对于 cc 2.x 或更高版本的设备,可以在内核中使用断言, void assert(int expression)expression == 0以便一旦调用主机同步函数,线程就会向 stderr 发送消息。

对于其他情况或无法使用断言(例如在 MacOS 上),您将无法从内核向主机返回错误消息或错误代码。

相反,我会设置一个错误状态并从主机检查它。使用设备全局内存或(更好的)映射主机内存来存储错误状态,作为参数传递给每个内核调用。在内核中使用if语句,如果语句失败,设置错误码并返回。您将能够在内核调用后检查来自主机的错误代码,但请记住,在检查错误代码之前,您将在内核启动后同步主机和设备。我想这对于开发来说会很好,但对于生产来说却不是那么好。

关于直接从设备打印错误消息

  • 在 1.x、2.x 和 3.0 卡中,您可以使用仿真模式打印错误消息。
  • 在 3.1 forward (on fermi) 中,显然您可以在内核中使用 printf 来打印错误消息。似乎它并不总是立即起作用,例如http://forums.nvidia.com/index.php?showtopic=182448