🗊Презентация Лекция 2. Основные конструкции OpenMP

Нажмите для полного просмотра!
Лекция 2. Основные конструкции OpenMP, слайд №1Лекция 2. Основные конструкции OpenMP, слайд №2Лекция 2. Основные конструкции OpenMP, слайд №3Лекция 2. Основные конструкции OpenMP, слайд №4Лекция 2. Основные конструкции OpenMP, слайд №5Лекция 2. Основные конструкции OpenMP, слайд №6Лекция 2. Основные конструкции OpenMP, слайд №7Лекция 2. Основные конструкции OpenMP, слайд №8Лекция 2. Основные конструкции OpenMP, слайд №9Лекция 2. Основные конструкции OpenMP, слайд №10Лекция 2. Основные конструкции OpenMP, слайд №11Лекция 2. Основные конструкции OpenMP, слайд №12Лекция 2. Основные конструкции OpenMP, слайд №13Лекция 2. Основные конструкции OpenMP, слайд №14Лекция 2. Основные конструкции OpenMP, слайд №15Лекция 2. Основные конструкции OpenMP, слайд №16Лекция 2. Основные конструкции OpenMP, слайд №17Лекция 2. Основные конструкции OpenMP, слайд №18Лекция 2. Основные конструкции OpenMP, слайд №19Лекция 2. Основные конструкции OpenMP, слайд №20Лекция 2. Основные конструкции OpenMP, слайд №21Лекция 2. Основные конструкции OpenMP, слайд №22

Вы можете ознакомиться и скачать презентацию на тему Лекция 2. Основные конструкции OpenMP. Доклад-сообщение содержит 22 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Лекция 2. Основные конструкции OpenMP, слайд №1
Описание слайда:

Слайд 2


Лекция 2. Основные конструкции OpenMP, слайд №2
Описание слайда:

Слайд 3


Лекция 2. Основные конструкции OpenMP, слайд №3
Описание слайда:

Слайд 4


Лекция 2. Основные конструкции OpenMP, слайд №4
Описание слайда:

Слайд 5


Лекция 2. Основные конструкции OpenMP, слайд №5
Описание слайда:

Слайд 6


Лекция 2. Основные конструкции OpenMP, слайд №6
Описание слайда:

Слайд 7


Лекция 2. Основные конструкции OpenMP, слайд №7
Описание слайда:

Слайд 8


Лекция 2. Основные конструкции OpenMP, слайд №8
Описание слайда:

Слайд 9


Лекция 2. Основные конструкции OpenMP, слайд №9
Описание слайда:

Слайд 10


Лекция 2. Основные конструкции OpenMP, слайд №10
Описание слайда:

Слайд 11


Лекция 2. Основные конструкции OpenMP, слайд №11
Описание слайда:

Слайд 12


Лекция 2. Основные конструкции OpenMP, слайд №12
Описание слайда:

Слайд 13


Лекция 2. Основные конструкции OpenMP, слайд №13
Описание слайда:

Слайд 14





В качестве иллюстрации использования директив OpenMP shared и private рассмотрим фрагмент программы.
В качестве иллюстрации использования директив OpenMP shared и private рассмотрим фрагмент программы.
 В этом примере переменная a определена как общая и является идентификатором одномерного массива.
 Переменные myid и x определены как локальные переменные для каждого из параллельных потоков.
 В каждом из параллельных потоков локальные переменные получают собственные значения. После чего при выполнении условия x<1.0 значение локальной переменной x присваивается myid -й компоненте общего для всех потоков массива a. Значение x будет неопределенным, если не определить x как переменную типа private. 
Отметим, что значения private -переменных не определены до и после блока параллельных вычислений.

Пример использования директив OpenMP shared и private в параллельной области программы
  c$omp parallel shared (a)
c$omp& private (myid, x)
myid = omp_get_thread_num ( )
      x = work (myid)
      if (x < 1.0) then
         a (myid) = x 
     endif 
