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, oraz Tim Davis, były szef projektów Google AI, takich jak Tensorflow i JAX, wprowadzili nowy język programowania Mojo, który łączy w sobie łatwość użycia do celów rozwoju badań i szybkie prototypowanie z możliwością opracowania produktów końcowych o wysokiej wydajności. Pierwszy osiąga się poprzez zastosowanie znanej składni języka Python, a drugi poprzez możliwość kompilacji do kodu maszynowego, mechanizmów bezpiecznych dla pamięci oraz wykorzystanie narzędzi akceleracji sprzętowej.

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

Obecnie język jest w fazie intensywnego rozwoju i do testów oferowany jest jedynie interfejs online. Obiecuje się, że osobne zestawy do działania na systemach lokalnych zostaną opublikowane później, po otrzymaniu opinii na temat działania interaktywnego środowiska sieciowego. Otwarcie kodu źródłowego kompilatora, JIT i innych rozwiązań związanych z projektem planowane jest po ukończeniu architektury wewnętrznej (model opracowania działającego prototypu za zamkniętymi drzwiami przypomina początkowy etap rozwoju LLVM, Clang i Szybki). Ponieważ składnia Mojo opiera się na języku Python, a system typów jest zbliżony do C/C++, w przyszłości planują opracować narzędzia upraszczające tłumaczenie istniejących projektów napisanych w C/C++ i Pythonie na Mojo, a także do tworzenia projektów hybrydowych łączących kod Python i Mojo.

Projekt ma na celu wykorzystanie dostępnych zasobów sprzętowych systemów heterogenicznych w wykonywaniu obliczeń. Na przykład procesory graficzne, wyspecjalizowane akceleratory uczenia maszynowego i wektory instrukcji procesora (SIMD) mogą służyć do uruchamiania aplikacji Mojo i równoległości obliczeń. Powody, dla których warto opracować odrębny podzbiór języka Python, zamiast przyłączać się do istniejących prac optymalizacyjnych CPython, obejmują skupienie się na kompilacji, integracji możliwości programowania systemowego oraz zastosowaniu zasadniczo odmiennej architektury wewnętrznej, która umożliwia uruchamianie kodu na procesorach graficznych i różnych akceleratory sprzętowe. Jednak programiści Mojo zamierzają zachować jak największą kompatybilność z CPythonem.

Mojo można używać zarówno w trybie interpretacji przy użyciu JIT, jak i do kompilacji do plików wykonywalnych (AOT, z wyprzedzeniem). Kompilator posiada wbudowane nowoczesne technologie automatycznej optymalizacji, buforowania i kompilacji rozproszonej. Teksty źródłowe w języku Mojo są konwertowane na niskopoziomowy kod pośredni MLIR (Multi-Level Intermediate Representation), opracowany w ramach projektu LLVM i zapewniający dodatkowe możliwości optymalizacji przetwarzania wykresu przepływu danych. Kompilator pozwala na użycie różnych backendów obsługujących MLIR do generowania kodu maszynowego.

Zastosowanie dodatkowych mechanizmów sprzętowych przyspieszających obliczenia pozwala na osiągnięcie wydajności przewyższającej aplikacje C/C++ podczas intensywnych obliczeń. Przykładowo, podczas testowania aplikacji generującej zbiór Mandelbrota, skompilowana aplikacja w języku Mojo przy wykonaniu w chmurze AWS (r7iz.metal-16xl) okazała się 6 razy szybsza niż implementacja w C++ (0.03 sek. vs. 0.20 sek.), a także 35 tysięcy razy szybciej niż aplikacja w Pythonie przy użyciu standardowego CPython 3.10.9 (0.03 sek. vs. 1027 sek.) i 1500 razy szybciej przy użyciu PYPY (0.03 sek. vs. 46.1 sek.) .

Oceniając wydajność w zakresie rozwiązywania problemów uczenia maszynowego, modułowy silnik wnioskowania AI Stack napisany w języku Mojo w porównaniu do rozwiązania opartego o bibliotekę TensorFlow był 3 razy szybszy przy przetwarzaniu modelu językowego w systemie z procesor Intel, 6.4 razy szybszy przy przetwarzaniu wykonania modelu generowania rekomendacji i 2.1 razy szybszy podczas pracy z modelami do przetwarzania informacji wizualnej. W przypadku procesorów AMD przyrosty w przypadku Mojo były 3.2, 5 i 2.2 razy, a w przypadku procesorów ARM - odpowiednio 5.3, 7.5 i 1.7 razy. Rozwiązanie oparte na PyTorch pozostawało w tyle za Mojo 1.4, 1.1 i 1.5 razy na procesorach Intel, 2.1, 1.2 i 1.5 razy na procesorach AMD oraz 4, 4.3 i 1.3 razy na procesorach ARM.

LLVM Creator opracowuje nowy język programowania Mojo

Język obsługuje pisanie statyczne i funkcje oszczędzające pamięć niskiego poziomu, przypominające Rusta, takie jak śledzenie okresu istnienia referencji i sprawdzanie wypożyczeń. Oprócz udogodnień umożliwiających bezpieczną pracę ze wskaźnikami, język zapewnia także funkcje do pracy na niskim poziomie, na przykład bezpośredni dostęp do pamięci w trybie niebezpiecznym przy użyciu typu Pointer, wywoływanie indywidualnych instrukcji SIMD czy dostęp do rozszerzeń sprzętowych, takich jak TensorCores i AMX .

LLVM Creator opracowuje nowy język programowania Mojo

Aby uprościć oddzielenie klasycznego i zoptymalizowanego kodu Pythona dla funkcji z jawnymi definicjami typów dla wszystkich zmiennych, proponuje się użycie osobnego słowa kluczowego „fn” zamiast „def”. Podobnie w przypadku klas, jeśli podczas kompilacji chcesz statycznie spakować dane do pamięci (jak w C), możesz użyć typu „struct” zamiast „class”. Możliwe jest również proste importowanie modułów w językach C/C++, na przykład, aby zaimportować funkcję cos z biblioteki matematycznej, możesz określić „z „math.h” import cos”.

Źródło: opennet.ru

Dodaj komentarz