10

デバイスモードでのカーネル呼び出し内でアサートを使用するための便利な方法はありますか?

4

2 に答える 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 に答える