デバイスモードでのカーネル呼び出し内でアサートを使用するための便利な方法はありますか?
質問する
6954 次
2 に答える
25
CUDA にネイティブの assert 関数が追加されました。を使用し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 に答える