首页 > 解决方案 > 如何在 CUDA 设备代码中使用 Try-Catch 之类的东西

问题描述

有没有办法在设备代码中执行语句而不引发 CUDA 错误?如下所示:

__global__ void myKernel(float* X1, float* X2, float* Y){
try{
    Y[0] = X1[0] / X2[0];
   }catch(){
    Y[0] = 0.0f;
    }
}

我知道我们可以在除法之前检查 X2[0] 的值,但是如果我想在不检查有效输入的情况下执行语句并安全地执行呢?

标签: cuda

解决方案


目前,CUDA 设备代码不支持异常处理

try/catch不能在 CUDA 设备代码中使用。

如果语句会导致设备端错误(例如,越界访问),则无法在设备代码中执行该语句而不触发设备端错误。

为了避免错误,您需要修改语句,或者有条件地不执行它,以避免触发设备端错误。


推荐阅读