stringtranslate.com

Футарк (язык программирования)

Futhark — это многопарадигмальный , высокоуровневый , функциональный язык программирования с параллельными данными и массивами . Это диалект языка ML , первоначально разработанный на факультете компьютерных наук UCPH (DIKU) в рамках проекта HIPERFIT. [2] Основное внимание уделяется обеспечению возможности выполнения параллельных программ, написанных в функциональном стиле, с высокой производительностью на аппаратном обеспечении с массовым параллелизмом , особенно на графических процессорах (GPU). Futhark сильно вдохновлен NESL , и его реализация использует вариант сглаживающего преобразования , но накладывает ограничения на то, как может быть выражен параллелизм, чтобы обеспечить более агрессивную оптимизацию компилятора. В частности, не поддерживается нерегулярный параллелизм вложенных данных. [3] Это бесплатное программное обеспечение с открытым исходным кодом, распространяемое по лицензии ISC .

Обзор

Futhark — это язык семейства ML с нечувствительным к отступам синтаксисом, полученным из OCaml , Standard ML и Haskell . Система типов основана на системе типов Хиндли-Милнера с различными расширениями, такими как типы уникальности и типы, зависящие от размера . Futhark не задуман как язык программирования общего назначения для написания полноценных приложений, а вместо этого ориентирован на написание вычислительных ядер (не всегда таких же, как ядро ​​графического процессора ), которые затем вызываются из приложений, написанных на обычных языках. [4]

Футарк назван в честь первых шести букв рунического алфавита . [5] : 2 

Примеры

Скалярное произведение

Следующая программа вычисляет скалярное произведение двух векторов, содержащих числа двойной точности.

def dotprod xs ys = f64 . сумма ( map2 ( * ) xs ys ))         

Его также можно эквивалентно записать с явными аннотациями типов следующим образом.

def dotprod [ n ] ( xs : [ n ] f64 ) ( ys : [ n ] f64 ) : f64 = f64 . сумма ( map2 ( * ) xs ys ))              

Это делает типы, зависящие от размера, явными: эту функцию можно вызвать только с двумя массивами одинакового размера, и средство проверки типов отклонит любую программу, в которой это не может быть определено статически.

Умножение матрицы

Следующая программа выполняет умножение матриц , используя приведенное выше определение скалярного произведения.

def matmul [ n ][ m ][ p ] ( A : [ n ][ m ] f64 ) ( B : [ m ][ p ] f64 ) : [ n ][ p ] f64 = карта ( \ A_row -> карта ( \ B_col -> dotprod A_row B_col ) ( транспонировать B )) A                     

Это показывает, как типы обеспечивают вызов функции только с матрицами совместимого размера. Кроме того, это пример вложенного параллелизма данных .

Рекомендации

  1. ^ «Лицензия». futhark-lang.org . Проверено 26 марта 2023 г. Разработано в DIKU
  2. ^ «Дом». hiperfit.dk .
  3. ^ Хенриксен, Троэльс; Серуп, Нильс Г.В.; Элсман, Мартин; Хенглейн, Фриц; Оанча, Космин (2017). «Футарк: чисто функциональное программирование на графическом процессоре с вложенным параллелизмом и обновлением массива на месте» (PDF) . Материалы 38-й конференции ACM SIGPLAN по проектированию и реализации языков программирования . PLDI 2017. ACM.
  4. ^ "Руководство пользователя Футарка" . futhark.readthedocs.io .
  5. ^ Троэлс, Хенриксен (ноябрь 2017 г.). Проектирование и реализация языка программирования Футарк (PDF) (кандидатская диссертация). Копенгагенский университет . Проверено 25 мая 2024 г.