DPCT1057
目次
DPCT1057#
メッセージ#
<variable name> は、ホストコードとデバイスコードで使用されていました。<variable name> タイプは SYCL* デバイスコードで使用されるように更新され、新しい <host variable name> は、ホストコードで使用できるように生成されました。新しい <host variable name> を使用するように、手動でホストコードを更新する必要があります。
詳細な説明#
__constant__variable
変数がホストコードとデバイスコードの両方で使用されている場合 (例えば、変数が 2 つのコンパイル単位に含まれており、異なるコンパイラーでコンパイルされる場合)、dpct::constant_memory
オブジェクトと新しい <ホスト変数名> に移行されます。
修正方法の提案#
新しい <host variable name> を使用するように、手動でホストコードを更新する必要があります。
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1 // h.h:
2 #include <cuda_runtime.h>
3 #include <stdio.h>
4
5 static __constant__ const float const_a = 10.f;
6
7 // a.cu:
8 #include "h.h"
9
10 __device__ void foo_device() {
11 printf("%f\n", const_a);
12 }
13
14 // b.c:
15 #include "h.h"
16
17 void foo_host() {
18 printf("%f\n", const_a);
19 }
上記のソースは次のコマンドラインを使用して移行されます。
1dpct --out-root out a.cu
2dpct --out-root out b.c --extra-arg=-xc
結果は、次の SYCL* コードに移行されます。
1 // h.h:
2 #include <sycl/sycl.hpp>
3 #include <dpct/dpct.hpp>
4 #include <stdio.h>
5
6 /*
7 DPCT1057:0: Variable const_a was used in host code and device code. const_a type was
8 updated to be used in SYCL device code and new const_a_host_ct1 was generated to be
9 used in host code.You need to update the host code manually to use the new
10 const_a_host_ct1.
11 */
12 static const float const_a_host_ct1 = 10.f;
13 static dpct::constant_memory<const float, 0> const_a(10.f);
14
15 // a.dp.cpp:
16 #include <sycl/sycl.hpp>
17 #include <dpct/dpct.hpp>
18 #include "h.h"
19
20 void foo_device(const sycl::stream &stream_ct1, const float const_a) {
21 /*
22 DPCT1015:0: Output needs adjustment.
23 */
24 stream_ct1 << "%f\n";
25 }
26
27 // b.c:
28 #include "h.h"
29
30 void foo_host() {
31 printf("%f\n", const_a);
32 }
移行された SYCL* コードは、DPCT1057 の警告に対処するため書き換えられています。
1 // h.h:
2 #include <sycl/sycl.hpp>
3 #include <dpct/dpct.hpp>
4 #include <stdio.h>
5
6 static const float const_a_host_ct1 = 10.f;
7 static dpct::constant_memory<const float, 0> const_a(10.f);
8
9 // a.dp.cpp:
10 #include <sycl/sycl.hpp>
11 #include <dpct/dpct.hpp>
12 #include "h.h"
13
14 void foo_device(const sycl::stream &stream_ct1, const float const_a) {
15 stream_ct1 << const_a << "\n";
16 }
17
18 // b.c:
19 #include "h.h"
20
21 void foo_host() {
22 printf("%f\n", const_a_host_ct1);
23 }