The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

29.11.2015 10:34  Опубликован стандарт параллельного программирования OpenMP 4.5

После двух с половиной лет разработки опубликован набор спецификаций OpenMP 4.5 (Open Multi-Processing), определяющих API и способы применения методов параллельного программирования для языков Си, Си++ и Фортран на многоядерных и гибридных (CPU+GPU/DSP) системах с общей памятью и блоками векторизации (SIMD). OpenMP 4.5 примечателен расширением средств для параллельного программирования на системах с аппаратными ускорителями и GPU, а также поддержкой распараллеливания циклов с хорошо структурированными зависимостями. Реализация OpenMP 4.5 уже почти завершена в GCC и будет представлена в выпуске GCC 6.0, а также уже началась в экспериментальной ветке Clang, в которой формируется выпуск 3.8.

Основные новшества OpenMP 4.5:

  • Значительно улучшена поддержка дополнительных аппаратных вычислительных устройств, таких как специализированные аппаратные ускорители. Реализованы механизмы для привязки к подобным устройствам операций с неструктурированными данными или асинхронного выполнения кода. Добавлены процедуры для управления памятью устройства, позволяющие выделять, копировать и высвобождать блоки памяти;
  • Представлен механизм "doacross loops", позволяющий организовать распараллеливание циклов с хорошо структурированными зависимостями;
  • Новая конструкция "taskloop", позволяющая разделять циклы на задачи, избегая необходимости выполнения всех потоков внутри цикла;
  • Поддержка сокращения (редукции) массивов С/С++;
  • Новые механизмы hint-ов, через которые можно задать параметры выставления задачам относительных приоритетов и выбора предпочтительных средств синхронизации;
  • Поддержка привязки (affinity) потоков к заданным вычислительным устройствам;
  • Возможность распараллеливания многих приложений, написанных в соответствии со спецификацией Fortran 2003;
  • Поддержка расширений SIMD, в том числе возможность указать точное число обработчиков в потоке (метрика SIMD Width) и дополнительные атрибуты при обращении к общим данным.


  1. Главная ссылка к новости (http://openmp.org/wp/2015/11/o...)
  2. OpenNews: В Clang обеспечена полноценная поддержка OpenMP
  3. OpenNews: В проект LLVM вошла разработанная в Intel runtime-библиотека OpenMP. Red Hat представил OpenMP 4.0 для GCC
  4. OpenNews: Выпущены спецификации OpenMP 4.0
  5. OpenNews: Опубликован стандарт OpenMP 3.1, определяющий API для параллельного программирования
Лицензия: CC-BY
Тип: К сведению
Ключевые слова: openmp, parallel
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.1, Илья (??), 11:45, 29/11/2015 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Мне показалось, или дизайн подправили?
     
  • 1.2, Аноним (-), 12:13, 29/11/2015 [ответить] [показать ветку] [···]     [к модератору]
  • +/
    С кем не общался, все упоминают OpenMP как костыль И на практике вообще не встр... весь текст скрыт [показать]
     
     
  • 2.3, KLIM (?), 12:40, 29/11/2015 [^] [ответить]    [к модератору]  
  • +2 +/
    Я пишу научное ПО с применением openmp. В научных вычислениях это станадрт наряду с MPI.
     
  • 2.5, Аноним (-), 13:07, 29/11/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    OpenMP - адский костыль. Представьте, каково это, отлаживать код в котором существенная часть логики сидит в прагмах.
     
     
  • 3.18, ferux (ok), 17:22, 29/11/2015 [^] [ответить]     [к модератору]  
  • +/
    Кому не нравятся прагмы, есть подвижки к переходу на generalized attributes htt... весь текст скрыт [показать]
     
  • 2.6, АнониМ (ok), 13:22, 29/11/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    Костыль, но попадаются приложения его использующие тот же imagemagick.
     
  • 2.7, Аноним (-), 14:21, 29/11/2015 [^] [ответить]     [к модератору]  
  • +1 +/
    Всё верно и добавить нечего ... весь текст скрыт [показать]
     
  • 2.8, Аноним (-), 14:38, 29/11/2015 [^] [ответить]     [к модератору]  
  • +2 +/
    Насколько я помню, изначальная идея была - быстро распараллелить старый код Поэ... весь текст скрыт [показать]
     
  • 2.9, solardiz (ok), 15:38, 29/11/2015 [^] [ответить]    [к модератору]  
  • +10 +/
    > Кто работал с ним?

    Мы используем в John the Ripper вот уже 5 лет. OpenMP может работать костылем (и наше применение как раз этому соответствует, т.к. прагмы добавлялись в том числе в старый код), но может и не (не более чем альтернативы) когда пишется новый код и OpenMP хорошо подходит для задачи (обычно это сколько-нибудь длительные вычисления, а не интерактив).

    Проблем с отладкой особо нет (не более чем для альтернатив - ну и что, что прагмы, как будто step-into в их реализации в библиотеке на уровне исходника бы чем-то помог). default(none) помогает избежать части багов в своем коде.

    Проблемы с производительностью есть при частой синхронизации потоков (тысячи раз в секунду) и/или на системах с посторонней загрузкой. Это цена за упрощение кода основной программы. Можно эту цену и не платить, а держать раскидывание частей задачи по потокам более под своим контролем, при этом всё равно используя OpenMP, но тогда смысла использовать именно OpenMP меньше. Зато, если отдать всё решать runtime-библиотеке, раскидыванием по потокам можно рулить (static vs. dynamic, affinity, ...) с помощью переменных окружения (и не только) не тратя на это свой код. При этом основная логика вычислений может быть более наглядно видна в исходнике, чем при явной многопоточности.

    К тому же, есть OpenMP offload, аналога которого в перечисленных альтернативах нет. Мы пока что его попробовали лишь чуть-чуть, с Xeon Phi. Производительность, как и ожидали, получается хорошая лишь для offload-а сколько-нибудь длительных вычислений (хотя бы сколько-то миллисекунд) и небольшого объема передаваемых данных. Тем не менее, в ряде случаев этого может быть достаточно, а исходник получается проще, чем если всё это делать вручную.

     
  • 2.10, pavlinux (ok), 15:46, 29/11/2015 [^] [ответить]     [к модератору]  
  • –8 +/
    По моему ты ваще них я не понимаешь в параллельных вычислениях А сравнивать с... весь текст скрыт [показать]
     
     
  • 3.11, Аноним (-), 15:48, 29/11/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    OpenMP прагмовая высокоуровневая обертка над тредами
     
     
  • 4.15, Трорвальдс (?), 16:36, 29/11/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    > OpenMP прагмовая высокоуровневая обертка над тредами

    Да-да, "настоящие пОцаны" сразу пишут на ассемблере, а не этих ваших "высокоуровневых обёртках". Cool story bro

     
     
  • 5.16, Аноним (-), 16:57, 29/11/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    Настоящие пацаны давно пишут на
    > std::thread, pthread, qthread, qtconcurrent

    и т.п.

     
  • 3.12, Аноним (-), 15:50, 29/11/2015 [^] [ответить]    [к модератору]  
  • +/
    > ... не читал, но осуждаю.

    Не вижу нигде осуждений

     
  • 3.13, Аноним (-), 15:52, 29/11/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    > А сравнивать с тредами все равно, что теплое с мягким.

    Раскроешь нам эту изюминку OpenMP? Ведь вопрос был как раз про это, и походу ты один здесь знаешь истину.

     
     
  • 4.21, Dark Amateur (?), 18:56, 29/11/2015 [^] [ответить]     [к модератору]  
  • +2 +/
    Хранение последовательной и параллельной программы в едином файле исходного кода... весь текст скрыт [показать]
     
     
  • 5.22, Аноним (-), 19:07, 29/11/2015 [^] [ответить]     [к модератору]  
  • –2 +/
    Это такая сверх необходимая вещь и всем очень нужная, да еще и не реализуемая на... весь текст скрыт [показать]
     
     
  • 6.23, Dark Amateur (?), 19:15, 29/11/2015 [^] [ответить]     [к модератору]  
  • +2 +/
    Если программа больше 10 строк - то вещь очень нужная, как минимум для отладки ... весь текст скрыт [показать]
     
     
  • 7.27, Аноним (-), 19:48, 29/11/2015 [^] [ответить]     [к модератору]  
  • –2 +/
    А в чем разница между отладкой однопоточного и многопоточного приложения Или ва... весь текст скрыт [показать]
     
     
  • 8.33, 10й Брейтовский переулок (?), 00:01, 30/11/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    >>> А в чем разница между отладкой однопоточного и многопоточного приложения

    "Слив засчитан" (С)

     
  • 5.24, mkarev (?), 19:25, 29/11/2015 [^] [ответить]     [к модератору]  
  • +/
    Вопрос некорректен, Вы сравниваете теплое с мягким pthreads - библиотека OpenMP... весь текст скрыт [показать]
     
     
  • 6.25, Dark Amateur (?), 19:39, 29/11/2015 [^] [ответить]     [к модератору]  
  • +/
    Не-не-не, как раз тёплое с мягким и сравниваем, а посему вопрос уместен Скажем ... весь текст скрыт [показать]
     
     
  • 7.26, mkarev (?), 19:46, 29/11/2015 [^] [ответить]     [к модератору]  
  • –2 +/
    В худшем случае - Ваша программа упадет на машине без AVX PS раз уж сравнивать... весь текст скрыт [показать]
     
     
  • 8.28, Аноним (-), 19:54, 29/11/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    > float point only

    Начиная с Haswell это, вроде как, не так

     
     
  • 9.29, mkarev (?), 19:57, 29/11/2015 [^] [ответить]    [к модератору]  
  • +/
    Да, потому что в хасвеле появился AVX2
     
  • 8.30, Dark Amateur (?), 20:05, 29/11/2015 [^] [ответить]     [к модератору]  
  • +1 +/
    Нормальная программа не должна падать ни при каких обстоятельствах Особенно, ес... весь текст скрыт [показать]
     
     
  • 9.31, mkarev (ok), 21:06, 29/11/2015 [^] [ответить]     [к модератору]  
  • –3 +/
    Согласен, для этого в нормальных программах обмазываются реализациями под кажд... весь текст скрыт [показать]
     
     
  • 10.32, Dark Amateur (?), 21:45, 29/11/2015 [^] [ответить]    [к модератору]  
  • +2 +/
    > AMD нет ничего старше SSE3 по части SIMD

    CPUBoss с Вами не согласен: http://cpuboss.com/cpu/AMD-FX-8320

    > скомпилировать на супер дупер авто simd компиляторе

    Кто сказал, что #pragma omp simd в OpenMP - это автовекторизация? Не, конечно, сами инструкции подбираются автоматически, учитывая при этом и опции компилятора, но рассовываются и тюнингуются они всё-таки программистом.

    > для этого в нормальных программах "обмазываются" реализациями под каждый набор инструкций
    > Я с этими делами сталкиваюсь каждый день (кодек девелопмент)

    Ну, таков Ваш путь.

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

     
     
  • 11.37, mkarev (ok), 09:03, 30/11/2015 [^] [ответить]    [к модератору]  
  • +/
    > Кто сказал, что #pragma omp simd в OpenMP - это автовекторизация?

    Простите, а что это тогда?
    Да, конечно, вы намекаете компилятору, что "тут можно распараллелить цикл в N раз"
    Но на этом по сути все и заканчивается

    > Ну, таков Ваш путь.

    Таков путь тех, у кого большой объем DSP вычислений, которые надо делать в реальном времени.

    > В общем случае, возня с конкретным процессором - это перспектива дальнейшей возни с другим процессором

    Угу, у нас ведь каждый день новая архитектура и набор инструкций рождаются

     
     
  • 12.43, redwolf (ok), 21:14, 01/12/2015 [^] [ответить]    [к модератору]  
  • +3 +/
    Я сталкивался с кодом, который использует OpenMP в подобных задачах: https://opus4.kobv.de/opus4-zib/files/4218/wende_steinke.pdf

    Об автовекторизации задачи здесь речи не идёт. Если кратко, то с использованием OpenMP пишутся аналоги CUDA-ядер, которые запускаются на многоядерных узлах кластера. Коммуникация между узлами осуществляется с использованием MPI.

     
  • 5.39, bOOster (ok), 13:46, 30/11/2015 [^] [ответить]    [к модератору]  
  • –2 +/
    Вот еслибы это было кроссплатформенностью уровня выполнения, а не компиляции, цены бы этому не было. А так костыль.
     
     
  • 6.44, redwolf (ok), 21:20, 01/12/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    > Вот еслибы это было кроссплатформенностью уровня выполнения, а не компиляции, цены бы
    > этому не было. А так костыль.

    По такой логике и Qt --  костыль. И вообще решения на C++ --  костыль.

    А Вы, случаем, не фанат Java?)

     
     
  • 7.45, bOOster (ok), 04:48, 02/12/2015 [^] [ответить]    [к модератору]  
  • –2 +/
    Отличная практика путать жопу с пальцем. Главное демагогией позаниматься...
     
  • 2.34, AAAAAAaaAAAAAA (?), 02:04, 30/11/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    Я активно использую openMP в программах на Ansi C11 и очень доволен, согласен что для C++ подходит плохо. OpenMP не умеет исключения, STL контейнеров и смартпоинтеров не понимает, проблемы с контрукторами. OpenMP это для С и Fortran, в С++ лучше не стоит.
     
  • 2.47, Аноним (-), 18:20, 05/12/2015 [^] [ответить]    [к модератору]  
  • +/
    из НЕ-проприетарного - он пока безальтернативен для HPC, к сожалению.
    не на ICC-же ваять который с MP не дружит. распределенное решение реально работающее - иначе не написать.
     
  • 1.4, alexxy (ok), 12:42, 29/11/2015 [ответить] [показать ветку] [···]    [к модератору]  
  • +3 +/
    OpenMP распространен в научном и инженерном софте, примерно так же как MPI
     
     
  • 2.14, Трорвальдс (?), 16:27, 29/11/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    Только местные школьники-дурачки про это не в курсе :) Эти кловуны выдают бред уровня "pthreads хватит всем", сразу выдающий их "уровень".
     
     
  • 3.17, Аноним (-), 16:59, 29/11/2015 [^] [ответить]    [к модератору]  
  • –5 +/
    OpenMP работает на pthreads, не?
     
     
  • 4.19, KLIM (?), 17:25, 29/11/2015 [^] [ответить]    [к модератору]  
  • +2 +/
    https://software.intel.com/en-us/articles/threading-models-for-high-performanc

    In 1997, a group of vendors came together under the aegis of hardware manufacturer, Silicon Graphics, to formulate a new threading interface. Their common problem was that the primary operating systems of the time all imposed drastically different ways of programming for threads. UNIX employed Pthreads, Sun used Solaris threads, Windows used its own API, and Linux used Linux threads (until its subsequent adoption of Pthreads). The committee wanted to design an API that would enable a codebase to run without changes equally well on Windows and UNIX/Linux. In 1998, it delivered the first API specification of what was called OpenMP (In those days, the term ‘open’ was associated with the concept of support from multiple vendors-as in open systems-rather than with today’s implication of open source.)

     
     
  • 5.38, dmitrmax (?), 09:58, 30/11/2015 [^] [ответить]    [к модератору]  
  • +/
    Нативно ни одна из этих ОС не поддерживает OpenMP. Таким образом, на Unix-like ОС OpenMP работает через pthread. В винде на WinAPI.
     
  • 4.35, Аноним (-), 02:22, 30/11/2015 [^] [ответить]    [к модератору]  
  • +/
    OpenMP может работать с SIMD.
    OpenMPI еще и сетевым слоем для распределения по GRID/Hybrid-Cluster.

    Выбор в пользу OpenMPI, если не хотите  писать свои костыли для работы по сети.

     
     
  • 5.36, Аноним (-), 02:23, 30/11/2015 [^] [ответить]     [к модератору]  
  • +/
    В догонку еще один http www mpich org ... весь текст скрыт [показать]
     
  • 2.20, Аноним (20), 18:32, 29/11/2015 [^] [ответить]    [к модератору]  
  • +/
    и прочая туфта распространена в научном и инженерном софте.
     
  • 1.40, Аноним (-), 14:17, 30/11/2015 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    А как вручную рассадить потоки по ядрам?
    В pthread-ax разве есть такая возможность?
     
     
  • 2.41, Аноним (20), 15:56, 30/11/2015 [^] [ответить]    [к модератору]  
  • +/
    есть, написать свой планировщик
     
  • 1.42, Аноним (-), 18:00, 30/11/2015 [ответить] [показать ветку] [···]     [к модератору]  
  • –1 +/
    Ну да, попросить у планировщика ядра Линя два ядра проца и раздать своим поток... весь текст скрыт [показать]
     
  • 1.46, Аноним (-), 18:18, 05/12/2015 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    автору - SIMD это SIMD. а блоки векторизации - это блоки векторизации - не путаем. аналогично это и векторные процессоры(и подсистемы оных) - с первыми двумя.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor