Mojo Academy · レッスン

Mojoでホットパスを書き直す

fnとSIMDでボトルネックを置き換えます

レッスン 2/413 ステップ

「Mojoでホットパスを書き直す」はCoddyKit上の無料Mojo Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMojo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Mojo Academyコースには全4レッスンが含まれています。

ホットパスを移植する

その遅いPythonループを、Mojoで作り直します。同じロジックを維持しながら、型付きのコンパイル済みコードによって本当のパフォーマンスを得られます。🔧

fnを使う

カーネルは def ではなくfn関数として記述します。必須の型情報により、コンパイラーはホットループ向けの効率的なマシンコードを生成できます。

fn sum_squares(data: List[Float64]) -> Float64:
    var total: Float64 = 0.0
    return total

すべての型を注釈する

各値に具体的な型を指定します。動的な推測が不要になるため、MojoはCと同じように算術演算を最適化できます。

var total: Float64 = 0.0
var n: Int = len(data)

ループ本体を移植する

内側の計算を、一度に1ステップずつ移します。最適化を始める前に結果がPythonと完全に一致するよう、同じ演算を維持してください。

for i in range(len(data)):
    total += data[i] * data[i]

まず正しさを検証する

同じ入力でMojo版を実行して比較します。高速でも間違った答えでは意味がないため、速度よりも正しさを優先します。

SIMDを導入する

正しく動作することを確認したら、ベクトル化します。SIMD値には複数の数値をまとめて格納できるため、1つの命令で多数の要素を同時に処理できます。

alias width = 4
var acc = SIMD[DType.float64, width](0)

ベクトル単位で処理する

SIMDの幅と同じ数のグループに分けてデータを処理します。各パスで、1つの要素ではなくチャンク全体を処理します。

for i in range(0, n, width):
    var chunk = data.load[width](i)
    acc += chunk * chunk

ベクトルをリダクションする

ループの後で、reduceを使ってSIMDアキュムレーターを1つの数値にまとめます。これにより、すべてのレーンが1つの合計値に集約されます。

var total = acc.reduce_add()

末尾を処理する

長さが幅の倍数でない場合、いくつかの要素が残ります。小さな末尾ループでそれらを加算し、要素が失われないようにします。

for i in range(n - (n % width), n):
    total += data[i] * data[i]

結果を再確認する

ベクトル化した出力を、もう一度Pythonのベースラインと比較します。結果が一致すれば、SIMDへの書き換えでも計算の正しさが保たれていると確認できます。

新しいカーネルの時間を計る

同じデータでMojoカーネルを計測します。シングルスレッドでも、型付きでベクトル化されたカーネルは通常、Pythonのループを大幅に上回ります。

クイックチェック

Mojoでホットパスを書き換える正しい順序を選んでみましょう。

まとめ

ループを型付きのfnに移植し、正しさを検証してから、SIMDでベクトル化し、末尾も処理しました。これでホットパスは高速なMojoコードになりました。🎯

無料で開始

AI チューターと学ぶ Mojo — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「Mojoでホットパスを書き直す」レッスンは無料ですか?

はい。「Mojoでホットパスを書き直す」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Mojo Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Mojo Academyコースには全4レッスンが含まれています。

「Mojoでホットパスを書き直す」で何を学びますか?

fnとSIMDでボトルネックを置き換えます ブラウザで直接実行するハンズオンコードでMojo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Mojo Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのMojo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「Mojoでホットパスを書き直す」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このMojo Academyレッスンでコードを書いて実行できますか?

はい。すべてのMojo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Pythonベースラインのプロファイリング
  2. Mojoでホットパスを書き直す
  3. コアの並列化とチューニング
  4. 高速化したプロジェクトのリリース
← Mojo Academyに戻る