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   }