Twórca LLVM rozwija nowy język programowania Mojo

Chris Lattner, założyciel i główny architekt LLVM, oraz twórca języka programowania Swift, i Tim Davis, były kierownik projektów AI w Google, takich jak Tensorflow i JAX, zaprezentowali nowy język programowania Mojo, który łączy prostotę użycia w badaniach i szybkim tworzeniu prototypów z adekwatnością do tworzenia wysokowydajnych produktów końcowych. Pierwsze osiągane jest dzięki użyciu znajomej składni języka Python, a drugie dzięki możliwości kompilacji do kodu maszynowego, mechanizmom bezpiecznej obsługi pamięci oraz angażowaniu środków do przyspieszania obliczeń na poziomie sprzętowym.

Projekt koncentruje się na zastosowaniach w obszarze uczenia maszynowego, ale jest przedstawiany jako język ogólnego przeznaczenia, rozszerzający możliwości języka Python o środki programowania systemowego i nadający się do szerokiego zakresu zadań. Na przykład, język może być stosowany w takich dziedzinach jak obliczenia wysokowydajne, przetwarzanie i transformacja danych. Interesującą cechą Mojo jest możliwość używania symbolu emoji „🔥” jako rozszerzenia dla plików z kodem (na przykład „helloworld.🔥”), obok tekstowego rozszerzenia „.mojo”.

Obecnie język znajduje się w intensywnym rozwoju, a do testowania dostępny jest tylko interfejs online. Oddzielne wersje do uruchomienia na lokalnych systemach będą opublikowane później, po zebraniu opinii na temat działania interaktywnego środowiska webowego. Źródła kompilatora, JIT i innych związanych z projektem narzędzi planuje się otworzyć po zakończeniu projektowania wewnętrznej architektury (model rozwoju działającego prototypu za zamkniętymi drzwiami przypomina początkową fazę rozwoju LLVM, Clang i Swift). Ponieważ składnia Mojo opiera się na języku Python, a system typów jest bliski C/C++, w przyszłości planowane jest opracowanie narzędzi do ułatwienia przenoszenia istniejących projektów napisanych w C/C++ i Pythonie na Mojo, a także do tworzenia hybrydowych projektów łączących kod w Pythonie i Mojo.

Projekt jest zaprojektowany w celu wykorzystania dostępnych zasobów sprzętowych systemów heterogenicznych do przeprowadzania obliczeń. Na przykład, aplikacje w języku Mojo oraz równoległe obliczenia mogą wykorzystywać GPU, specjalizowane akceleratory do uczenia maszynowego oraz instrukcje procesorów wektorowych (SIMD). Przyczyną rozwoju osobnego podzbioru języka Python, zamiast pracy nad optymalizacją istniejącego CPython, jest orientacja na kompilację, integracja możliwości programowania systemowego oraz zastosowanie fundamentalnie innej wewnętrznej architektury, która pozwala na wykonywanie kodu na GPU i różnych sprzętowych akceleratorach. Programiści Mojo dążą do jak największej zgodności z CPython.

Mojo może być używany zarówno w trybie interpretacji z wykorzystaniem JIT, jak i do kompilacji do plików wykonywalnych (AOT, ahead-of-time). Kompilator wykorzystuje nowoczesne technologie automatycznej optymalizacji, cache'owania oraz rozproszonej kompilacji. Kody źródłowe w języku Mojo są transformowane do niskopoziomowego kodu pośredniego MLIR (Multi-Level Intermediate Representation), rozwijanego przez projekt LLVM i oferującego dodatkowe możliwości optymalizacji obliczeń grafu przepływu danych. Kompilator umożliwia generację kodu maszynowego przy użyciu różnych backendów wspierających MLIR.

Wykorzystanie dodatkowych mechanizmów sprzętowych do przyspieszania obliczeń pozwala na osiągnięcie wydajności, która w intensywnych obliczeniach przewyższa aplikacje napisane w C/C++. Na przykład, podczas testowania aplikacji do generacji mnożności Mandlebrota, skompilowana aplikacja w języku Mojo, uruchomiona w chmurze AWS (r7iz.metal-16xl), okazała się 6 razy szybsza od realizacji w C++ (0.03 sek. w porównaniu do 0.20 sek.), a także 35 tysięcy razy szybsza niż aplikacja w Pythonie przy użyciu standardowego CPython 3.10.9 (0.03 sek. w porównaniu do 1027 sek.) oraz 1500 razy szybsza przy użyciu PYPY (0.03 sek. w porównaniu do 46.1 sek.).

Podczas oceny wydajności w zakresie rozwiązywania zadań uczenia maszynowego, stos AI Modular Inference Engine, napisany w języku Mojo, w porównaniu z rozwiązaniem opartym na bibliotece TensorFlow, okazał się na systemie z procesorem Intel trzy razy szybszy w przetwarzaniu modelu językowego, 6,4 razy szybszy w realizacji modelu formowania rekomendacji i 2,1 razy szybszy w pracy z modelami do przetwarzania informacji wizualnych. Przy użyciu procesorów AMD przyrost wydajności w przypadku Mojo wyniósł 3,2, 5 i 2,2 razy, a przy użyciu procesorów ARM — 5,3, 7,5 i 1,7 razy, odpowiednio. Rozwiązanie oparte na PyTorch było wolniejsze od Mojo o 1,4, 1,1 i 1,5 razy na CPU Intel, o 2,1, 1,2 i 1,5 razy na CPU AMD oraz o 4, 4,3 i 1,3 razy na CPU ARM.

Twórca LLVM rozwija nowy język programowania Mojo

Język wspiera statyczne typowanie oraz narzędzia do bezpiecznej niskopoziomowej pracy z pamięcią, przypominające możliwości języka Rust, takie jak monitorowanie czasu życia odwołań i sprawdzanie pożyczania zmiennych (borrow checker). Oprócz narzędzi do bezpiecznej pracy ze wskaźnikami, w języku dostępne są również możliwości niskopoziomowej pracy, na przykład bezpośredni dostęp do pamięci w trybie unsafe z użyciem typu Pointer, wywołanie pojedynczych instrukcji SIMD lub dostęp do rozszerzeń sprzętowych, takich jak TensorCores i AMX.

Twórca LLVM rozwija nowy język programowania Mojo

Aby uprościć rozdzielenie klasycznego i zoptymalizowanego kodu Pythona dla funkcji z wyraźnym określeniem typów dla wszystkich zmiennych, zaproponowano użycie oddzielnego słowa kluczowego „fn” zamiast „def”. Podobnie, dla klas, w razie potrzeby statycznego pakowania danych w pamięci w czasie kompilacji (jak w C), zamiast „class” można użyć typu „struct”. Możliwy jest także prosty import modułów w językach C/C++, na przykład, aby zaimportować funkcję cos z biblioteki math, można określić „from „math.h” import cos”.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster