【发布时间】:2010-01-17 08:03:06
【问题描述】:
在设备模式下的内核调用中使用断言是否有方便的方法?
【问题讨论】:
在设备模式下的内核调用中使用断言是否有方便的方法?
【问题讨论】:
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;
}
【讨论】:
#define MYASSERT(condition) \
if (!(condition)) { return; }
MYASSERT(condition);
如果您需要更高级的东西,您可以使用cuPrintf(),注册开发人员可以从 CUDA 网站获得。
【讨论】:
else 关键字:if (condition) /* do nothing */; else return
bool success 由主机初始化为 true)来指示事件。多个线程将false 写入标志并不重要,因为它们总是写入相同的值,因此竞争无关紧要。