在内核调用中使用assert

时间:2010-01-17 08:03:06

标签: cuda assert assertions

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

提前谢谢。

2 个答案:

答案 0 :(得分:15)

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;
}

答案 1 :(得分:2)

#define MYASSERT(condition) \
  if (!(condition)) { return; }

MYASSERT(condition);

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