~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 955A4422403C0907812013B03EDB7EA3__1717319760 ✰
Заголовок документа оригинал.:
✰ OpenMP - Wikipedia ✰
Заголовок документа перевод.:
✰ OpenMP — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/OpenMP ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/95/a3/955a4422403c0907812013b03edb7ea3.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/95/a3/955a4422403c0907812013b03edb7ea3__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 10:38:51 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 2 June 2024, at 12:16 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

OpenMP — Википедия Jump to content

OpenMP

Из Википедии, бесплатной энциклопедии
OpenMP
Оригинальный автор(ы) Совет по обзору архитектуры OpenMP [1]
Разработчики) Совет по обзору архитектуры OpenMP [1]
Стабильная версия
5.2 / ноябрь 2021 г .; 2 года назад ( 2021-11 )
Операционная система Кросс-платформенный
Платформа Кросс-платформенный
Тип Расширение для C , C++ и Fortran ; API
Лицензия Различный [2]
Веб-сайт опенмп .org

OpenMP ( Open Multi-Processing ) — это интерфейс прикладного программирования (API), который поддерживает многоплатформенное программирование с общей памятью многопроцессорное на C , C++ и Fortran . [3] на многих платформах, архитектурах набора команд и операционных системах , включая Solaris , AIX , FreeBSD , HP-UX , Linux , macOS и Windows . Он состоит из набора директив компилятора , библиотечных подпрограмм и переменных среды , которые влияют на поведение во время выполнения. [2] [4] [5]

OpenMP управляется некоммерческим технологическим консорциумом OpenMP Architecture Review Board (или OpenMP ARB ), совместно определяемым широким кругом ведущих поставщиков компьютерного оборудования и программного обеспечения, включая Arm , AMD , IBM , Intel , Cray , HP , Fujitsu , Nvidia , NEC. , Red Hat , Texas Instruments и Oracle Corporation . [1]

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

Приложение, созданное с использованием гибридной модели параллельного программирования, может работать в компьютерном кластере с использованием как OpenMP, так и интерфейса передачи сообщений (MPI), так что OpenMP используется для параллелизма внутри (многоядерного) узла, а MPI используется для параллелизма между узлами. . Также предпринимались попытки запустить OpenMP в с программно-распределенной общей памятью . системах [6] перевести OpenMP в MPI [7] [8] и расширить OpenMP для систем с неразделяемой памятью. [9]

Дизайн [ править ]

Иллюстрация многопоточности , когда основной поток разделяет несколько потоков, которые параллельно выполняют блоки кода.

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

Раздел кода, предназначенный для параллельного выполнения, помечается соответствующим образом директивой компилятора, которая вызывает формирование потоков до выполнения раздела. [3] К каждому потоку прикреплен идентификатор , который можно получить с помощью функции (называемой omp_get_thread_num()). Идентификатор потока — целое число, а идентификатор основного потока равен 0 . После выполнения распараллеленного кода потоки снова объединяются в основной поток, который продолжается до конца программы.

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

Среда выполнения распределяет потоки по процессорам в зависимости от использования, загрузки компьютера и других факторов. Среда выполнения может назначать количество потоков на основе переменных среды , или код может делать это с помощью функций. Функции OpenMP включены в заголовочный файл , помеченный как omp.h на C / C++ .

История [ править ]

Совет по обзору архитектуры OpenMP (ARB) опубликовал свои первые спецификации API, OpenMP для Fortran 1.0, в октябре 1997 года. В октябре следующего года они выпустили стандарт C/C++. В 2000 году была выпущена версия 2.0 спецификаций Fortran, а версия 2.0 спецификаций C/C++ была выпущена в 2002 году. Версия 2.5 представляет собой объединенную спецификацию C/C++/Fortran, выпущенную в 2005 году. [ нужна цитата ]

До версии 2.0 OpenMP в первую очередь определял способы распараллеливания очень регулярных циклов, как это происходит в матрично-ориентированном численном программировании , где количество итераций цикла известно во время входа. Это было признано ограничением, и в реализации были добавлены различные расширения параллельного выполнения задач. В 2005 году была сформирована группа по стандартизации параллелизма задач, которая опубликовала предложение в 2007 году, черпая вдохновение из функций параллелизма задач в Cilk , X10 и Chapel . [10]

