Составители:
Рубрика:
§ 8. Классы переменных
Все переменные, используемые в параллельной области, могут
быть либо общими, либо локальными. Общие переменные описы-
ваются директивой SHARED (разделяемые), а локальные — дирек-
тивой PRIVATE (собственные). Общие переменные присутствуют в
одном экземпляре и доступны каждой нити данной секции под од-
ним именем, а локальные существуют в числе экземпляров, равном
числу нитей: в каждой нити свой экземпляр, и этот экземпляр до-
ступен только одной нити — той, которой он принадлежит. Для
иллюстрации работы переменных различного типа приведем сле-
дующий пример.
I=OMP_GET_THREAD_NUM ()
PRINT*, I
Предположим, что ранее переменная I была описана как PRIVATE.
Если не используется никаких конструкций, которые специализи-
руют выполнение написанного фрагмента, то в результате будут
отпечатаны числа от 0 до OMP_NUM_THREADS-1, причем каждое
из этих чисел будет отпечатано один раз, но порядок их следо-
вания на листинге предсказать нельзя (он зависит от програм-
мы и от реализации Open MP). Если же переменная I описана,
как SHARED, то отпечатается OMP_NUM_THREADS чисел из множества
{0,1,...,OMP_NUM_THREADS-1}, но какие из этих чисел будут от-
печатаны сказать нельзя. Все нити пошлют в I свой номер, одна-
ко, например, перед началом печатания в I может оказаться по-
следний из посланных номеров. При продолжении работы все ни-
ти пошлют команду "печатать", но в результате будет отпечатано
лишь последнее из полученных значений (так что будет отпечатано
OMP_NUM_THREADS одинаковых чисел).
Таким образом, программист должен предпринимать необхо-
димые меры для поддержания правильной работы при использова-
нии общих переменных.
Рассмотрим следующую программу
PROGRAMM HELLO
INTEGER NTHREADS, TID
C Порождение нитей с локальными переменными
!$OMP PARALLEL PRIVATE (NTHREADS,TID)
142
Страницы
- « первая
- ‹ предыдущая
- …
- 139
- 140
- 141
- 142
- 143
- …
- следующая ›
- последняя »
