Открыть сервис

Cray Fortran Compiler

Cray Fortran Compiler — это семейство оптимизирующих компиляторов языка программирования Fortran, разработанных компанией Cray Research (впоследствии Cray Inc., ныне подразделение Hewlett Packard Enterprise) для суперкомпьютерных архитектур собственного производства. Компиляторы Cray на протяжении десятилетий служили эталоном производительности и качества генерации кода для высокопроизводительных вычислений (HPC), обеспечивая эффективное использование векторных, многопроцессорных и гибридных систем.

История

Ранние годы: Cray-1 и Cray X-MP

Первый компилятор Fortran для суперкомпьютера Cray-1 (1976) был разработан под руководством Сеймура Крея и его команды. Основной задачей являлась автоматическая векторизация циклов — ключевое новшество, позволявшее задействовать векторные регистры и конвейерные операции. Компилятор Cray Fortran (CFT) для Cray-1 поддерживал стандарт Fortran 66 с расширениями, включая директивы для управления векторизацией. В 1982 году с выходом Cray X-MP появилась версия CFT 1.15, которая впервые реализовала поддержку многопроцессорности (автоматическое распараллеливание циклов).

Эра Cray Y-MP и Cray-2

В 1988 году для Cray Y-MP был выпущен компилятор CFT77, полностью совместимый с Fortran 77. Он включал улучшенный анализатор зависимостей, позволявший векторизовать сложные циклы с условными переходами. Для Cray-2 (1985) разрабатывалась отдельная версия CFT2, учитывавшая особенности локальной памяти процессоров. В этот период компилятор Cray считался одним из самых агрессивно оптимизирующих: он мог автоматически преобразовывать рекуррентные последовательности в векторные операции.

Переход к Cray T3D и T3E

С появлением массово-параллельных архитектур (Cray T3D, 1993; Cray T3E, 1995) компилятор был переработан для поддержки модели распределённой памяти с использованием MPI (Message Passing Interface). Версия Cray Fortran 90 (CF90) реализовала стандарт Fortran 90, включая модули, массивы-секции и рекурсию. Для T3E был создан компилятор Cray Fortran 95 (CF95) с поддержкой операций над массивами (array intrinsics) и автоматической векторизацией для векторных блоков процессоров Alpha.

Современные системы: Cray XT, XE, XK и EX

С 2000-х годов, после приобретения Cray компанией Tera Computer (2000) и последующей реструктуризации, компилятор стал частью пакета Cray Compiler Environment (CCE). Для систем на базе процессоров AMD Opteron (Cray XT3, 2004) и Intel Xeon (Cray XE6, 2010) компилятор был адаптирован под архитектуру x86-64. В 2012 году для Cray XK7 (с ускорителями NVIDIA Tesla) была добавлена поддержка гибридных вычислений: компилятор автоматически генерировал код для GPU через OpenACC и CUDA Fortran. В 2019 году, после поглощения Cray компанией Hewlett Packard Enterprise, компилятор вошёл в состав HPE Cray Compiler Environment, поддерживающего системы HPE Cray EX (Shasta).

Архитектура и оптимизации

Векторизация

Основной особенностью Cray Fortran Compiler является способность автоматически векторизовать циклы без явных директив программиста. Компилятор анализирует зависимости данных, определяет возможность конвейерной обработки и генерирует код, использующий векторные регистры (например, AVX-512 на современных процессорах Intel). Для старых архитектур Cray (Cray-1, Cray X-MP) векторизация была обязательной, так как скалярные операции выполнялись медленно.

Распараллеливание

Компилятор поддерживает автоматическое распараллеливание циклов (autoparallelization) с использованием OpenMP и MPI. В версиях для Cray T3D/T3E была реализована модель «односторонних коммуникаций» (SHMEM), позволяющая эффективно обмениваться данными между процессорами. Для гибридных систем (Cray XK, XC) добавлена поддержка OpenACC 2.0 и CUDA Fortran.

Оптимизация памяти

Cray Fortran Compiler включает анализатор локальности данных, который переупорядочивает обращения к памяти для минимизации кэш-промахов. Для систем с неоднородным доступом к памяти (NUMA) компилятор автоматически распределяет данные по узлам, используя директивы !$OMP TARGET и !$ACC DATA.