Версия 3.0 была выпущена в мае 2008 года. К новым функциям версии 3.0 относятся концепция задач и конструкция задачи . [11] значительное расширение области применения OpenMP за пределы конструкций параллельного цикла, которые составляли большую часть OpenMP 2.0. [12]

Версия 4.0 спецификации была выпущена в июле 2013 года. [13] Он добавляет или улучшает следующие функции: поддержка ускорителей ; атомика ; обработка ошибок; сходство потоков ; расширения задач; определяемое пользователем сокращение ; поддержка SIMD ; Поддержка Фортрана 2003 . [14] [ нужна полная цитата ]

Текущая версия — 5.2, выпущенная в ноябре 2021 года. [15]

Версия 6.0 должна выйти в 2024 году. [16]

Обратите внимание, что не все компиляторы (и операционные системы) поддерживают полный набор функций последних версий.

Основные элементы [ править ]

Диаграмма конструкций OpenMP

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

В C/C++ OpenMP использует #pragmas . Специальные прагмы OpenMP перечислены ниже.

Создание темы [ править ]

Прагма omp Parallel используется для создания дополнительных потоков для параллельного выполнения работы, заключенной в конструкции. Исходный поток будет обозначен как главный поток с идентификатором потока 0.

Пример (программа C): Отображение «Hello, world». использование нескольких потоков.

#include   <stdio.h> 
 #include   <omp.h> 

 int   main  (  void  ) 
 { 
     #pragma ompпараллельный 
     printf  (  "Hello, world.  \n  "  ); 
      вернуть   0  ; 
  } 

Используйте флаг -fopenmp для компиляции с использованием GCC:

$   gcc   -fopenmp   hello.c   -o   привет   -ldl
 

Вывод на компьютере с двумя ядрами и, следовательно, двумя потоками:

Привет,   мир. 
  Привет,   мир. 
 

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

Привет,   привет,   мир. 
  рлд. 
 

Ли printf является атомарным, зависит от базовой реализации [17] в отличие от C++11 std::cout, который по умолчанию является потокобезопасным. [18]

работы разделения Конструкции

Используется для указания того, как назначить независимую работу одному или всем потокам.

  • omp for или omp do : используется для разделения итераций цикла между потоками, также называемых конструкциями цикла.
  • разделы : назначение последовательных, но независимых блоков кода разным потокам.
  • single : указание блока кода, который выполняется только одним потоком, в конце подразумевается барьер
  • master : аналогично синглу, но блок кода будет выполняться только главным потоком, и в конце не будет подразумеваться никакого барьера.

Пример: инициализировать значение большого массива параллельно, используя каждый поток для выполнения части работы.

int   main  (  int   argc  ,   char   **  argv  ) 
 { 
     int   a  [  100000  ]; 

      #pragma omp Parallel for 
     for   (  int   i   =   0  ;   i   <   100000  ;   я  ++  )   { 
         a  [  i  ]   =   2   *   i  ; 
      } 

     вернуть   0  ; 
  } 

Этот пример поразительно параллелен и зависит только от значения я . OpenMP Parallel for flag сообщает системе OpenMP разделить эту задачу между ее рабочими потоками. Каждый поток получит уникальную и закрытую версию переменной. [19] Например, при наличии двух рабочих потоков одному потоку может быть передана версия i , который работает от 0 до 49999, а второй получает версию от 50000 до 99999.

Варианты директив [ править ]

Вариантные директивы — одна из основных функций, представленных в спецификации OpenMP 5.0, призванная помочь программистам улучшить переносимость производительности. Они позволяют адаптировать прагмы OpenMP и пользовательский код во время компиляции. Спецификация определяет признаки для описания активных конструкций OpenMP, исполнительных устройств и функций, предоставляемых реализацией, селекторы контекста на основе признаков и определяемых пользователем условий, а также метадирективы и директивы объявления, позволяющие пользователям программировать одну и ту же область кода с вариантными директивами.

  • Метадиректива — это исполняемая директива, которая условно преобразуется в другую директиву во время компиляции путем выбора из нескольких вариантов директивы на основе характеристик , определяющих условие или контекст OpenMP.
  • Директива объявления варианта имеет те же функции, что и метадиректива, но выбирает вариант функции на месте вызова на основе контекста или определяемых пользователем условий.

