Coarray Fortran

Coarray Fortran
Парадигма паралельна
Дата появи 1990-ті
Творці Robert Numrich та John Reid
Розробник PL22.3 Fortran Committee
Система типізації сильна, статична
Основні реалізації Cray, G95, GNU Fortran, Intel Fortran Compiler, Rice (CAF 2.0), OpenUH
Під впливом від Fortran
Операційна система мультиплатформна

Coarray Fortran (Co-array Fortran, CAF, раніше також F--)  — це модель програмування, започаткована в 1990-х (Robert Numrich та John Reid) у вигляді розширення, а зараз як частина стандарту мови програмування Fortran для забезпечення розпаралелювання та паралельного виконання програмного коду згідно з парадигмою «одна програма, багато потоків даних» (SPMD) з допомогою явного синтаксису[1][2][3]. Стандарт Fortran 2008 (ISO/IEC 1539-1:2010)[4] зараз містить в собі комасиви (англ. coarrays) у версії, яка була узгоджена на засіданні ISO Fortran Committee в травні 2005 року. Модель програмування з комасивами складається з двох нових концепцій, доданих до мови, а саме: розширення звичайного синтаксису масиву для представлення та декомпозиції даних і розширення моделі виконання для контролю та синхронізації паралельної роботи. Синтаксис комасивів в стандарті відрізняється в деталях від оригінального запропонованого проекту CAF.

Програма, що використовує CAF інтерпретується так, ніби у процесі виконання створюється багато копій програми (зображень, англ. image) і кожне зображення має свій набір об'єктів з даними та виконується асинхронно. Синтаксис комасивів додає до поняття масивів в Фортрані ще одну додаткову розмірність — так званий ковимір (англ. codimension) з допомогою задніх індексів в квадратних дужках і дозволяє маніпуляцію посиланнями на дані, котрі розподілені по різних зображеннях.

Історія[ред. | ред. код]

Комасиви Фортран виникли з внутрішніх технічних звітів на Cray Research на початку 1990-х років, і еволюціонували з простої моделі програмування для Cray-T3D в перше неофіційне визначення (Numrich 1997) для мови Fortran 77, де використовувався інший синтаксис представлення комасивів. На Fortran 90 комасиви були розширені Numrich і Steidel в 1997 і уточнені Numrich і Reid у вигляді неформального розширення для Fortran 95 в 1998 році. Оригінальне розширення CAF від Cray доступно протягом тривалого часу і було реалізовано виробником компіляторів Fortran, а саме Cray (починаючи з версії 3.1). Після внесення комасивів в стандарт Fortran 2008, число реалізацій значно зросло. Перший з відкритих компіляторів був G95[5][6] для архітектур GNU Linux, що підтримував комасиви. Після цього Intel додав підтримку комасивів в своєму компіляторі ifort. GNU Fortran також забезпечує більшість можливостей комасивів в конфігурації одного і декількох зображень (на основі бібліотеки з відкритим кодом OpenCoarrays). Ще одна реалізація комасивів і пов'язаних з ними паралельних розширень Fortran 2008 доступна в компіляторі OpenUH (один з форків компілятора Open64), розробленого в Г'юстонському університеті.

Комасиви в стандарті Fortran 2008[ред. | ред. код]

Модель програмування з допомогою комасивів була реалізована в стандарті мови Фортран за допомогою мінімізації доповнень і розширень синтаксису та мови Фортран, щоб перетворити її на ефективну мову для паралельного програмування на основі SPMD парадигми. При цьому програма копіюється в зображення фіксоване число разів. Кількість зображень не обмежена кількістю процесорів чи інших фізичних пристроїв. Конкретні реалізації можуть вибирати кількість зображень під час компіляції, чи в процесі виконання програми. Кожне зображення виконується асинхронно з застосуванням звичайних правил мови Fortran. Послідовність виконання може відрізнятися від зображення до зображення, та може бути змінена програмістом за допомогою унікального індексу зображення, що визначає ефективний і звичний для мови Фортран механізм управління та явну синхронізацію. Між синхронізаціями компілятор може вільно використовувати майже всі свої звичайні методи оптимізації.

Альтернативна реалізація і Fortran 2015[ред. | ред. код]

