Coarray Fortran - Coarray Fortran

Coarray Fortran
Парадигмамультипарадигма: параллельно, передача сообщений, императив (процедурный, объектно-ориентированный ), структурированный
РазработаноРоберт Нумрих и Джон Рид
РазработчикPL22.3 Комитет Fortran
Стабильный выпуск
Фортран 2008 г. (ISO / IEC 1539-1: 2010)
Печатная дисциплинасильный, статический
Операционные системыКроссплатформенность
Основной реализации
Cray, g95, GNU Fortran, Компилятор Intel Fortran, Рис (CAF 2.0), OpenUH, Компилятор NAG Fortran
Под влиянием
Фортран

Coarray Fortran (CAF), ранее известный как F--, началось как расширение Фортран 95/2003 для параллельная обработка создан Робертом Нумрихом и Джоном Ридом в 1990-х годах. В Фортран 2008 стандарт (ISO / IEC 1539-1: 2010) теперь включает грубые (пишется без дефиса), как было решено на заседании комитета ISO Fortran в мае 2005 года; синтаксис стандарта Fortran 2008 немного отличается от исходного предложения CAF.

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

Расширение CAF было реализовано в некотором Fortran компиляторы например, из Cray (начиная с версии 3.1). С момента включения coarrays в стандарт Fortran 2008 количество реализаций растет. Первый Открытый исходный код компилятор, который реализовал coarrays, как указано в стандарте Fortran 2008 для Архитектуры Linux является G95. В настоящее время, GNU Fortran обеспечивает широкий охват функций Coarray Fortran в конфигурации с одним и несколькими образами (последняя основана на библиотеке OpenCoarrays). Другая реализация coarrays и связанных параллельных расширений из Fortran 2008 доступна в компиляторе OpenUH (ветвь Открыть64 ) разработан в Хьюстонский университет.

Реализация в компиляторах

CAF часто реализуется поверх Интерфейс передачи сообщений (MPI) библиотека для переносимости. Некоторые реализации, например, доступные в GNU Fortran и компиляторы OpenUH, могут работать поверх других низкоуровневых уровней (например, GASNet), предназначенных для поддержки разделенное глобальное адресное пространство языков.

Примеры

Ниже приводится простой пример. CAF используется в CGPACK, пакете с открытым исходным кодом для моделирования поликристаллических материалов, разработанном в Бристольский университет.[1]

программа Привет, мир  неявный нетцелое число :: я  ! Локальная переменная  персонаж(len=20) :: имя[*] ! скалярный массив, одно «имя» для каждого изображения.  ! Примечание. «Name» - это локальная переменная, а «name []» - доступ к  ! переменная в конкретном изображении; «имя [это_изображение ()]» совпадает с «именем».  ! Взаимодействовать с пользователем на изображении 1; исполнение для всех остальных проходят мимо.  если (это изображение() == 1) тогда     записывать(*,'(а)',продвигать='нет') 'Введите ваше имя: '    читать(*,'(а)') имя    ! Распространяйте информацию на другие изображения    делать я = 2, num_images()      имя[я] = имя    конец делать  конец, если  синхронизировать все ! Барьер, чтобы убедиться, что данные прибыли.  ! Ввод-вывод из всех образов выполняется в любом порядке, но каждая записанная запись не повреждена.   записывать(*,'(3a, i0)') 'Привет ',подрезать(имя),'из изображения', это изображение()конец программы Привет, мир

Приведенная выше программа плохо масштабируется, поскольку цикл, распределяющий информацию, выполняется последовательно. Написание масштабируемых программ часто требует сложного понимания параллельных алгоритмов, детального знания основных характеристик сети и специальной настройки таких характеристик приложения, как размер передаваемых данных. Для большинства разработчиков приложений, позволяя компилятору или исполняющей библиотеке выбирать лучший алгоритм, оказывается более надежным и высокопроизводительным. Fortran 2018 предложит подпрограммы коллективного взаимодействия, которые позволят командам компиляторов и библиотек времени выполнения инкапсулировать эффективные параллельные алгоритмы для коллективного взаимодействия и распределенных вычислений в наборе коллективных подпрограмм. Эти подпрограммы и другие новые функции параллельного программирования кратко изложены в технической спецификации. [2] комитет по стандартам Fortran проголосовал за включение в Fortran 2018. Они позволяют пользователю написать более эффективную версию вышеуказанного алгоритма.