Механизм, предоставляемый двумя вариантными директивами для выбора вариантов, более удобен в использовании, чем предварительная обработка C/C++, поскольку он напрямую поддерживает выбор варианта в OpenMP и позволяет компилятору OpenMP анализировать и определять окончательную директиву на основе вариантов и контекста.

// адаптация кода с помощью директив предварительной обработки 

 int   v1  [  N  ],   v2  [  N  ],   v3  [  N  ]; 
  #if define(nvptx) 
  #pragma omp целевые команды распределяют параллельно для map(to:v1,v2) map(from:v3) 
   for   (  int   i  =   0  ;   i  <   N  ;   i  ++  )  
      v3  [  i  ]   =   v1  [  я  ]   *   v2  [  я  ]; 
  #else 
  #pragma omp target Parallel for map(to:v1,v2) map(from:v3) 
   for   (  int   i  =   0  ;   i  <   N  ;   i  ++  )  
      v3  [  i  ]   =   v1  [  i  ]   *   v2  [  i  ]; 
  #endif 

 // адаптация кода с использованием метадирективы в OpenMP 5.0 

 int   v1  [  N  ],   v2  [  N  ],   v3  [  N  ]; 
  #pragma omp target map(to:v1,v2) map(from:v3) 
   #pragma omp метадиректива \ 
 When(device={arch(nvptx)}: целевые группы распределяют параллельно для)\ 
 default(target Parallel for) 
   for   (  int   я  =   0  ;   я  <   N  ;   я  ++  )  
      v3  [  я  ]   =   v1  [  я  ]   *   v2  [  я  ]; 

Пункты [ править ]

Поскольку OpenMP — это модель программирования с общей памятью, большинство переменных в коде OpenMP по умолчанию видны всем потокам. Но иногда частные переменные необходимы, чтобы избежать условий гонки , и возникает необходимость передавать значения между последовательной частью и параллельной областью (блоком кода, выполняемым параллельно), поэтому управление средой данных вводится в виде предложений атрибутов совместного использования данных путем добавления их к директива OpenMP. Различаются следующие виды оговорок:

Предложения атрибутов совместного использования данных
  • общий : данные, объявленные за пределами параллельного региона, являются общими, что означает, что они видимы и доступны всем потокам одновременно. По умолчанию все переменные в области совместного использования работы являются общими, за исключением счетчика итераций цикла.
  • Private : данные, объявленные в параллельном регионе, являются частными для каждого потока, что означает, что каждый поток будет иметь локальную копию и использовать ее в качестве временной переменной. Частная переменная не инициализируется, и ее значение не сохраняется для использования за пределами параллельного региона. По умолчанию счетчики итераций цикла в конструкциях цикла OpenMP являются частными.
  • default : позволяет программисту указать, что область данных по умолчанию в параллельном регионе будет либо общей , либо никакой для C/C++, либо общей , firstprivate , частной или никакой для Фортрана. Опция none заставляет программиста объявлять каждую переменную в параллельной области, используя предложения атрибутов совместного использования данных.
  • firstprivate : аналогично частному, за исключением того, что инициализируется исходным значением.
  • Lastprivate : аналогично частному, за исключением того, что исходное значение обновляется после создания.
  • сокращение : безопасный способ объединения работы всех потоков после построения.
