Использование assert в вызове ядра - PullRequest
6 голосов
/ 17 января 2010

Есть ли удобный способ использования утверждений при вызове ядер в режиме устройства?

Спасибо, заранее.

Ответы [ 2 ]

16 голосов
/ 20 июля 2015

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;
}
2 голосов
/ 17 января 2010
#define MYASSERT(condition) \
  if (!(condition)) { return; }

MYASSERT(condition);

если вам нужно что-то более необычное, вы можете использовать cuPrintf(), который доступен на сайте CUDA для зарегистрированных разработчиков.

...