DPCT1070
目次
DPCT1070#
メッセージ#
<pointer variable name> は dpct::dpct_malloc
で割り当てられます。ホストコードからポインターにアクセスするには、dpct::get_host_ptr<type>(pointer variable name)
を使用します。
詳細な説明#
このポインターが参照するメモリーは、dpct::dpct_malloc
によって割り当てられており、ホストコードから直接アクセスできません。dpct::get_host_ptr
関数を使用してポインターを変換することで、ホストコードからメモリーにアクセスできます。
修正方法の提案#
--usm-level=none
を指定せずにコードを再度移行します。または、コードを確認して手動で調整してください。
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1 void bar(float *a) {
2 a[0] = 1;
3 }
4
5 void foo() {
6 float* a;
7 cudaMallocManaged(&a, 10 * sizeof(float));
8 bar(a);
9 }
このコードは、以下の SYCL* コードに移行されます。
1 #define DPCT_USM_LEVEL_NONE
2 #include <sycl/sycl.hpp>
3 #include <dpct/dpct.hpp>
4 void bar(float *a) {
5 a[0] = 1;
6 }
7
8 void foo() {
9 float* a;
10 /*
11 DPCT1070:0: 'a' is allocated by dpct::dpct_malloc.Use
12 dpct::get_host_ptr<float>(a) to access the pointer from the host code.
13 */
14 a = (float *)dpct::dpct_malloc(10 * sizeof(float));
15 bar(a);
16 }
このコードは次のように書き換えられます。
1 #define DPCT_USM_LEVEL_NONE
2 #include <sycl/sycl.hpp>
3 #include <dpct/dpct.hpp>
4 void bar(float *a) {
5 dpct::get_host_ptr<float>(a )[0] = 1;
6 }
7
8 void foo() {
9 float* a;
10 a = (float *)dpct::dpct_malloc(10 * sizeof(float));
11 bar(a);
12 }