У меня довольно большой код на C ++, мне пришлось интегрировать какой-то новый класс в базовый класс, как показано ниже.
class A
{
int N;
B b;
double *__restrict__ w;
construct();
}
A::construct()
{
w=new double[N];
#pragma acc data enter create(this)
#pragma acc update device(this)
#pragma acc data enter create(w)
// allocate class A
b.construct()
}
class B
{
double *__restrict__ u;
double *__restrict__ v;
B(){};
construct();
}
B::construct()
{
u=new double[N];
v=new double[N];
#pragma acc data enter create(this)
#pragma acc update device(this)
#pragma acc data enter create(u)
#pragma acc data enter create(v)
}
Я думаю, что столкнулся с проблемой глубокого копирования, поскольку указатели класса B недействительны и, следовательно, поведение кода на GPU i undefined. Я был бы признателен за отзывы о том, как выполнить включение класса в другой класс, не вдаваясь в проблему глубокого копирования. Я подозреваю, что устройство обновления (это) каким-то образом вызывает это.