Futhark es un lenguaje de programación de matrices , funcional , de alto nivel y multiparadigma , paralelismo de datos . Es un dialecto del lenguaje ML , desarrollado originalmente en el Departamento de Ciencias de la Computación de la UCPH (DIKU) como parte del proyecto HIPERFIT. [ 2 ] Se centra en permitir que los programas de paralelismo de datos escritos en un estilo funcional se ejecuten con alto rendimiento en hardware masivamente paralelo , especialmente en unidades de procesamiento gráfico (GPU). Futhark está fuertemente inspirado en NESL , y su implementación utiliza una variante de la transformación de aplanamiento , pero impone restricciones sobre cómo se puede expresar el paralelismo para permitir optimizaciones de compilador más agresivas. En particular, no admite el paralelismo de datos anidado irregular. [ 3 ] Es software libre y de código abierto publicado bajo una licencia ISC .
Descripción general
Futhark es un lenguaje de la familia ML , con una sintaxis insensible a la indentación derivada de OCaml , Standard ML y Haskell . El sistema de tipos se basa en un sistema de tipos Hindley-Milner con diversas extensiones, como tipos de unicidad y tipos dependientes del tamaño . Futhark no está pensado como un lenguaje de programación de propósito general para escribir aplicaciones completas, sino que se centra en la escritura de núcleos de cómputo (no siempre iguales a un núcleo de GPU ) que luego se invocan desde aplicaciones escritas en lenguajes convencionales. [ 4 ]
El futhark recibe su nombre de las primeras seis letras del alfabeto rúnico . [ 5 ] : 2
Ejemplos
producto escalar
El siguiente programa calcula el producto escalar de dos vectores que contienen números de doble precisión.
def dotprod xs ys = f64 . sum ( map2 ( * ) xs ys ))También se puede escribir de forma equivalente con anotaciones de tipo explícitas de la siguiente manera.
def dotprod [ n ] ( xs : [ n ] f64 ) ( ys : [ n ] f64 ) : f64 = f64 . sum ( map2 ( * ) xs ys ))Esto hace explícitos los tipos que dependen del tamaño: esta función solo se puede invocar con dos matrices del mismo tamaño, y el verificador de tipos rechazará cualquier programa en el que esto no se pueda determinar estáticamente.
multiplicación de matrices
El siguiente programa realiza una multiplicación de matrices , utilizando la definición de producto escalar descrita anteriormente.
def matmul [ n ][ m ][ p ] ( A : [ n ][ m ] f64 ) ( B : [ m ][ p ] f64 ) : [ n ][ p ] f64 = map ( \ A_row -> map ( \ B_col -> dotprod A_row B_col ) ( transpose B )) AEsto demuestra cómo los tipos garantizan que la función solo se invoque con matrices de tamaño compatible. Además, es un ejemplo de paralelismo de datos anidado .
Referencias
- ↑ "Licencia" . futhark-lang.org . Consultado el 26 de marzo de 2023.
Desarrollado en
DIKU
. - ↑ "Inicio" . hiperfit.dk .
- ↑ Henriksen, Troels; Serup, Niels GW; Elsman, Martin; Henglein, Fritz; Oancea, Cosmin (2017). "Futhark: Programación GPU puramente funcional con paralelismo anidado y actualizaciones de matrices in situ" (PDF) . Actas de la 38.ª Conferencia ACM SIGPLAN sobre diseño e implementación de lenguajes de programación . PLDI 2017. ACM.
- ↑ "Guía del usuario de Futhark" . futhark.readthedocs.io .
- ↑ Troels, Henriksen (noviembre de 2017). Diseño e implementación del lenguaje de programación Futhark (PDF) (tesis doctoral). Universidad de Copenhague . Recuperado el 25 de mayo de 2024 .
- Lenguajes de programación
- Lenguajes de programación de alto nivel
- Lenguajes funcionales
- Computación paralela
- lenguajes de programación de matrices
- Lenguajes con tipado dependiente
- Programación con tipos dependientes
- Lenguajes de programación de tipado estático
- Familia de lenguajes de programación ML
- Compiladores libres y de código abierto
- Software de 2014
- Lenguajes de programación creados en 2014
- Software que utiliza la licencia ISC.