DPCT1034#

メッセージ#

移行された API はエラー コードを返しません。ラムダでは 0 が返されます。このコードを書き換える必要があります。

詳細な説明#

通常、これはオリジナル・アプリケーションで API 呼び出しがエラーコードを返し、それがプログラムロジックで使用されるために起こります。

SYCL* では、エラーの報告に例外を使用しており、エラーコードは使用していません。

インテル® DPC++ 互換性ツールは、プログラムロジックが期待するリターンコードが新しい API で返されない場合、ラムダ式の最後に return 0; 文を挿入します。このような場所はすべてコードで確認する必要があります。

DPCT1003 に似ています。

修正方法の提案#

DPC++ アプリケーションで次の操作を行います。

  • エラーコードを使用するコードが不要な場合、そのコードと return 0; 文を削除します。

  • エラーコードを使用するコードが必要な場合、そのコードを例外処理コードに置き換えて、例外ハンドラーで独自のロジックを使用します。

DPCT1003 に似ています。

例えば、以下のオリジナル CUDA* コードについて考えてみます。

1   void foo() { 
2     CUdevice device; 
3     CUresult status = cuDeviceComputeCapability(&result0, &result1, device); 
4   }

このコードは、以下の SYCL* コードに移行されます。

1   void foo() { 
2     /* 
3     DPCT1034:0: Migrated API does not return an error code.0 is returned in the 
4     lambda.You may need to rewrite this code.
5     */ 
6     int status = [&]() { 
7     result0 = dpct::dev_mgr::instance().get_device(device).get_major_version(); 
8     result1 = dpct::dev_mgr::instance().get_device(device).get_minor_version(); 
9     return 0; 
10    }(); 
11  }

このコードは次のように書き換えられます。

1   void foo() { 
2     try { 
3     result0 = dpct::dev_mgr::instance().get_device(device).get_major_version(); 
4     result1 = dpct::dev_mgr::instance().get_device(device).get_minor_version(); 
5     } catch (...) { 
6        ... 
7     } 
8   }