Chapel , Cascade High Productivity Language , — параллельный язык программирования , разработанный Cray , [3] а затем Hewlett Packard Enterprise , которая приобрела Cray. Он разрабатывался как часть проекта Cray Cascade, участника программы DARPA High Productivity Computing Systems (HPCS), целью которой было повышение производительности суперкомпьютеров к 2010 году. Он разрабатывается как проект с открытым исходным кодом под лицензией Apache версии 2. [4]
Компилятор Chapel написан на C и C++ ( C++14 ). Бэкэнд (т. е. оптимизатор) — LLVM , написанный на C++. Для некоторых дополнительных компонентов, таких как тестовая система Chapel и c2chapel, инструмент для генерации привязок C для Chapel, требуется Python 3.7 или более новая версия. По умолчанию Chapel компилируется в двоичные исполняемые файлы, но он также может компилироваться в код C, и тогда LLVM не используется. Код Chapel можно скомпилировать в библиотеки, которые можно вызывать из C, Fortran или, например, Python, также поддерживается. Chapel поддерживает программирование GPU посредством генерации кода для графических процессоров NVIDIA и AMD. [5]
Chapel стремится улучшить программируемость параллельных компьютеров в целом и системы Cascade в частности, предоставляя более высокий уровень выражения, чем существующие языки программирования, и улучшая разделение между алгоритмическим выражением и деталями реализации структуры данных .
Разработчики языка стремятся, чтобы Chapel заполнил разрыв между нынешними программистами высокопроизводительных вычислений (HPC), которых они описывают как пользователей Fortran, C или C++, пишущих процедурный код с использованием таких технологий, как OpenMP и MPI , с одной стороны, и недавно окончивших вузы программистов, которые предпочитают Java, Python или Matlab, и лишь некоторые из них имеют опыт работы с C++ или C. Chapel должен предложить преимущества производительности, предлагаемые последним набором языков, не отталкивая при этом пользователей первого. [2]
Chapel поддерживает многопотоковую модель параллельного программирования на высоком уровне, поддерживая абстракции для параллелизма данных , параллелизма задач и вложенного параллелизма. Он позволяет оптимизировать локальность данных и вычислений в программе с помощью абстракций для распределения данных и размещения подвычислений на основе данных . Он допускает повторное использование кода и общность с помощью объектно-ориентированных концепций и общих функций программирования. Например, Chapel позволяет объявлять локали . [6]
Хотя Chapel заимствует концепции из многих предшествующих языков, его параллельные концепции наиболее тесно основаны на идеях из High Performance Fortran (HPF), ZPL и расширений Cray MTA для Fortran и C.