Secondo il OpenMP Memory Model, la segue non è corretto:accesso alla memoria privata di un thread in OpenMP
int *p0 = NULL, *p1 = NULL;
#pragma omp parallel shared(p0,p1)
{
int x;
// THREAD 0 // THREAD 1
p0 = &x; p1 = &x;
*p1 ... *p0 ...
}
Il mio esempio è simile al seguente però:
int *p0 = NULL, *p1 = NULL;
#pragma omp parallel shared(p0,p1)
{
int x;
// THREAD 0 // THREAD 1
p0 = &x; p1 = &x;
#pragma omp flush
#pragma omp barrier
*p1 ... *p0 ...
#pragma omp barrier
}
Questo sarebbe errato? Non riesco a trovare qualcosa nel modello di memoria che non consentirebbe questo.
Suppongo che il mio esempio di giocattolo sia corretto, poiché nel modello di memoria in 3.1 consentono a un task di accedere a una variabile privata fintanto che il programmatore si accerta che sia ancora vivo. Dato che le attività possono essere slegate, possono in teoria essere eseguite all'interno di un thread di lavoro diverso, consentendo quindi a un thread OpenMP di accedere alla memoria privata di un'altra.
Sto provando a scrivere nello spazio indirizzo del thread 0 dal thread 1 e viceversa. Posso pensare ad alcune applicazioni interessanti ma non ho ancora un esempio concreto. Sto solo sperimentando. Si noti che sto dando a ogni thread l'accesso alla memoria privata di un altro thread. Voglio solo sapere se è esplicitamente respinto o scoraggiato; il modello di memoria OpenMP non è cristallino e se capisco le complessità con il pragma dell'attività, allora potrebbe essere che il modello di memoria è incompleto. – ipapadop