Коаррей Фортран
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Парадигма | мультипарадигмальность : параллельная , передача сообщений , императивная ( процедурная , объектно-ориентированная ), структурированная. |
---|---|
Разработано | Роберт Нумрич и Джон Рид |
Разработчик | 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, описанных ниже. Примеры включают группы изображений и событий.
Альтернативная точка зрения
[ редактировать ]Этот раздел может быть несбалансированным по отношению к определенным точкам зрения . ( сентябрь 2018 г. ) |
Этот раздел может чрезмерно полагаться на источники, слишком тесно связанные с предметом , что может помешать статье стать проверяемой и нейтральной . ( Ноябрь 2021 г. ) |
В 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, которая заставляет всю команду выполнять асинхронные операции,
См. также
[ редактировать ]- Программирование массивов
- Часовня
- Крепость
- Параллельные вычисления
- Разделенное глобальное адресное пространство
- Унифицированный параллельный C
- х10
Ссылки
[ редактировать ]- ^ А. Штеренлихт, Библиотека массивов Fortran для трехмерного моделирования микроструктуры клеточных автоматов. Архивировано 4 марта 2016 г. в Wayback Machine , (2013) В Proc. 7-я конференция PGAS, Ред. М. Вейланд, А. Джексон, Н. Джонсон, Издано Эдинбургским университетом, ISBN 978-0-9926615-0-2
- ^ TS 18508 Дополнительные параллельные функции на Фортране
- ^ «КоАррей Фортран 2.0» .