Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 02.10.2012 | Доступ: свободный | Студентов: 1754 / 201 | Длительность: 17:47:00
Специальности: Программист
Лекция 4:

Введение в технологии параллельного программирования (OpenMP)

4.8. Дополнительные сведения

Итак, возможности технологии OpenMP рассмотрены практически полностью. В данном разделе дополнительно рассматриваются правила разработки параллельных программ с использованием OpenMP на алгоритмическом языке Fortran, описывается возможность компиляции программы как обычного последовательного программного кода и приводится краткий перечень компиляторов, обеспечивающих поддержку OpenMP

4.8.1. Разработка параллельных программ с использованием OpenMP на языке Fortran

Между разработкой параллельных программ с использованием OpenMP на алгоритмическом языке С и алгоритмических языках семейства Fortran (Fortran 77, Fortran 90 и Fortran 95) существует не так много различий.

Прежде всего формат директив OpenMP на языке Fortran имеет следующий вид:

<маркер> <имя_директивы> [<параметр>...]

Вид маркера зависит от формата записи программы:

  • При фиксированном формате записи маркер имеет вид
    !$omp или c$omp или *$omp
    Маркер должен начинаться с позиции 1 строки. При этом сама директива может быть записана в несколько строк; первая строка директивы должна содержать в позиции 6 или пробел или 0; строки продолжения директивы в позиции 6 должны быть отмечены любым произвольным символом, отличающимся от пробела и 0.
  • При свободном формате записи маркер должен иметь вид !$omp. Маркер может быть записан, начиная с произвольной позиции строки, при этом маркеру должны предшествовать только пробелы или знаки табуляции. При размещении директивы на нескольких строках первая строка должна заканчиваться символом &, строки продолжения могут начинаться с этого знака, но приводить его в строках продолжения не обязательно.

В качестве основных отличий параллельных программ с использованием OpenMP на языке Fortran отметим следующее:

  1. Практически все директивы сопровождаются соответствующей директивой завершения; к директивам завершения относятся:
    end critical
    end do
    end master
    end ordered
    end parallel
    end sections
    end single
    end workshare
            
  2. В стандарте OpenMP для языка Fortran предусматривается дополнительная директива workshare, которая является близкой по своему назначению директиве sections.
  3. Часть подпрограмм библиотеки OpenMP являются процедурами и тем самым должны вызываться при помощи оператора вызова процедур CALL.

В качестве принятых соглашений при разработке программ на языке Fortran рекомендуется записывать имена подпрограмм с использованием прописных символов.

В качестве примера приведем вариант программы из примера 5.6 на языке Fortran.

PROGRAM Example
INCLUDE "omp_lib.h"
INTEGER NMAX 1000
INTEGER LIMIT 100
INTEGER I, J, SUM
REAL A(NMAX,NMAX)
<инициализация данных>
!$OMP PARALLEL DO SHARED(A) PRIVATE(I,J,SUM) &
  IF (NMAX>LIMIT)
  DO I = 1, NMAX
    SUM = 0
    DO J = 1, NMAX
      SUM = SUM + A(I,J)
    ENDDO
    PRINT * "Сумма строки ", I, "равна ", SUM
  ENDDO
!$OMP END PARALLEL DO ! Завершение фрагмента
STOP
END
      
4.13. Пример параллельной программы с использованием OpenMP на языке Fortran

4.8.2. Сохранение возможности последовательного выполнения программы

При разработке параллельной программы с использованием OpenMP в общем случае целесообразно сохранить возможность компиляции программы как обычного последовательного кода (обычно говорят о единственности программного кода для последовательного и параллельного вариантов программ). При соблюдении такого подхода значительно снижаются затраты на сопровождение и развитие программ – так, например, при необходимости изменений в общей части алгоритмов последовательных и параллельных вычислений не требуется проводить корректировку программного кода в разных вариантах программ. Указанный подход полезен и при использовании компиляторов, которые все еще не поддерживают технологию OpenMP. И, наконец, последовательный вариант программы часто необходим для проведения вычислительных экспериментов при определении получаемого ускорения параллельных вычислений.

Поддержка единственности программного кода относится к числу важных положительных качеств технологии OpenMP – формат директив был специально подобран таким образом, чтобы "обычные" компиляторы без поддержки OpenMP воспринимали директивы как комментарии.

Однако проблемы поддержки единственности программного кода возникают при использовании в параллельной программе функций и переменных окружения OpenMP в явном виде. Данные проблемы могут быть решены с помощью директив условной компиляции – средств препроцессирования. Стандартом OpenMP предусматривается, что компиляторы с поддержкой технологии OpenMP должны определять макропеременную _OPENMP, значением которой является дата поддерживаемого стандарта в формате ГГГГММ (год, месяц). Как результат, для обеспечения единственности программного кода последовательного и параллельного вариантов программ, все OpenMP-зависимые расширения параллельного варианта программы следует окружать директивами условной компиляции в виде:

#ifdef _OPENMP 
<OpenMP-зависимый программный код>
#endif
      

Последовательный вариант программы может порождаться и компиляторами с поддержкой OpenMP – для обеспечения такой возможности в составе OpenMP имеются функции-заглушки для всех функций библиотеки OpenMP. Указание подобного режима компиляции осуществляется при помощи соответствующих параметров компилятора.

4.8.3. Краткий перечень компиляторов с поддержкой OpenMP

Среди компиляторов с поддержкой OpenMP прежде всего следует отметить компиляторы компании Intel для языков Fortran и C/C++ для операционных систем семейств Unix и Windows. В табл. 1 приведены параметры этих компиляторов для управления возможностями OpenMP.

Следует также помнить, что при сборке программы следует использовать библиотеки, обеспечивающие поддержки многопоточности.

Среди других компиляторов можно отметить:

  • Fujitsu/Lahey Fortran, C and C++,
  • HP Fortran, C and C++,
  • IBM Fortran and C,
  • Silicon Graphics. Fortran 77/90 (IRIX), C/C++,
  • Portland Group (PGI). Fortran и C/C++ для Windows NT, Linux, Solaris (x86).
Таблица 4.1. Параметры компиляторов для управления возможностями OpenMP
Параметр Описание
Windows Linux
-Qopenmp -openmp Компиляция программного кода с использованием OpenMP
-Qopenmp-profile -openmp-profile Компиляция с инструментацией программного кода с использованием OpenMP для обеспечения возможности применения Intel VTune Performance Analyzer для профилирования программы
-Qopenmp-stubs -openmp-stubs Компиляция программного кода как обычной последовательной программы (с игнорированием директив и использованием функций-заглушек для функций OpenMP)

Полный перечень компиляторов, поддерживающих OpenMP представлен на портале www.openmp.org.

Дмитрий Остапенко
Дмитрий Остапенко

поддерживаю выше заданые вопросы

 

Павел Каширин
Павел Каширин

Скачал архив и незнаю как ничать изучать материал. Видео не воспроизводится (скачено очень много кодеков, различных плееров -- никакого эффекта. Максимум видно часть изображения без звука). При старте ReplayMeeting и Start в браузерах google chrome, ie возникает script error с невнятным описанием. В firefox ситуация еще интереснее. Выводится: 

Meet Now: Кукаева Светлана Александровна. 

Meeting Start Time: 09.10.2012, 16:58:04
Meeting Stop Time: 09.10.2012, 18:45:18
Recording Duration:01:47:14

Downloading...

Your Web browser is not configured to play Windows Media audio/video files.

Make sure the features are enabled and available.