Положения о синхронизации
  • критично : вложенный блок кода будет выполняться только одним потоком за раз, а не одновременно несколькими потоками. Он часто используется для защиты общих данных от условий гонки .
  • атомарный : обновление памяти (запись или чтение-изменение-запись) в следующей инструкции будет выполняться атомарно. Это не делает все утверждение атомарным; только обновление памяти является атомарным. Компилятор может использовать специальные аппаратные инструкции для повышения производительности, чем при использовании критического .
  • упорядоченный : структурированный блок выполняется в том порядке, в котором итерации будут выполняться в последовательном цикле.
  • барьер : каждый поток ждет, пока все остальные потоки команды не достигнут этой точки. В конце конструкции разделения работы имеется неявная барьерная синхронизация.
  • nowait : указывает, что потоки, выполняющие назначенную работу, могут продолжить работу, не дожидаясь завершения всех потоков в команде. В отсутствие этого пункта потоки сталкиваются с барьерной синхронизацией в конце конструкции разделения работы.
Положения о расписании
  • расписание (тип, фрагмент) : это полезно, если конструкция разделения работы представляет собой цикл do или for. Итерации в конструкции разделения работы назначаются потокам в соответствии с методом планирования, определенным в этом разделе. Три типа планирования:
    1. static : здесь всем потокам выделяются итерации, прежде чем они выполнят итерации цикла. По умолчанию итерации распределяются между потоками поровну. параметра Однако указание целого числа для фрагмента приведет к выделению количества последовательных итераций фрагмента для конкретного потока.
    2. динамический : здесь некоторые итерации распределяются по меньшему количеству потоков. Как только конкретный поток завершает выделенную ему итерацию, он возвращается, чтобы получить еще одну из оставшихся итераций. параметра Чанк определяет количество последовательных итераций, выделяемых потоку одновременно.
    3. направляемый : большой кусок последовательных итераций распределяется для каждого потока динамически (как указано выше). Размер чанка уменьшается экспоненциально с каждым последующим распределением до минимального размера, указанного в параметре chunk.
ЕСЛИ контроль
  • if : это приведет к тому, что потоки будут распараллеливать задачу только в том случае, если условие выполнено. В противном случае блок кода выполняется последовательно.
Инициализация
  • firstprivate : данные являются частными для каждого потока, но инициализируются с использованием значения переменной с тем же именем из главного потока.
  • Lastprivate : данные являются частными для каждого потока. Значение этих личных данных будет скопировано в глобальную переменную с тем же именем за пределами параллельного региона, если текущая итерация является последней итерацией в распараллеленном цикле. Переменная может быть как firstprivate , так иlastprivate .
  • threadprivate : данные являются глобальными, но они являются частными в каждом параллельном регионе во время выполнения. Разница между threadprivate и Private заключается в глобальной области видимости, связанной с threadprivate, и сохраняемом значении в параллельных регионах.
Копирование данных
  • copyin : аналогично firstprivate для частных переменных, переменные threadprivate не инициализируются, если только не используется copyin для передачи значения из соответствующих глобальных переменных. не Копирование требуется, поскольку значение переменной threadprivate сохраняется на протяжении всего выполнения всей программы.
  • copyprivate : используется с single для поддержки копирования значений данных из частных объектов в одном потоке ( одиночном потоке) в соответствующие объекты в других потоках в команде.
Снижение
  • сокращение (оператор | встроенный: список) : переменная имеет локальную копию в каждом потоке, но значения локальных копий будут суммироваться (уменьшаться) в глобальную общую переменную. Это очень полезно, если конкретная операция (указанная в операторе для этого конкретного предложения) над переменной выполняется итеративно, так что ее значение на конкретной итерации зависит от ее значения на предыдущей итерации. Шаги, ведущие к операционному приращению, распараллеливаются, но потоки обновляют глобальную переменную потокобезопасным способом. Это потребуется при распараллеливании численного интегрирования функций и дифференциальных уравнений , как общий пример.
Другие
  • flash : значение этой переменной восстанавливается из регистра в память для использования этого значения вне параллельной части.
  • master : выполняется только главным потоком (поток, который отделил все остальные во время выполнения директивы OpenMP). Нет неявного барьера; другие члены команды (потоки) не обязаны добираться.

Подпрограммы выполнения пользовательского уровня [ править ]

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

Переменные среды [ править ]