Спільнота науковців на чолі з John Mellor-Crummey з університету Райса в Г'юстоні, США не погодились з вибором Комітету стандартизації Fortran 2008 і продовжили розвивати альтернативний варіант розширення комасивів для мови Фортран[7]. На їхню думку, вибір Комітету стандартизації для Fortran 2008 був сформований прагненням ввести якнайменше модифікацій до мови, а не створити кращий набір розширень для підтримки паралельного програмування в Фортран і тому вони не вірили, що набір розширень, узгоджених комітетом, є правильним.

В результаті справедливої критики, в технічній специфікації затвердженій й опублікованій 19 листопада 2015 року «ISO/IEC TS 18508:2015 Information technology — Additional Parallel Features in Fortran» щодо розпаралелювання за допомогою комасивів (TS18508)[8] виправлено і враховано частково критику науковців університету Райса. TS18508 значно розширює паралельну семантику Fortran 2008 (додані підмножини зображень у вигляді команди team, колективну комунікацію, розширену синхронізацію та події event для легкої односторонньої синхронізації), переробляє деякі паралельні функції та виправляє деякі інші вади попереднього стандарту.

Реалізації в компіляторах[ред. | ред. код]

Більшість реалізацій комасивів створено виробниками компіляторів та додаткових бібліотек на основі технології Message Passing Interface MPI. В GNU Fortran використовується бібліотека OpenCoarrays що використовує MPI, але також може працювати поверх інших шарів паралелізації та синхронізації нижчого рівня (наприклад, GASNet), призначених для підтримки розподіленого глобального адресного простору (англ. partitioned global address space, чи PGAS)[9].

Примітки[ред. | ред. код]

  1. John Reid, Coarrays in the next Fortran Standard, April 21, 2010 (PDF). Архів оригіналу (PDF) за квітень 6, 2016. Процитовано липень 24, 2016.
  2. Robert W. Numrich: Coarray Fortran: 304—310 в енциклопедії David A. Padua: Encyclopedia of Parallel Computing. Springer 2011, ISBN 978-0-387-09765-7. Архів оригіналу за 18 серпня 2016. Процитовано 24 липня 2016.
  3. Robert W. Numrich, John Ker Reid, CoArrays: Parallel Programming in Fortran (Chapman & Hall/CRC Computational Science) 2016
  4. ISO/IEC 1539-1:2010 (Final Draft International Standard). Information technology – Programming languages – Fortran – Part 1: Base language (PDF).[недоступне посилання з лютого 2019] (Fortran 2008)
  5. Coarrays in G95. Архів оригіналу за 23 липня 2016. Процитовано 24 липня 2016.
  6. Andrew Vaught, The Complete Compendium on Cooperative Computing using Coarrays. October 29, 2008 (PDF). Архів оригіналу (PDF) за 29 вересня 2016. Процитовано 24 липня 2016.
  7. Coarray Fortran (CAF) 2.0. Архів оригіналу за 14 червня 2016. Процитовано 24 липня 2016.
  8. TS18508, Additional Parallel Features in Fortran — ISO чорновик (2013р)[недоступне посилання з травня 2019], N2074, загальнодоступний чорновик з iso.org, (2015р)
  9. Coarray* support in gfortran as specified in the Fortran 2008 standard. Архів оригіналу за 9 березня 2016. Процитовано 24 липня 2016.

Джерела[ред. | ред. код]

  • ISO/IEC JTC1/SC22. International Standard ISO/IEC 1539-1:2010(E)Information technology — Programming languages — Fortran — Part 1: Base language. ISO/IEC, Geneva, 2010.
  • John Reid, Coarrays in the next Fortran Standard (2010) ISO/IEC JTC1/SC22/WG5 N1824
  • J. Reid and R.W. Numrich, Co-arrays in the next Fortran Standard, Scientific Programming 15(1), 9-26 (2007)
  • R.W. Numrich, A Parallel Numerical Library for Co-Array Fortran, Springer Lecture Notes in Computer Science 3911, 960—969,(2005)
  • R.W. Numrich, Parallel numerical algorithms based on tensor notation and Co-Array Fortran syntax, Parallel Computing 31, 588—607 (2005)
  • R.W. Numrich and J.K. Reid, Co-Array Fortran for Parallel Programming, ACM Fortran Forum 17(2):1-31 (1998)
  • R.W. Numrich et al., Definition of the F−− Extension to Fortran 90, Lectures on Computer Science Series, Number 1366, p.292-306 (1998)
  • R.W. Numrich, J. Reid and K. Kim, Writing a Multigrid Solver Using Co-Array Fortran, Springer Lecture Notes in Computer Science 1541, 390—399 (1998)