Mojoでホットパスを書き直す
fnとSIMDでボトルネックを置き換えます
「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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Pythonベースラインのプロファイリング
- Mojoでホットパスを書き直す
- コアの並列化とチューニング
- 高速化したプロジェクトのリリース