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>
をオリジナルのタイプに必要なサイズ (バイト) に置き換えます。