Директивы и расширения

Компилятор поддерживает широкий набор директив (pragmas), позволяющих программисту управлять оптимизациями:

  • !DIR$ VECTOR — принудительная векторизация цикла.
  • !DIR$ NOVECTOR — отключение векторизации.
  • !DIR$ PREFER VECTOR — указание приоритета векторизации над распараллеливанием.
  • !DIR$ CONCURRENT — указание на независимость итераций цикла.
  • !DIR$ ALIGN — выравнивание данных для векторных инструкций.

Версии и совместимость

Основные версии

  • CFT (1976–1985) — для Cray-1 и Cray X-MP, Fortran 66.
  • CFT77 (1988–1995) — для Cray Y-MP, Cray-2, Cray C90, Fortran 77.
  • CF90 (1995–2000) — для Cray T3D, T3E, Fortran 90.
  • CF95 (2000–2005) — для Cray T3E, Fortran 95.
  • CCE (с 2005) — единый компилятор для всех систем Cray, поддерживает Fortran 2003, Fortran 2008, частично Fortran 2018.

Совместимость с другими компиляторами

Cray Fortran Compiler совместим с GNU Fortran и Intel Fortran на уровне синтаксиса, но генерирует более оптимизированный код для архитектур Cray. Для систем x86-64 компилятор использует бэкенд LLVM (с 2015 года), что обеспечивает поддержку современных стандартов и интеграцию с инструментами отладки (CrayPat, Cray Apprentice2).

Применение

Научные вычисления

Cray Fortran Compiler используется в климатическом моделировании (например, модели CESM, WRF), аэродинамике (CFD-коды, такие как OpenFOAM), квантовой химии (Gaussian, NWChem) и физике плазмы (GENE). Благодаря высокой эффективности векторизации, на суперкомпьютерах Cray достигается производительность до 80% от пиковой для вычислительно интенсивных задач.

Промышленность

В нефтегазовом секторе компилятор применяется для сейсмической обработки (например, код RTM), в автомобилестроении — для краш-тестов (LS-DYNA), в аэрокосмической отрасли — для моделирования турбулентности.

Образование и исследования

Многие университеты и национальные лаборатории (например, Ок-Риджская национальная лаборатория, Национальный центр атмосферных исследований) используют Cray Fortran Compiler для обучения параллельному программированию и оптимизации кода.

Критика и ограничения

Сложность настройки

Автоматические оптимизации Cray Fortran Compiler часто требуют тонкой настройки директив, особенно для гибридных систем. Некорректное использование директив может привести к неверным результатам (например, при нарушении зависимостей данных).

Зависимость от архитектуры

Код, оптимизированный для Cray, может плохо переноситься на другие платформы (например, на кластеры с процессорами ARM или RISC-V). Для переносимости рекомендуется использовать стандартные конструкции Fortran и OpenMP.

Стоимость

Компилятор Cray является проприетарным и поставляется только с аппаратным обеспечением HPE Cray. Для сторонних систем доступна только версия CCE для Linux x86-64, но с ограниченной функциональностью (без поддержки SHMEM и некоторых оптимизаций).

Интересные факты

  • Первый компилятор Cray Fortran был написан на ассемблере Cray-1 и занимал всего 8 КБ памяти.
  • В 1980-х годах компилятор Cray использовался для расчёта траекторий полёта космических шаттлов NASA.
  • В 2019 году компилятор Cray Fortran был включён в состав пакета HPE Cray Programming Environment, который также поддерживает C, C++ и Python.

Источники

  • Cray Research. «Cray Fortran Compiler Reference Manual». Cray Research, Inc., 1985.
  • HPE. «Cray Compiler Environment User’s Guide». Hewlett Packard Enterprise, 2023.
  • Bailey, D. H. «The Cray Fortran Compiler: A Historical Perspective». International Journal of High Performance Computing Applications, 2004.
  • Levesque, J. M. «Automatic Vectorization in Cray Fortran». Proceedings of the IEEE, 1987.
  • «Cray Fortran Compiler Documentation». HPE Support Portal, 2024.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →