LLVM Creator が新しい Mojo プログラミング言語を開発

LLVM の創設者兼チーフアーキテクトであり、Swift プログラミング言語の作成者である Chris Lattner 氏と、Tensorflow や JAX などの Google AI プロジェクトの元責任者である Tim Davis 氏は、研究開発とラピッド プロトタイピングの使いやすさを兼ね備えた新しい Mojo プログラミング言語を紹介しました。高性能最終製品への適合性。 XNUMX つ目は、Python 言語の使い慣れた構文の使用によって実現され、XNUMX つ目は、マシン コードにコンパイルする機能、安全なメモリ管理のメカニズム、および計算のハードウェア アクセラレーションのためのツールの使用によって実現されます。

このプロジェクトは機械学習開発での使用に焦点を当てていますが、Python 言語の機能をシステム プログラミングで拡張し、幅広いタスクに適した汎用言語として提示されています。 たとえば、この言語は、ハイ パフォーマンス コンピューティング、データ処理、変換などの分野に適用できます。 Mojo の興味深い機能は、テキスト拡張子「.mojo」に加えて、コード ファイルの拡張子 (「helloworld.🔥」など) として絵文字記号「🔥」を指定できることです。

現在、この言語は集中的に開発中であり、オンライン インターフェイスのみがテスト用に提供されています。 ローカル システム上で実行する個別のアセンブリは、対話型 Web 環境の動作に関するフィードバックを受け取った後、後で公開されることが約束されています。 コンパイラ、JIT、およびプロジェクトに関連するその他の開発のソース コードは、内部アーキテクチャの設計が完了した後に公開される予定です (非公開で動作するプロトタイプの開発モデルは、LLVM、Clang の開発の初期段階に似ています)そしてスウィフト)。 Mojo の構文は Python に基づいており、型システムは C/C++ に近いため、将来的には、C/C++ および Python で書かれた既存のプロジェクトの Mojo への変換を容易にするツールキットを開発する計画があります。 Python コードと Mojo を組み合わせたハイブリッド プロジェクト。

このプロジェクトは、システム内で利用可能な異種システムのハードウェア リソースを計算に組み込むように設計されています。 たとえば、GPU、特殊な機械学習アクセラレータ、ベクトル処理命令 (SIMD) を使用して、Mojo アプリケーションを実行し、計算を並列化できます。 既存の CPython の最適化作業に参加するのではなく、Python 言語の別のサブセットを開発する理由は、コンパイルの焦点、システム プログラミング機能の統合、およびコードの実行を可能にする根本的に異なる内部アーキテクチャの使用として挙げられています。 GPU およびさまざまなハードウェア アクセラレータで実行されます。 同時に、Mojo の開発者は CPython との互換性を可能な限り維持するつもりです。

Mojo は、JIT 解釈モードと実行可能ファイルへのコンパイル (AOT、事前) の両方で使用できます。 コンパイラーには、自動最適化、キャッシュ、分散コンパイルのための最新テクノロジーが組み込まれています。 Mojo 言語のソース テキストは、LLVM プロジェクトによって開発された低レベル中間コード MLIR (Multi-Level Intermediate Representation) に変換され、データ フロー グラフの処理を最適化するための追加機能を提供します。 コンパイラーを使用すると、MLIR をサポートするさまざまなバックエンドを使用してマシンコードを生成できます。

追加のハードウェア メカニズムを使用して計算を高速化すると、集中的な計算で C / C ++ アプリケーションを超えるパフォーマンスを達成することが可能になります。 たとえば、マンデルブロ集合を生成するアプリケーションをテストする場合、コンパイルされた Mojo アプリケーションを AWS クラウド (r7iz.metal-16xl) で実行すると、C++ 実装より 6 倍高速になりました (0.03 秒対 0.20 秒)。 .)、また、ストック CPython 35 を使用した Python アプリケーションよりも 3.10.9 倍高速 (0.03 秒対 1027 秒)、PYPY を使用した場合は 1500 倍高速です (0.03 秒対 46.1 秒)。

機械学習の問題を解決する分野のパフォーマンスを評価した場合、Mojo 言語で書かれた Modular Inference Engine AI スタックは、TensorFlow ライブラリに基づくソリューションと比較して、Intel を搭載したシステムで 3 倍高速であることが判明しました。言語モデルを処理する場合は 6.4 倍、推奨生成モデルを実行する場合は 2.1 倍、視覚情報を処理するモデルを操作する場合は 3.2 倍高速になります。 AMD プロセッサを使用した場合、Mojo を使用した場合のゲインは 5 倍、2.2 倍、5.3 倍であり、ARM プロセッサを使用した場合はそれぞれ 7.5 倍、1.7 倍、1.4 倍でした。 PyTorch ベースのソリューションは、Intel CPU で 1.1、1.5、2.1 倍、AMD CPU で 1.2、1.5、4 倍、ARM CPU で 4.3、1.3、XNUMX 倍、Mojo よりも遅れをとりました。

LLVM Creator が新しい Mojo プログラミング言語を開発

この言語は、静的型付けと、参照存続期間追跡や変数借用チェッカー (借用チェッカー) などの Rust 機能を彷彿とさせる低レベルのメモリセーフ機能をサポートしています。 ポインターを使用した安全な操作の手段に加えて、この言語は低レベルの作業のための機能も提供します。たとえば、ポインター型を使用して非安全モードでメモリに直接アクセスしたり、個々の SIMD 命令を呼び出したり、ハードウェア拡張機能にアクセスしたりできます。 TensorCore と AMX として。

LLVM Creator が新しい Mojo プログラミング言語を開発

すべての変数の明示的な型定義を持つ関数の古典的な Python コードと最適化された Python コードの分離を簡素化するために、「def」の代わりに別のキーワード「fn」を使用することが提案されています。 クラスについても同様に、(C のように) コンパイル時にメモリにデータを静的にパックする必要がある場合は、「class」の代わりに「struct」型を使用できます。 C/C++言語でモジュールを単純にインポートすることも可能で、例えば数学ライブラリからcos関数をインポートする場合は、「from "math.h" import cos」と指定することができます。

出所: オープンネット.ru

コメントを追加します