10

在设备模式下的内核调用中使用断言是否有方便的方法?

4

2 回答 2

25

CUDA 现在有一个原生的断言函数。使用assert(...). 如果它的参数为零,它将停止内核执行并返回一个错误。(或在 CUDA 调试中触发断点。)

确保包含“assert.h”。此外,这需要计算能力 2.x 或更高版本,并且在 MacOS 上不受支持。有关详细信息,请参阅 CUDA C 编程指南,第 B.16 节。

编程指南还包括此示例:

#include <assert.h>
__global__ void testAssert(void)
{
   int is_one = 1;
   int should_be_one = 0;
   // This will have no effect
   assert(is_one);
   // This will halt kernel execution
   assert(should_be_one);
}
int main(int argc, char* argv[])
{
   testAssert<<<1,1>>>();
   cudaDeviceSynchronize();
   return 0;
}
于 2015-07-20T20:56:49.360 回答
2
#define MYASSERT(condition) \
  if (!(condition)) { return; }

MYASSERT(condition);

如果您需要更高级的东西,您可以使用cuPrintf()CUDA 网站上的注册开发人员。

于 2010-01-17T08:39:35.370 回答