コンピュートカーネルの構造
処理の中心となる、負荷の高い内側のループを学びます
「コンピュートカーネルの構造」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- コンピュートカーネルの構造
- SIMDとループの組み合わせ
- メモリトラフィックの削減
- キャッシュ局所性のためのタイリング