DPCT1034
目次
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 }