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), розробленого в Г'юстонському університеті.
Модель програмування з допомогою комасивів була реалізована в стандарті мови Фортран за допомогою мінімізації доповнень і розширень синтаксису та мови Фортран, щоб перетворити її на ефективну мову для паралельного програмування на основі SPMD парадигми. При цьому програма копіюється в зображення фіксоване число разів. Кількість зображень не обмежена кількістю процесорів чи інших фізичних пристроїв. Конкретні реалізації можуть вибирати кількість зображень під час компіляції, чи в процесі виконання програми. Кожне зображення виконується асинхронно з застосуванням звичайних правил мови Fortran. Послідовність виконання може відрізнятися від зображення до зображення, та може бути змінена програмістом за допомогою унікального індексу зображення, що визначає ефективний і звичний для мови Фортран механізм управління та явну синхронізацію. Між синхронізаціями компілятор може вільно використовувати майже всі свої звичайні методи оптимізації.
Спільнота науковців на чолі з 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].