Jump to content

Коаррей Фортран

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

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

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

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

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

[ редактировать ]

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

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

program Hello_World
  implicit none
  integer :: i  ! Local variable
  character(len=20) :: name[*] ! scalar coarray, one "name" for each image.
  ! Note: "name" is the local variable while "name[<index>]" accesses the
  ! variable in a specific image; "name[this_image()]" is the same as "name".

  ! Interact with the user on Image 1; execution for all others pass by.
  if (this_image() == 1) then   
    write(*,'(a)',advance='no') 'Enter your name: '
    read(*,'(a)') name

    ! Distribute information to other images
    do i = 2, num_images()
      name[i] = name
    end do
  end if

  sync all ! Barrier to make sure the data have arrived.

  ! I/O from all images, executing in any order, but each record written is intact. 
  write(*,'(3a,i0)') 'Hello ',trim(name),' from image ', this_image()
end program Hello_world

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

program Hello_World
  implicit none
  character(len=20) :: name[*] ! scalar coarray, one "name" for each image.
  ! Note: "name" is the local variable while "name[<index>]" accesses the
  ! variable in a specific image; "name[this_image()]" is the same as "name".

  ! Interact with the user on Image 1; execution for all others pass by.
  if (this_image() == 1) then   
    write(*,'(a)',advance='no') 'Enter your name: '
    read(*,'(a)') name
  end if
  ! Distribute information to all images
  call co_broadcast(name,source_image=1)

  ! I/O from all images, executing in any order, but each record written is intact. 
  write(*,'(3a,i0)') 'Hello ',trim(name),' from image ', this_image()
end program Hello_world

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

Альтернативная точка зрения

[ редактировать ]

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

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

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

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

См. также

[ редактировать ]
  1. ^ А. Штеренлихт, Библиотека массивов Fortran для трехмерного моделирования микроструктуры клеточных автоматов. Архивировано 4 марта 2016 г. в Wayback Machine , (2013) В Proc. 7-я конференция PGAS, Ред. М. Вейланд, А. Джексон, Н. Джонсон, Издано Эдинбургским университетом, ISBN   978-0-9926615-0-2
  2. ^ TS 18508 Дополнительные параллельные функции на Фортране
  3. ^ «КоАррей Фортран 2.0» .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d7dd5c73f5afda76f1c611fc273bc070__1702581060
URL1:https://arc.ask3.ru/arc/aa/d7/70/d7dd5c73f5afda76f1c611fc273bc070.html
Заголовок, (Title) документа по адресу, URL1:
Coarray Fortran - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)