Метод изменения функций выполнения приложений OpenMP. Используется для управления планированием итераций цикла, количеством потоков по умолчанию и т. д. Например, OMP_NUM_THREADS используется для указания количества потоков для приложения.

Реализации [ править ]

OpenMP реализован во многих коммерческих компиляторах. Например, его поддерживают Visual C++ 2005, 2008, 2010, 2012 и 2013 (OpenMP 2.0 в редакциях Professional, Team System, Premium и Ultimate). [20] [21] [22] ), а также Intel Parallel Studio для различных процессоров. [23] Компиляторы и инструменты Oracle Solaris Studio поддерживают новейшие спецификации OpenMP с повышением производительности для ОС Solaris (UltraSPARC и x86/x64) и платформ Linux. Компиляторы Fortran, C и C++ от The Portland Group также поддерживают OpenMP 2.5. GCC также поддерживает OpenMP, начиная с версии 4.2.

Компиляторы с реализацией OpenMP 3.0:

  • GCC 4.3.1
  • Меркурий будет составлен
  • Компиляторы Intel Fortran и C/C++ версий 11.0 и 11.1, Intel C/C++ и Fortran Composer XE 2011 и Intel Parallel Studio.
  • компилятор IBM XL [24]
  • Обновление 1 Sun Studio 12 содержит полную реализацию OpenMP 3.0. [25]
  • Многопроцессорные вычисления

Несколько компиляторов поддерживают OpenMP 3.1:

Компиляторы, поддерживающие OpenMP 4.0:

  • GCC 4.9.0 для C/C++, GCC 4.9.1 для Fortran [26] [32]
  • Компиляторы Intel Fortran и C/C++ 15.0 [33]
  • IBM XL C/C++ для Linux, V13.1 (частичная) [28] & XL Fortran для Linux, V15.1 (частично) [29]
  • LLVM/Clang 3.7 (частичный) [30]

Несколько компиляторов, поддерживающих OpenMP 4.5:

  • GCC 6 для C/C++ [34]
  • Компиляторы Intel Fortran и C/C++ 17.0, 18.0, 19.0 [35]
  • ЛЛВМ/Клан 12 [36]

Частичная поддержка OpenMP 5.0:

  • GCC 9 для C/C++ [37]
  • Компиляторы Intel Fortran и C/C++ 19.1 [38]
  • ЛЛВМ/Клан 12 [36]

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

Некоторые профилировщики и отладчики явно поддерживают OpenMP:

  • Intel VTune Profiler — профилировщик для процессоров x86 и X Это Архитектуры графических процессоров
  • Intel Advisor — инструмент для помощи в проектировании и анализа кодов OpenMP и MPI.
  • Allinea Distributed Debugging Tool (DDT) – отладчик для кодов OpenMP и MPI.
  • Allinea MAP – профилировщик кодов OpenMP и MPI
  • TotalView — отладчик от Rogue Wave Software для OpenMP, MPI и последовательных кодов
  • ompP – профили для OpenMP
  • VAMPIR — профилировщик кода OpenMP и MPI.

Плюсы и минусы [ править ]

Плюсы:

  • Переносимый многопоточный код (в C/C++ и других языках обычно приходится вызывать примитивы, специфичные для платформы, чтобы обеспечить многопоточность).
  • Просто: не нужно заниматься передачей сообщений, как это делает MPI .
  • Размещение и декомпозиция данных выполняются автоматически с помощью директив.
  • Масштабируемость, сравнимая с MPI в системах с общей памятью. [39]
  • Инкрементный параллелизм: может работать над одной частью программы одновременно, никаких кардинальных изменений в коде не требуется.
  • Унифицированный код как для последовательных, так и для параллельных приложений: конструкции OpenMP рассматриваются как комментарии при использовании последовательных компиляторов.
  • Исходные (последовательные) операторы кода, как правило, не требуют изменения при распараллеливании с OpenMP. Это снижает вероятность непреднамеренного появления ошибок.
  • как крупнозернистый , так и мелкозернистый параллелизм. Возможен
  • В нерегулярных мультифизических приложениях, которые не придерживаются исключительно режима вычислений SPMD , как это происходит в тесно связанных системах жидкость-частица, гибкость OpenMP может иметь большое преимущество в производительности по сравнению с MPI . [39] [40]
  • Может использоваться на различных ускорителях, таких как GPGPU. [41] и ПЛИС .

