nie wiem jak zrobić struct lub przedmiot threadprivate, co robię generuje błąd:Jak zdefiniować obiekt lub strukturę jako threadprivate w OpenMP?
struct point2d{
int x;
int y;
point2d(){
x = 0;
y = 0;
}
//copy constructor
point2d(point2d& p){
x = p.x;
y = p.y;
}
};
Oświadczam statyczną strukturę i starać się im threadprivate
static point2d myPoint;
#pragma omp threadprivate(myPoint)
to generuje błąd:
error C3057: 'myPoint' : dynamic initialization of 'threadprivate' symbols is not currently supported
Czy oznacza to, że prąd OpenMP kompilator nie obsługuje tego dokonać threadprivate struct? Albo to, co robię, jest złe. Czy istnieje inny sposób przekazywania struktury lub obiektu?
Oto część reszta moich kodów:
void myfunc(){
printf("myPoint at %p\n",&myPoint);
}
void main(){
#pragma omp parallel
{
printf("myPoint at %p\n",&myPoint);
myfunc();
}
}
Czy kompilujesz to z kompilatorem C lub C++? Widzę, że oznaczyłeś to jako jedno i drugie. Wygląda na to, że może nie lubić konstruktora. Aby to rozwinąć, wygląda na to, że może nie lubić wywoływania konstruktora w celu zainicjowania danych, zamiast statycznej kopii z '.text'. – rjp
Używam vC++, czy myślisz, że lepiej przekazać to ręcznie? –
Po prostu wydaje mi się, że zmienne "threadprivate" muszą zostać zainicjalizowane statycznie. Nie jestem pewien, jak to zrobić bez odrzucenia konstruktora i po prostu napisanie funkcji 'initPoint2d (point2d & p, int inX, int inY)'. Jest to jednak sprzeczne z "zasadami" OO. Jestem facetem w stylu C. – rjp