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* コードについて考えてみます。
1void bar(float *a) {
2 a[0] = 1;
3}
4
5void 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>
4void bar(float *a) {
5 a[0] = 1;
6}
7
8void 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>
4void bar(float *a) {
5 dpct::get_host_ptr<float>(a)[0] = 1;
6}
7
8void foo() {
9 float* a;
10 a = (float *)dpct::dpct_malloc(10 * sizeof(float));
11 bar(a);
12}