De acuerdo con la OpenMP Memory Model, el siguiente es incorrecto:acceder a la memoria privada de un hilo en OpenMP
int *p0 = NULL, *p1 = NULL;
#pragma omp parallel shared(p0,p1)
{
int x;
// THREAD 0 // THREAD 1
p0 = &x; p1 = &x;
*p1 ... *p0 ...
}
Mi ejemplo tiene el siguiente embargo:
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
}
¿Esto sería incorrecto? No puedo encontrar algo en el modelo de memoria que no permita esto.
Asumo que mi ejemplo de juguete es correcta, como en el modelo de memoria de 3.1 que permitirá una tarea para tener acceso a una variable privada, siempre y cuando el programador asegura que aún está vivo. Dado el hecho de que las tareas se pueden desatar, en teoría se pueden ejecutar dentro de un hilo de trabajo diferente, lo que permite que un hilo OpenMP acceda a la memoria privada de otro.
Estoy intentando escribir en el espacio de direcciones del hilo de rosca 0 a 1 y viceversa. Puedo pensar en algunas aplicaciones interesantes, pero todavía no tengo un ejemplo concreto. Solo experimentando. Tenga en cuenta que le estoy dando a cada subproceso acceso a otro hilo de memoria privada. Solo quiero saber si está explícitamente prohibido o desalentado; el modelo de memoria OpenMP no es muy claro y si entiendo las complejidades de la tarea pragma, entonces podría ser que el modelo de memoria esté incompleto. – ipapadop