Hello,
For the code below, I initialize the value for the data member x, then I change the value of x in a member function and use the new value of x to assign an array, but it still uses the value from the constructor.
I can find a way to get around it by use a local variable, on the other hand, is there a way to update the value of x in the device? so that it will use the right value in the acc loop?
Best regards,
Feng
using namespace std;
#include <iostream>
class A
{
private:
double x;
public:
A()
{
x = 2;
#pragma acc enter data copyin(this)
}
~A()
{
#pragma acc exit data delete(this)
}
void change()
{
int i;
x = 5;
double* l;
l = new double [10];
#pragma acc enter data copyin(l[0:10])
#pragma acc parallel loop present(l[0:10],this)
for(i=0; i<10; i++)
{
l[i] = x;
}
#pragma acc exit data copyout(l[0:10])
for(i=0; i<10; i++)
{
cout << l[i] << "\n";
}
delete[] l;
}
};
int main()
{
A a;
a.change();
return 0;
}