DPCT1054#

メッセージ#

<variable name> のタイプは、デバイスの関数内で <type> という名前で宣言されています。アクセサー宣言時に <type> 宣言が参照できるようにコードを調整します。

説明#

この警告は、__shared__ 変数の型がデバイス関数内で宣言されている場合に出力されます。

移行したコードで次のことが行われます。

  • ツールは、デバイス関数に以下を追加します。

    # uint8_t* 入力パラメーター # タイプへの名前 (名前がない場合) - 例: type_ct1 # uint8_t* からオリジナルのタイプへのタイプキャスト (オリジナルの型宣言の後)

  • 呼び出し側では、ローカルアクセサーを定義する際に、最初のテンプレート引数が uint8_t[sizeof(<original type, for example "type_ct1">)] に設定されます。

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

1 // ヘッダーファイル 
2 template <typename T> __global__ void k() { 
3 __shared__ union { 
4 T t; 
5...6 } a; 
7 ... 8 } 
9 
10 // ソースファイル 
11 void foo() { k<int><<<1, 1>>>(); }

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

1 // ヘッダーファイル 
2 template <typename T> void k(uint8_t *a_ct1) { 
3 union type_ct1 { 
4 T t; 
5 ... 6 }; 
7 type_ct1 *a = (type_ct1 *)a_ct1; 
8 ... 9 } 
10 
11 // ソースファイル  
12 void foo() { 
13 dpct::get_default_queue().submit([&](sycl::handler &cgh) { 
14 /* 
15 DPCT1053:0: The type of variable a is declared in device function with the 
16 name type_ct1.Adjust the code to make the type_ct1 declaration visible at 
17 the accessor declaration point.18 */ 
19 sycl::accessor<uint8_t[sizeof(type_ct1)], 0, sycl::access::mode::read_write, 
20 sycl::access::target::local> a_ct1_acc_ct1(cgh); 
21 ... 22 }); 
23 }

修正方法の提案#

型宣言をアクセサー宣言位置で見えるように移動するか sizeof(<original type> をオリジナルのタイプに必要なサイズ (バイト) に置き換えます。