Mojo Academy · レッスン

コンピュートカーネルの構造

処理の中心となる、負荷の高い内側のループを学びます

レッスン 1/413 ステップ

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

カーネルとは何か

計算カーネルとは、2つの配列を要素ごとに加算するような、実際の数値計算を行う小さく特化されたルーチンです。

ホットな内側のループ

カーネルの実行時間の大部分は、1つの簡潔な内側のループに集中します。そのループを高速化すれば、プログラム全体も高速化できます。

for i in range(n):
    out[i] = a[i] + b[i]

入力と出力

適切に設計されたカーネルは、データバッファーをパラメーターとして受け取るため、渡されたどの配列に対しても同じルーチンを実行できます。

fn add(a: UnsafePointer[Float32], b: UnsafePointer[Float32], out: UnsafePointer[Float32], n: Int):
    pass

厳密さにはfnを使う

カーネルはdefではなくfnで記述します。厳密で型付きのスタイルにより、Mojoは予期しない動作のない簡潔なマシンコードにコンパイルできます。

fn kernel(n: Int):
    pass

本体を小さく保つ

最も高速なカーネルは、1つのことだけを行います。短く予測しやすい内側の本体は、コンパイラが積極的に最適化しやすい形です。

内部で予期しない処理をしない

ホットループ内での割り当てやI/Oなど、負荷の大きい処理は避けてください。最大のスループットを得るには、各反復を安価で均一にする必要があります。

処理量を数える

総演算数で考えてみましょう。n個の要素に対するカーネルは、およそn単位の処理を行うため、コストはnによって決まります。

メモリが制限要因になる

多くのカーネルは計算性能ではなくメモリによって制限されます。データ待ちが発生するため、バイト列をどう移動するかが最も重要になることがよくあります。

ベクトル化を見据えて設計する

後から各ステップでSIMDを使って複数の要素を処理できるように、ループを設計しましょう。規則的なアクセスパターンならベクトル化が容易になります。

小さなSaxpyカーネル

典型的なカーネルにsaxpyがあります。これはout = scale times a plus bという処理です。小さく規則的で、最適化のベースラインとして最適です。

for i in range(n):
    out[i] = scale * a[i] + b[i]

調整の前に測定する

まずは、単純で正しいバージョンを作って時間を測定しましょう。その数値が、その後のすべての最適化におけるベースラインになります。

クイックチェック

これからカーネルを最適化します。実行時間のほとんどはどこで費やされているでしょうか。

まとめ

カーネルとは、簡潔な内側のループで処理を行う小さなfnです。処理を均一に保ち、メモリを意識し、まずベースラインを測定しましょう。🔧

無料で開始

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

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

コース
30
レッスン
120

よくある質問

「コンピュートカーネルの構造」レッスンは無料ですか?

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

「コンピュートカーネルの構造」で何を学びますか?

処理の中心となる、負荷の高い内側のループを学びます ブラウザで直接実行するハンズオンコードでMojo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「コンピュートカーネルの構造」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. コンピュートカーネルの構造
  2. SIMDとループの組み合わせ
  3. メモリトラフィックの削減
  4. キャッシュ局所性のためのタイリング
← Mojo Academyに戻る