программа Привет, мир  неявный нетперсонаж(len=20) :: имя[*] ! скалярный массив, одно «имя» для каждого изображения.  ! Примечание. «Name» - это локальная переменная, а «name []» - доступ к  ! переменная в конкретном изображении; «name [this_image ()]» - это то же самое, что «name».  ! Взаимодействовать с пользователем на изображении 1; исполнение для всех остальных проходят мимо.  если (это изображение() == 1) тогда     записывать(*,'(а)',продвигать='нет') 'Введите ваше имя: '    читать(*,'(а)') имя  конец, если  ! Распространение информации на все изображения  вызов co_broadcast(имя,source_image=1)  ! Ввод-вывод из всех образов выполняется в любом порядке, но каждая записанная запись не повреждена.   записывать(*,'(3a, i0)') 'Привет ',подрезать(имя),'из изображения', это изображение()конец программы Привет, мир

где отсутствие явной синхронизации предлагает потенциал для более высокой производительности из-за меньшей координации между изображениями. Кроме того, TS 18508 гарантирует, что «передача изображения не может произойти до тех пор, пока для этого изображения не будет вызвана коллективная подпрограмма». Это подразумевает некоторую частичную синхронизацию внутри co_broadcast, но может быть более производительной, чем «синхронизировать все» в предыдущем примере. TS 18508 также включает несколько других новых функций, направленных на устранение проблем, связанных с усилиями CAF 2.0, описанными ниже. Примеры включают команды изображений и событий.

Альтернативная перспектива

В 2011, Университет Райса преследовал альтернативное видение грубых расширений для языка Фортран.[3] Их точка зрения состоит в том, что решения комитета по стандартизации Fortran 2008 были сформированы больше из желания внести как можно меньше изменений в язык, чем собрать лучший набор расширений для поддержки параллельное программирование. По их мнению, как исходный дизайн Нумрича и Рейда, так и расширения coarray, предложенные для Fortran 2008, страдают следующими недостатками:

  • Нет поддержки процессор подмножества; например, грубые лучи должны быть распределены по всем изображениям.
  • В расширениях coarray отсутствует понятие глобальных указателей, которые необходимы для создания и управления любыми типами связанных структур данных.
  • Использование названных критических секций для взаимное исключение препятствует масштабируемому параллелизму, связывая взаимное исключение с областями кода, а не с объектами данных.
  • Оператор синхронизации изображений Fortran 2008 не обеспечивает безопасного пространства для синхронизации. В результате операции синхронизации в коде пользователя, ожидающие выполнения при вызове библиотеки, могут мешать синхронизации при вызове библиотеки.
  • Не существует механизмов, позволяющих избежать или допустить задержку при работе с данными на удаленных образах.
  • Нет поддержки коллективного общения.

Чтобы устранить эти недостатки, группа из Университета Райса разрабатывает с чистого листа переработку модели программирования Coarray Fortran. Новый дизайн Райса для Coarray Fortran, который они называют Coarray Fortran 2.0, представляет собой выразительный набор расширений на основе Coarray для Fortran, разработанных для обеспечения продуктивной модели параллельного программирования. По сравнению с Fortran 2008 новые языковые расширения на основе Coarray включают в себя некоторые дополнительные функции:

  • подмножества процессов, известные как команды, которые поддерживают грубые, коллективные коммуникации и относительную индексацию образов процессов для парных операций,
  • топологии, которые дополняют команды логической коммуникационной структурой,
  • динамическое размещение / освобождение coarrays и других общих данных,
  • групповое выделение и освобождение массивов,
  • глобальные указатели для поддержки динамических структур данных,
  • поддержка сокрытия и предотвращения задержки, а также
    • асинхронные копии,
    • асинхронные коллективные операции и
    • функция доставки.
  • расширенная поддержка синхронизации для точного контроля выполнения программы.
    • безопасная и масштабируемая поддержка взаимного исключения, включая замки и наборы замков,
    • события, которые обеспечивают безопасное пространство для двухточечной синхронизации,
    • cofence, который заставляет локальное завершение асинхронных операций,
    • finish, похожая на барьер конструкция SPMD, которая принудительно завершает асинхронные операции в команде,

Смотрите также

Рекомендации

  1. ^ А. Штеренлихт, Библиотека Fortran Coarray для трехмерного моделирования микроструктуры клеточных автоматов В архиве 2016-03-04 в Wayback Machine, (2013) В Proc. 7-я конференция PGAS, ред. М. Вейланд, А. Джексон, Н. Джонсон, Издательство Эдинбургского университета, ISBN  978-0-9926615-0-2
  2. ^ TS 18508 Дополнительные параллельные функции в Fortran
  3. ^ «CoArray Fortran 2.0».

Общий