Доступ к частной памяти потока в OpenMP

Согласно модели памяти OpenMP следующее неверно:

int *p0 = NULL, *p1 = NULL;
#pragma omp parallel shared(p0,p1)
{
  int x;
  // THREAD 0              // THREAD 1
  p0 = &x;                 p1 = &x;
  *p1 ...                  *p0 ...
}

Мой пример выглядит следующим образом:

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
}

Было бы это неправильно? Я не могу найти что-то в модели памяти, что бы это запретило.

Я полагаю, что мой игрушечный пример верен, поскольку в модели памяти в 3.1 они позволяют задаче иметь доступ к частной переменной, пока программист гарантирует, что она все еще жива. Учитывая тот факт, что задачи могут быть отвязаны, теоретически они могут выполняться в другом рабочем потоке, что позволяет одному потоку OpenMP получить доступ к частной памяти другого.

6
задан ipapadop 17 November 2011 в 02:12
поделиться