Предложение OpenMP          default ( shared | private | none )
 задает тип всех переменных, определяемых по умолчанию в последующем параллельном структурном блоке как shared, private или none.
 Например, если во фрагменте программы  вместо    private( myid, x )            написать  
      default( private ) то определяемые далее по умолчанию переменные myid и x будут автоматически определены как private.
Описание слайда:
В качестве иллюстрации использования директив OpenMP shared и private рассмотрим фрагмент программы. В качестве иллюстрации использования директив OpenMP shared и private рассмотрим фрагмент программы. В этом примере переменная a определена как общая и является идентификатором одномерного массива. Переменные myid и x определены как локальные переменные для каждого из параллельных потоков. В каждом из параллельных потоков локальные переменные получают собственные значения. После чего при выполнении условия x<1.0 значение локальной переменной x присваивается myid -й компоненте общего для всех потоков массива a. Значение x будет неопределенным, если не определить x как переменную типа private. Отметим, что значения private -переменных не определены до и после блока параллельных вычислений. Пример использования директив OpenMP shared и private в параллельной области программы c$omp parallel shared (a) c$omp& private (myid, x) myid = omp_get_thread_num ( ) x = work (myid) if (x < 1.0) then a (myid) = x endif Предложение OpenMP default ( shared | private | none ) задает тип всех переменных, определяемых по умолчанию в последующем параллельном структурном блоке как shared, private или none. Например, если во фрагменте программы вместо private( myid, x ) написать default( private ) то определяемые далее по умолчанию переменные myid и x будут автоматически определены как private.

Слайд 15





Директивы firstprivate и lastprivate
Директивы firstprivate и lastprivate
Директивы (предложения) OpenMP firstprivate и lastprivate используются для описания локальных переменных, инициализируемых внутри параллельных потоков. 
Переменные, описанные как firstprivate, получают свои значения из последовательной части программы.
 Переменные, описанные как lastprivate, сохраняют свои значения при выходе из параллельных потоков при условии их последовательного выполнения.
Предложение OpenMP
firstprivate( var1, var2, ..., varN ) 
определяет переменные var1, var2, ..., varN   как локальные переменные для каждого из параллельных потоков, причем инициализация значений этих переменных происходит в самом начале параллельного структурного блока по значениям из предшествующего последовательного структурного блока программы.
В качестве иллюстрации рассмотрим фрагмент программы. 
program first
    integer :: myid, c
       integer, external :: omp_get_thread_num
       c=98
!$omp parallel private (myid)
!$omp& firstprivate (c)
      myid = omp_get_thread_num ( ) 
     write (6, *) 'T: ', myid, 'c=', c
!$omp end parallel
      end program first
 T:1 с=98  T:3 с=98    T:2 с=98   T:0 с=98
 В этом примере в каждом параллельном потоке используется своя переменная c, но значение этой переменной перед входом в параллельный блок программы берется из предшествующего последовательного блока.
Описание слайда:
Директивы firstprivate и lastprivate Директивы firstprivate и lastprivate Директивы (предложения) OpenMP firstprivate и lastprivate используются для описания локальных переменных, инициализируемых внутри параллельных потоков. Переменные, описанные как firstprivate, получают свои значения из последовательной части программы. Переменные, описанные как lastprivate, сохраняют свои значения при выходе из параллельных потоков при условии их последовательного выполнения. Предложение OpenMP firstprivate( var1, var2, ..., varN ) определяет переменные var1, var2, ..., varN как локальные переменные для каждого из параллельных потоков, причем инициализация значений этих переменных происходит в самом начале параллельного структурного блока по значениям из предшествующего последовательного структурного блока программы. В качестве иллюстрации рассмотрим фрагмент программы. program first integer :: myid, c integer, external :: omp_get_thread_num c=98 !$omp parallel private (myid) !$omp& firstprivate (c) myid = omp_get_thread_num ( ) write (6, *) 'T: ', myid, 'c=', c !$omp end parallel end program first T:1 с=98 T:3 с=98 T:2 с=98 T:0 с=98 В этом примере в каждом параллельном потоке используется своя переменная c, но значение этой переменной перед входом в параллельный блок программы берется из предшествующего последовательного блока.

