Я хотел бы указать, что утверждение может возникать только в одном потоке, но если вы решите досрочно прекратить этот поток, его отсутствие может вызвать другие ошибки (и, возможно, другие утверждения), которые происходят позже; что может привести к полному сбою ядра и отсутствию всей информации на графическом процессоре.
Кроме того, ответ, приведенный в «Using assert within kernel invocation», будет работать только в том случае, если assert используется непосредственно в функции __ global__, а не глубже, где-то внутри функции __ device__.
Мое предложение состоит в том, что даже утверждение не выполняется, вы обычно выполняете свой код, но оставляете сообщение об ошибке. Вы можете использовать сопоставленную, закрепленную память (вы размещаете память оперативной памяти в адресное пространство графического процессора) для хранения кодов ошибок/сообщений. Таким образом, даже если сбой ядра и сбой GPU, вы, вероятно, получите ценную информацию в этой карте памяти. Если я не ошибаюсь, сопоставленная, закрепленная память поддерживается почти всеми устройствами Compute Capability 1.1 и выше.
Можете ли вы утверждать в режиме эмуляции? – jmilloy
jmilloy: Режим эмуляции не поддерживается в CUDA 3.x. –
Для любого, кто сталкивается с этим через Google, как и я, ** утверждает, что в коде ядра теперь возможны: ** http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html #assertion – Sam