Foram publicados os primeiros lançamentos do projeto Bend, que desenvolve uma linguagem de programação de alto nível para computação paralela, posicionando-se como uma alternativa a linguagens de baixo nível como CUDA e Metal, com uma sintaxe expressiva e capacidades que aumentam a conveniência de desenvolvimento, características de linguagens como Python e Haskell. O código do projeto é escrito em Rust e distribuído sob a licença Apache 2.0.
Entre as funcionalidades da linguagem Bend, destacam-se a rápida alocação de objetos, a capacidade de usar funções de ordem superior, closures, continuations, recursão ilimitada, correspondência de padrões, correspondências recursivas (fold) e loops (bend), tipos inteiros, de strings e de listas. Dois estilos de sintaxe são suportados — no estilo Python e no estilo Haskell. Não há necessidade de anotações de paralelização, criação explícita de threads ou gerenciamento de bloqueios nos programas. A paralelização é automática, por exemplo, ao calcular a expressão «((1 + 2) + (3 + 4))», as operações «1 + 2» e «3 + 4» são realizadas em paralelo.
Os programas escritos na linguagem Bend podem ser executados em hardware que oferece paralelismo massivo, como GPUs, apresentando um crescimento de desempenho praticamente linear em relação ao número de núcleos computacionais. O código na linguagem Bend é compilado para uma representação intermediária de baixo nível, HVM2 (Higher-order Virtual Machine 2), que é então compilada para uma representação em C e CUDA. No momento, o projeto suporta apenas execução em GPUs NVIDIA.
Em termos de desempenho, um aplicativo de teste que implementa a ordenação bitonada foi executado em 12,15 segundos em um único thread no CPU Apple M3 Max, 0,96 segundos utilizando 16 threads, e 0,21 segundos ao envolver a GPU NVIDIA RTX 4090 com 16k threads. def sort(d, s, tree): switch d: case 0: return tree case _: (x,y) = tree lft = sort(d-1, 0, x) rgt = sort(d-1, 1, y) return rots(d, s, lft, rgt) def rots(d, s, tree): switch d: case 0: return tree case _: (x,y) = tree return down(d, s, warp(d-1, s, x, y)) …
Fonte: opennet.ru
