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 В научных вычислениях это станадрт наряд... весь текст скрыт [показать] [показать ветку]
     
  • 2.5, Аноним, 13:07, 29/11/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    OpenMP - адский костыль Представьте, каково это, отлаживать код в котором сущес... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.18, ferux, 17:22, 29/11/2015 [^] [ответить] [смотреть все]  
  • +/
    Кому не нравятся прагмы, есть подвижки к переходу на generalized attributes htt... весь текст скрыт [показать]
     
  • 2.6, АнониМ, 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, 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, 15:46, 29/11/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • –8 +/
    По моему ты ваще них я не понимаешь в параллельных вычислениях А сравнивать с... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.11, Аноним, 15:48, 29/11/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    OpenMP прагмовая высокоуровневая обертка над тредами
     
     
  • 4.15, Трорвальдс, 16:36, 29/11/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    Да-да, настоящие пОцаны сразу пишут на ассемблере, а не этих ваших высокоуров... весь текст скрыт [показать]
     
     
  • 5.16, Аноним, 16:57, 29/11/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    Настоящие пацаны давно пишут на и т п ... весь текст скрыт [показать]
     
  • 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, 21:06, 29/11/2015 [^] [ответить] [смотреть все]  
  • –3 +/
    Согласен, для этого в нормальных программах обмазываются реализациями под кажд... весь текст скрыт [показать]
     
     
  • 10.32, Dark Amateur, 21:45, 29/11/2015 [^] [ответить] [смотреть все]  
  • +2 +/
    CPUBoss с Вами не согласен http cpuboss com cpu AMD-FX-8320 Кто сказал, что ... весь текст скрыт [показать]
     
     
  • 11.37, mkarev, 09:03, 30/11/2015 [^] [ответить] [смотреть все]  
  • +/
    Простите, а что это тогда Да, конечно, вы намекаете компилятору, что тут можно... весь текст скрыт [показать]
     
     
  • 12.43, redwolf, 21:14, 01/12/2015 [^] [ответить] [смотреть все]  
  • +3 +/
    Я сталкивался с кодом, который использует OpenMP в подобных задачах https opu... весь текст скрыт [показать]
     
  • 5.39, bOOster, 13:46, 30/11/2015 [^] [ответить] [смотреть все]  
  • –2 +/
    Вот еслибы это было кроссплатформенностью уровня выполнения, а не компиляции, це... весь текст скрыт [показать]
     
     
  • 6.44, redwolf, 21:20, 01/12/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    По такой логике и Qt -- костыль И вообще решения на C -- костыль А Вы, сл... весь текст скрыт [показать]
     
     
  • 7.45, bOOster, 04:48, 02/12/2015 [^] [ответить] [смотреть все]  
  • –2 +/
    Отличная практика путать жопу с пальцем. Главное демагогией позаниматься...
     
  • 2.34, AAAAAAaaAAAAAA, 02:04, 30/11/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    Я активно использую openMP в программах на Ansi C11 и очень доволен, согласен чт... весь текст скрыт [показать] [показать ветку]
     
  • 2.47, Аноним, 18:20, 05/12/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    из НЕ-проприетарного - он пока безальтернативен для HPC, к сожалению не на ICC-... весь текст скрыт [показать] [показать ветку]
     
  • 1.4, alexxy, 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 еще и сетевым слоем для распределения по G... весь текст скрыт [показать]
     
     
  • 5.36, Аноним, 02:23, 30/11/2015 [^] [ответить] [смотреть все]  
  • +/
    В догонку еще один http www mpich org ... весь текст скрыт [показать]
     
  • 2.20, Аноним, 18:32, 29/11/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    и прочая туфта распространена в научном и инженерном софте.
     
  • 1.40, Аноним, 14:17, 30/11/2015 [ответить] [смотреть все]  
  • +/
    А как вручную рассадить потоки по ядрам В pthread-ax разве есть такая возможнос... весь текст скрыт [показать]
     
     
  • 2.41, Аноним, 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-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor