gpt4 book ai didi

cuda - 优雅地崩溃内核

转载 作者:行者123 更新时间:2023-12-04 17:53:13 26 4
gpt4 key购买 nike

跟进:CUDA: Stop all other threads

如果发生“不良情况”,我正在寻找一种退出内核的方法。
prog 手册说 NVCC 不支持异常处理。我想知道是否有用户定义的 cuda-error-code。换句话说,如果“坏”发生,则以这个用户错误代码终止。我怀疑是否有一个,所以我的另一个想法是引起一个。

就像,如果“坏”发生,除以零。但是我不确定一个线程是否被零除,这是否足以使整个内核崩溃,或者只是该线程崩溃?

有没有更好的方法来终止内核?

最佳答案

您应该先阅读 this question and the answers by harrism and tera (昨天询问/回答)。

你可能会想使用类似的东西

if (there_is_an_error) {
*status = MY_ERROR_CODE; // store to device pointer
__threadfence(); // ensure store issued before trap
asm("trap;"); // kill kernel with error
}

在我看来,这并不完全满足您的“优雅”条件。 Trap 导致内核退出,运行时报告 cudaErrorUnknown .但是由于内核执行是异步的,您将需要同步您的流/设备以捕获此错误,这意味着在每次内核调用后进行同步,除非您对不精确的错误感到满意(即您可能直到对后续 CUDA API 调用的调用)。

但这只是 CUDA 中内核错误处理的方式,编写好的代码应该在调试版本中同步以检查内核错误,并在发布版本中解决不精确的错误消息。不幸的是,我认为没有比这更优雅的方式了。

编辑:在计算能力 2.0 及更高版本上,您可以使用 assert() 在调试版本中出现错误退出。目前还不清楚这是否是你想要的。

关于cuda - 优雅地崩溃内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12521721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com