Слайд 16


Лекция 2. Основные конструкции OpenMP, слайд №16
Описание слайда:

Слайд 17


Лекция 2. Основные конструкции OpenMP, слайд №17
Описание слайда:

Слайд 18


Лекция 2. Основные конструкции OpenMP, слайд №18
Описание слайда:

Слайд 19





В языке Fortran в качестве параметров operator и intrinsic в предложениях reduction допускаются следующие операции и функции:
В языке Fortran в качестве параметров operator и intrinsic в предложениях reduction допускаются следующие операции и функции:
параметр operator может быть одной из следующих арифметических или логических операций: +, -, *, .and. , .or. , .eqv. , .neqv.;
параметр intrinsic может быть одной из следующих функций: max, min, iand, ior, ieor. 

В языке C/C++ в качестве параметров operator и intrinsic в предложениях reduction допускаются следующие операции и функции:
параметр operator может быть одной из следующих арифметических или логических операций: +, -, *, &, ^, &&, || ;
параметр intrinsic может быть одной из следующих функций: max, min ;
указатели и ссылки в предложениях reduction использовать строго запрещено!
Описание слайда:
В языке Fortran в качестве параметров operator и intrinsic в предложениях reduction допускаются следующие операции и функции: В языке Fortran в качестве параметров operator и intrinsic в предложениях reduction допускаются следующие операции и функции: параметр operator может быть одной из следующих арифметических или логических операций: +, -, *, .and. , .or. , .eqv. , .neqv.; параметр intrinsic может быть одной из следующих функций: max, min, iand, ior, ieor. В языке C/C++ в качестве параметров operator и intrinsic в предложениях reduction допускаются следующие операции и функции: параметр operator может быть одной из следующих арифметических или логических операций: +, -, *, &, ^, &&, || ; параметр intrinsic может быть одной из следующих функций: max, min ; указатели и ссылки в предложениях reduction использовать строго запрещено!

Слайд 20


Лекция 2. Основные конструкции OpenMP, слайд №20
Описание слайда:

Слайд 21





В качестве иллюстрации миграции данных рассмотрим фрагмент Fortran-программы.
 В этом примере мигрирующая целочисленная переменная x хранится в common -блоке mine. Значение этой общей переменной задается в главном потоке. В каждом параллельном потоке используется своя локальная переменная х, которой присваивается значение общей переменной x.
integer : : x, tid
integer, external :: omp_get_thread_num ( )
common/mine/ x
! $omp threadprivate (/mine/)
      x=33 
call omp_set_num_threads (4)
! $omp parallel private (tid) copyin (/mine/)
      tid=omp_get_thread_num ( )
      print *, 'T: ',tid, ' x = ', x
! $omp end parallel

 Результаты работы программы:
T: 1 x = 33
T: 2 x = 33
T: 0 x = 33
T: 3 x = 33
Описание слайда:
В качестве иллюстрации миграции данных рассмотрим фрагмент Fortran-программы. В этом примере мигрирующая целочисленная переменная x хранится в common -блоке mine. Значение этой общей переменной задается в главном потоке. В каждом параллельном потоке используется своя локальная переменная х, которой присваивается значение общей переменной x. integer : : x, tid integer, external :: omp_get_thread_num ( ) common/mine/ x ! $omp threadprivate (/mine/) x=33 call omp_set_num_threads (4) ! $omp parallel private (tid) copyin (/mine/) tid=omp_get_thread_num ( ) print *, 'T: ',tid, ' x = ', x ! $omp end parallel Результаты работы программы: T: 1 x = 33 T: 2 x = 33 T: 0 x = 33 T: 3 x = 33

Слайд 22


Лекция 2. Основные конструкции OpenMP, слайд №22
Описание слайда:



Похожие презентации
Mypresentation.ru
Загрузить презентацию