Увидел свет (http://openmp.org/wp/2013/07/openmp-40/) набор спецификаций OpenMP 4.0 (http://openmp.org/wp/openmp-specifications/) (Open Multi-Processing), определяющих API и способы применения методов параллельного программирования для языков Си, Си++ и Фортран. Ключевыми нововведениями OpenMP 4.0 стали поддержка ускорения за счет привлечения мощностей GPU, значительные улучшения в модели выполнения задач, добавление механизмов обработки ошибок и поддержка определенных пользователем редукций.
Новые возможности в API версии 4.0 включают в себя:
- Поддержка ускорения вычислений за счёт задействования дополнительных аппаратных вычислительных устройств, таких как GPU. С рядом производителей была проделана значительная работа для обеспечения поддержки разнообразных вычислительных устройств. Теперь API OpenMP предоставляет механизмы, позволяющие указать, что некая область кода и/или данных должны быть обработаны с использованием другого вычислительного устройства. Уже реализовано несколько прототипов поддержки различных акселераторов.- Для векторизации последовательных и параллелизированных циклов задействованы инструкции SIMD (http://ru.wikipedia.org/wiki/SIMD). Поскольку в подавляющем большинстве современных процессоров есть SIMD блоки, существует необходимость в кроссплатформенном доступе к подобным возможностям CPU. API OpenMP 4.0 предоставляет механизмы для указания того, как распараллелить циклы с использованием инструкций SIMD и как определить версии функций, которые можно вызывать в блоках, использующих SIMD.
- Обработка ошибок. API OpenMP 4.0 теперь предоставляет средства для обработки ошибок, что должно повысить надежность и стабильность приложений OpenMP при наличии системных ошибок, ошибок времени выполнения ("runtime-level errors") и ошибочных ситуаций, определенных пользователем. Определена возможность прекращения параллельного выполнения, основанная на условной отмене и определяемых пользователем точках отмены выполнения.
- Привязка потоков (Thread affinity). API OpenMP 4.0 предоставляет механизмы для указания где именно выполнять потоки OpenMP. При этом обеспечивается разделение специфики платформ от алгоритмов.
- Параллелизм на уровне задач (Tasking extensions). API OpenMP 4.0 предоставляет ряд расширений для поддержки параллельного выполнения на уровне задач. Задачи можно группировать для обеспечения их глубокой синхронизации. Группа задач может быть прервана целиком, что может применяться для совместно выполняемого набора задач, таких как поиск, в ситуации, когда нахождение желаемого результата завершает всю группу совместно работавших над его получением задач. Также поддерживается синхронизация задачи с задачей, путем определения зависимостей.
- Поддержка Fortran 2003. Стандарт Fortran 2003 вобрал в себя множество возможностей современных языков программирования. Поддержка Fortran 2003 позволяет параллелизировать программы на данном языке программирования. Кроме всего прочего, это включает в себя поддержку взаимодействия Fortran и C.
- Определяемые пользователем редукции (http://ru.wikipedia.org/wiki/%D0%A0%D0%B... (User-defined reductions). Ранее API стандарта OpenMP поддерживал редукцию с использованием базового языка операторов и внутренних процедур. API OpenMP 4.0 предоставляет средства для определения редукций пользователем.
- Атомарная последовательная консистентность (http://ru.wikipedia.org/wiki/%D0%9F%D0%B... (Sequentially consistent atomics). Добавлена конструкция, позволяющая программисту принудительно применять последовательную консистентность для областей хранения, поддерживающих атомарный доступ.
URL: http://openmp.org/wp/2013/07/openmp-40/
Новость: http://www.opennet.me/opennews/art.shtml?num=37635[сообщение отредактировано модератором]
позитивно =)
то, чего ТАК долго ждали - вышло-таки )
*ушел пилить*
В какой версии gcc ждать полную поддержку?
4.9.х ? :)
в Clang 3.4
Да ты шутник, однако. Clang на данный момент совсем не поддерживает OpenMP, и это является его единственным недостатком, ведь в остальном он идёт вровень с GCC.
А по генерируемому bloatware уже далеко впереди.
GPU очень интересно, особенно в счязи с прогрессом Galluim Cmpute, Clover. Подозреваю что из за того что он на тормозном распиареном llvm, OpenMP там не будет еще лет 10. Но на gcc по определению такого нет, на ставслась задача. Выходит что одна сплошная блобная проприетарщина будет.
Для начала либо почините клавиатуру, либо выпрямите пальцы.Для продолжения, при чем здесь llvm и OpenMP? Вы хоть понимаете, что llvm это JIT-компилятор и там он используется чтоб компилировать OpenCL код в инструкции GPU? В том-же OpenMP llvm может использоваться для таких-же целей.
Ути-пути, любимый llvm-чик обидели, хнык-хнык. Гггг
Я llvm использую, но делать из него фетиш подобно вам, чтобы потом отлаживать кирпичи - увольте
и в чём сейчас модно кирпичи отлаживать? gdb?
clang все еще не работает с ним
> clang все еще не работает с нимFAIL, чо :).
кто ?
оно - часть тулчейна GCC. меджится туда AMD-ой и SGI/Rackspace/Cray-ями с IBM напополам )
Пятилетка стандартописательства в разгаре. Кто только это все делать будет?
А как эта связка с GPU называется то? В PDF'ке про GPU ни слова не сказано.
Если я правильно понял, то для взаимодействия с ускорителями (в т.ч. GPU), ввели понятие устройста (device).
OpenMP API provides mechanisms to describe regions of code where data and/or computation should be moved to another computing device. Several prototypes for the accelerator proposal have already been implemented.
> А как эта связка с GPU называется то? В PDF'ке про GPU
> ни слова не сказано.Хм, а еще есть OpenACC и он вроде на GPU ориентирован.
Что бы код вычислялся на ГПУ нужны оригинальные видео драйверы от АМД например?