Минусы:

Ожидаемые результаты [ править ]

Можно было бы ожидать в N раз ускорения при запуске программы, распараллеленной с использованием OpenMP, на платформе N процессора. Однако это происходит редко по следующим причинам:

  • Если существует зависимость, процесс должен ждать, пока не будут вычислены данные, от которых он зависит.
  • Когда несколько процессов совместно используют непараллельный проверочный ресурс (например, файл для записи), их запросы выполняются последовательно. Следовательно, каждый поток должен ждать, пока другой поток не освободит ресурс.
  • Большая часть программы не может быть распараллелена OpenMP, а это означает, что теоретический верхний предел ускорения ограничен законом Амдала .
  • N процессоров в симметричной многопроцессорной обработке (SMP) могут иметь в N раз большую вычислительную мощность, но пропускная способность памяти обычно не увеличивается в N раз. Довольно часто исходный путь к памяти используется несколькими процессорами, и может наблюдаться снижение производительности, когда они конкурируют за полосу пропускания общей памяти.
  • Многие другие распространенные проблемы, влияющие на окончательное ускорение параллельных вычислений, также применимы к OpenMP, например, балансировка нагрузки и накладные расходы на синхронизацию.
  • Оптимизация компилятора может быть не столь эффективной при вызове OpenMP. Обычно это может привести к тому, что однопоточная программа OpenMP будет работать медленнее, чем тот же код, скомпилированный без флага OpenMP (который будет полностью последовательным).

Сходство темы [ править ]

Некоторые поставщики рекомендуют устанавливать привязку к процессору для потоков OpenMP, чтобы связать их с определенными ядрами процессора. [45] [46] [47] Это сводит к минимуму затраты на миграцию потоков и переключение контекста между ядрами. Это также улучшает локальность данных и уменьшает трафик согласованности кэша между ядрами (или процессорами).

Тесты [ править ]

Для демонстрации использования OpenMP, проверки его производительности и оценки правильности было разработано множество тестов.

Простые примеры

  • OmpSCR: репозиторий исходного кода OpenMP

Тесты производительности включают в себя:

  • Параллельный тест NAS
  • Barcelona OpenMP Task Suite — набор приложений, позволяющих тестировать реализации задач OpenMP.
  • Серия СПЕЦ
    • СПЕЦ ОМП 2012
    • Набор тестов SPEC ACCEL тестирует API целевой разгрузки OpenMP 4
    • Тест SPEChpc 2002.
  • КОРАЛОВЫЕ эталоны
  • Экзафлопсные прокси-приложения
  • Родиния сосредоточилась на ускорителях.
  • Пакет тестов на основе проблем

К критериям правильности относятся:

  • Пакет проверки OpenMP
  • Набор тестов для проверки и проверки OpenMP
  • DataRaceBench — это набор тестов, предназначенный для систематической и количественной оценки эффективности инструментов обнаружения гонок данных OpenMP.
  • AutoParBench — это набор тестов для оценки компиляторов и инструментов, которые могут автоматически вставлять директивы OpenMP.

См. также [ править ]

Ссылки [ править ]

  1. ^ Перейти обратно: а б с «О OpenMP АРБ и» . OpenMP.org. 11 июля 2013 г. Архивировано из оригинала 9 августа 2013 г. Проверено 14 августа 2013 г.
  2. ^ Перейти обратно: а б «Компиляторы и инструменты OpenMP» . OpenMP.org. Ноябрь 2019 года . Проверено 5 марта 2020 г.
  3. ^ Перейти обратно: а б Ганье, Авраам Зильбершац, Питер Баер Гэлвин, Грег (17 декабря 2012 г.). Концепции операционной системы (9-е изд.). Хобокен, Нью-Джерси: Уайли. стр. 181–182. ISBN  978-1-118-06333-0 . {{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  4. ^ Учебное пособие по OpenMP на Supercomputing 2008.
  5. ^ Использование OpenMP - Портативное параллельное программирование с общей памятью - Загрузите примеры книг и обсудите
  6. ^ Коста, Джей Джей; и другие. (май 2006 г.). «Эффективный запуск приложений OpenMP на всеобщем SDSM». Журнал параллельных и распределенных вычислений . 66 (5): 647–658. дои : 10.1016/j.jpdc.2005.06.018 . HDL : 2117/370260 .
  7. ^ Басумаллик, Айон; Мин, Сын Джай; Эйгенманн, Рудольф (2007). «Программирование систем с распределенной памятью с использованием OpenMP». 2007 Международный симпозиум IEEE по параллельной и распределенной обработке . Нью-Йорк: IEEE Press. стр. 1–8. CiteSeerX   10.1.1.421.8570 . дои : 10.1109/IPDPS.2007.370397 . ISBN  978-1-4244-0909-9 . S2CID   14237507 . Препринт доступен на домашней странице Чэнь Дина ; особенно см. раздел 3 о переводе OpenMP в MPI.
  8. ^ Ван, Цзюэ; Ху, Чан Цзюнь; Чжан, Цзилинь; Ли, ЦзяньЦзян (май 2010 г.). «Компилятор OpenMP для архитектур с распределенной памятью» . Наука Китай Информационные науки . 53 (5): 932–944. дои : 10.1007/s11432-010-0074-0 . (По состоянию на 2016 год программное обеспечение KLCoMP, описанное в этом документе, не является общедоступным)
  9. ^ Cluster OpenMP (продукт, который раньше был доступен для компилятора Intel C++ версий с 9.1 по 11.1, но был исключен в версии 13.0)
  10. ^ Эгюад, Эдуард; Копти, Наваль; Дюран, Алехандро; Хофлингер, Джей; Линь, Юань; Массайоли, Федерико; Су, Эрнесто; Унникришнан, Прия; Чжан, Гуаньсун (2007). Предложение по параллелизму задач в OpenMP (PDF) . Учеб. Международный семинар по OpenMP.
  11. ^ «Интерфейс прикладного программного обеспечения OpenMP, версия 3.0» (PDF) . openmp.org. Май 2008 года . Проверено 6 февраля 2014 г.
  12. ^ ЛаГрон, Джеймс; Арибуки, Йодун; Аддисон, Коди; Чепмен, Барбара (2011). Реализация задач OpenMP во время выполнения . Учеб. Международный семинар по OpenMP. стр. 100-1 165–178. CiteSeerX   10.1.1.221.2775 . дои : 10.1007/978-3-642-21487-5_13 .
  13. ^ «Выпущен API OpenMP 4.0» . OpenMP.org. 26 июля 2013 г. Архивировано из оригинала 09.11.2013 . Проверено 14 августа 2013 г.
  14. ^ «Интерфейс прикладного программного обеспечения OpenMP, версия 4.0» (PDF) . openmp.org. Июль 2013 . Проверено 6 февраля 2014 г.
  15. ^ «Спецификация OpenMP 5.2» .
  16. ^ «OpenMP ARB выпускает технический отчет 12» .
  17. ^ «C — Как использовать printf() в нескольких потоках» .
  18. ^ «std::cout, std::wcout — cppreference.com» .
  19. ^ «Учебное пособие. Параллельное выполнение циклов с OpenMP» . 14 июля 2009 г.
  20. ^ Выпуски Visual C++, Visual Studio 2005.
  21. ^ Выпуски Visual C++, Visual Studio 2008.
  22. ^ Выпуски Visual C++, Visual Studio 2010.
  23. ^ Дэвид Уортингтон, «Intel рассматривает жизненный цикл разработки с помощью Parallel Studio». Архивировано 15 февраля 2012 г. в Wayback Machine , SDTimes, 26 мая 2009 г. (по состоянию на 28 мая 2009 г.).
  24. ^ «Функции XL C/C++ для Linux» (по состоянию на 9 июня 2009 г.)
  25. ^ «Технологическая сеть Oracle для разработчиков Java | Технологическая сеть Oracle | Oracle» . Developers.sun.com . Проверено 14 августа 2013 г.
  26. ^ Перейти обратно: а б «openmp — GCC Wiki» . Gcc.gnu.org. 30 июля 2013 г. Проверено 14 августа 2013 г.
  27. ^ Кеннеди, Патрик (6 сентября 2011 г.). «Компиляторы Intel® C++ и Fortran теперь поддерживают спецификацию OpenMP* 3.1 | Intel® Developer Zone» . Software.intel.com . Проверено 14 августа 2013 г.
  28. ^ Перейти обратно: а б «Возможности компиляторов IBM XL C/C++» . ИБМ . 13 декабря 2018 г.
  29. ^ Перейти обратно: а б «Возможности компиляторов IBM XL Fortran» . 13 декабря 2018 г.
  30. ^ Перейти обратно: а б «Примечания к выпуску Clang 3.7» . llvm.org . Проверено 10 октября 2015 г.
  31. ^ «Главная страница Absoft» . Проверено 12 февраля 2019 г.
  32. ^ «Серия выпусков GCC 4.9 – Изменения» . www.gnu.org.
  33. ^ «Функции OpenMP* 4.0 в компиляторе Intel 15.0» . Программное обеспечение.intel.com. 13 августа 2014 г. Архивировано из оригинала 16 ноября 2018 г. Проверено 10 ноября 2014 г.
  34. ^ «Серия выпусков GCC 6 — Изменения» . www.gnu.org.
  35. ^ «Компиляторы и инструменты OpenMP» . openmp.org . www.openmp.org . Проверено 29 октября 2019 г.
  36. ^ Перейти обратно: а б «Поддержка OpenMP — документация Clang 12» . clang.llvm.org . Проверено 23 октября 2020 г.
  37. ^ «GOMP — реализация OpenMP для GCC — Проект GNU — Фонд свободного программного обеспечения (FSF)» . gcc.gnu.org . Архивировано из оригинала 27 февраля 2021 г. Проверено 23 октября 2020 г.
  38. ^ «Поддержка OpenMP*» . Интел . Проверено 23 октября 2020 г.
  39. ^ Перейти обратно: а б Амриткар, Амит; Тафти, Данеш; Лю, Руй; Куфрин, Рик; Чепмен, Барбара (2012). «Параллелизм OpenMP для систем жидкость и жидкость-частицы». Параллельные вычисления . 38 (9): 501. doi : 10.1016/j.parco.2012.05.005 .
  40. ^ Амриткар, Амит; Деб, Сурья; Тафти, Данеш (2014). «Эффективное параллельное моделирование CFD-DEM с использованием OpenMP» . Журнал вычислительной физики . 256 : 501. Бибкод : 2014JCoPh.256..501A . дои : 10.1016/j.jcp.2013.09.007 .
  41. ^ Поддержка ускорителя OpenMP для графических процессоров
  42. ^ Обнаружение и предотвращение условий гонки OpenMP в C++
  43. ^ «Алексей Колосов, Евгений Рыжков, Андрей Карпов 32 ловушки OpenMP для C++-разработчиков» . Архивировано из оригинала 7 июля 2017 г. Проверено 15 апреля 2009 г.
  44. ^ Стивен Блэр-Чаппел, корпорация Intel, «Став экспертом по параллельному программированию за девять минут», презентация на конференции ACCU 2010
  45. ^ Чен, Юронг (15 ноября 2007 г.). «Многоядерное программное обеспечение». Журнал технологий Intel . 11 (4). дои : 10.1535/itj.1104.08 .
  46. ^ «Результат OMPM2001» . СПЕЦ. 28 января 2008 г.
  47. ^ «Результат OMPM2001» . СПЕЦ. 01 апреля 2003 г. Архивировано из оригинала 25 февраля 2021 г. Проверено 28 марта 2008 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 955A4422403C0907812013B03EDB7EA3__1717319760
URL1:https://en.wikipedia.org/wiki/OpenMP
Заголовок, (Title) документа по адресу, URL1:
OpenMP - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)