LLVM Creator opracowuje nowy język programowania Mojo

Chris Lattner, założyciel i główny architekt LLVM oraz twórca języka programowania Swift, a także Tim Davis, były szef projektów Google AI, takich jak Tensorflow i JAX, zaprezentowali nowy język programowania o nazwie Mojo, który łączy łatwość użytkowania w badaniach i szybkie prototypowanie z możliwością tworzenia wysokowydajnych produktów końcowych. Pierwszy z nich jest osiągany dzięki znanej składni języka Python, a drugi dzięki możliwości kompilacji do kodu maszynowego, bezpiecznym mechanizmom pamięci i akceleracji sprzętowej.

Projekt koncentruje się na rozwoju uczenia maszynowego, ale jest przedstawiany jako język ogólnego przeznaczenia, który rozszerza możliwości języka Python o narzędzia programowania systemowego i nadaje się do szerokiego zakresu zadań. Na przykład język ten jest stosowalny w takich obszarach, jak obliczenia o wysokiej wydajności, przetwarzanie i transformacja danych. Ciekawą cechą Mojo jest możliwość określenia symbolu emoji „🔥” jako rozszerzenia plików kodu (na przykład „helloworld.🔥”), oprócz rozszerzenia tekstu „.mojo”.

Obecnie język jest w fazie intensywnego rozwoju i do testowania oferowany jest tylko interfejs online. Obiecano, że oddzielne zestawy do uruchamiania w systemach lokalnych zostaną opublikowane później, po otrzymaniu opinii na temat pracy interaktywnego środowiska internetowego. Kod źródłowy kompilatora, JIT i innych powiązanych rozwiązań ma zostać otwarty po zakończeniu projektowania wewnętrznej architektury (model tworzenia działającego prototypu za zamkniętymi drzwiami przypomina początkowy etap rozwoju LLVM, Clang i Swift). Ponieważ składnia Mojo jest oparta na języku Python, a system typów jest zbliżony do C/C++, w przyszłości planują opracować zestaw narzędzi, aby uprościć tłumaczenie istniejących projektów napisanych w C/C++ i Pythonie na Mojo, a także rozwijać projekty hybrydowe łączące kod Pythona i Mojo.

Projekt ma na celu zaangażowanie zasobów sprzętowych systemów heterogenicznych w wykonywanie obliczeń. Na przykład procesory graficzne (GPU), wyspecjalizowane akceleratory do uczenia maszynowego i instrukcje procesora wektorowego (SIMD) mogą być zaangażowane w wykonywanie aplikacji w języku Mojo i paralelizację obliczeń. Skupienie się na kompilacji, integracji możliwości programowania systemu i wykorzystaniu zasadniczo odmiennej architektury wewnętrznej, która umożliwia wykonywanie kodu na procesorach graficznych i różnych akceleratorach sprzętowych, jest wymieniane jako powód opracowania osobnego podzbioru języka Python zamiast angażowania istniejącego CPython w prace optymalizacyjne. Jednocześnie twórcy Mojo zamierzają przestrzegać kompatybilności z CPython w jak największym stopniu.

Mojo może być używany zarówno w trybie interpretacji JIT, jak i do kompilacji do plików wykonywalnych (AOT, ahead-of-time). Kompilator ma wbudowane nowoczesne technologie automatycznej optymalizacji, buforowania i kompilacji rozproszonej. Teksty źródłowe w języku Mojo są konwertowane do niskopoziomowego kodu pośredniego MLIR (Multi-Level Intermediate Representation), opracowanego przez projekt LLVM i zapewniającego dodatkowe możliwości optymalizacji przetwarzania grafów przepływu danych. Kompilator pozwala na wykorzystanie różnych back-endów obsługujących MLIR do generowania kodu maszynowego.

Zastosowanie dodatkowych mechanizmów sprzętowych w celu przyspieszenia obliczeń umożliwia osiągnięcie wydajności, która w przypadku intensywnych obliczeń przewyższa aplikacje C/C++. Na przykład podczas testowania aplikacji do generowania zbioru Mandelbrota, skompilowana aplikacja w języku Mojo, uruchomiona w chmurze AWS (r7iz.metal-16xl), okazała się 6 razy szybsza od implementacji C++ (0.03 sek. w porównaniu do 0.20 sek.), a także 35 tysięcy razy szybsza od aplikacji Python przy użyciu standardowego CPython 3.10.9 (0.03 sek. w porównaniu do 1027 sek.) i 1500 razy szybsza przy użyciu PYPY (0.03 sek. w porównaniu do 46.1 sek.).

Oceniając wydajność w obszarze rozwiązywania problemów uczenia maszynowego, stos Modular Inference Engine AI napisany w języku Mojo, w porównaniu z rozwiązaniem opartym na bibliotece TensorFlow, okazał się 3 razy szybszy na systemie z procesorem Intel podczas przetwarzania modelu języka, 6.4 razy szybszy podczas wykonywania modelu rekomendacji i 2.1 razy szybszy podczas pracy z modelami do przetwarzania informacji wizualnych. Podczas korzystania z procesorów AMD zysk przy użyciu Mojo wyniósł odpowiednio 3.2, 5 i 2.2 razy, a przy użyciu procesorów ARM — 5.3, 7.5 i 1.7 razy. Rozwiązanie oparte na PyTorch pozostawało w tyle za Mojo o 1.4, 1.1 i 1.5 razy na procesorach Intel, 2.1, 1.2 i 1.5 razy na procesorach AMD i 4, 4.3 i 1.3 razy na procesorach ARM.

 LLVM Creator opracowuje nowy język programowania Mojo

Język obsługuje statyczne typowanie i funkcje bezpieczeństwa pamięci niskiego poziomu podobne do tych w Rust, takie jak śledzenie czasu życia referencji i sprawdzanie pożyczania. Oprócz funkcji bezpieczeństwa wskaźnika język zapewnia również funkcje niskiego poziomu, takie jak bezpośredni dostęp do pamięci w trybie niebezpiecznym przy użyciu typu Pointer, wywoływanie indywidualnych instrukcji SIMD lub dostęp do rozszerzeń sprzętowych, takich jak TensorCores i AMX.

 LLVM Creator opracowuje nowy język programowania Mojo

Aby uprościć rozdzielenie klasycznego i zoptymalizowanego kodu Pythona dla funkcji z jawną definicją typu dla wszystkich zmiennych, proponuje się użycie oddzielnego słowa kluczowego „fn” zamiast „def”. Podobnie w przypadku klas, jeśli podczas kompilacji wymagane jest statyczne pakowanie danych w pamięci (jak w C), można użyć typu „struct” zamiast „class”. Prosty import modułów w językach C/C++ jest również możliwy, na przykład, aby zaimportować funkcję cos z biblioteki math, można określić „from „math.h” import cos”.

Źródło: opennet.ru

Dodaj komentarz