処理パイプラインを設計する
ステージ、バッファ、データフロー
「処理パイプラインを設計する」はCoddyKit上の無料CUDA Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCUDA Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CUDA Academyコースには全4レッスンが含まれています。
ステージで考える
実際の画像パイプラインは、読み込み、ぼかし、シャープ化、色補正、保存というステージの連鎖です。各ステージは、単独で考えられる明確な変換処理です。🧩
データは一方向に流れる
ピクセルはパイプラインを前に進みます。各ステージは前の出力を読み取り、次の入力を生成します。この一方向のデータフローにより、設計を簡単に追跡できます。
バッファで中間データを保持する
2つのステージの間には、ピクセルを一時的に置く場所が必要です。バッファは、あるカーネルが書き込み、次のカーネルが読み取るデバイス配列にすぎません。境界ごとに1つのバッファを計画します。
float* d_stage1;
cudaMalloc(&d_stage1, width * height * sizeof(float));2つのバッファをピンポンする
ステージごとに新しいバッファを用意する必要はほとんどありません。2つのバッファをピンポンします。一方から読み取り、もう一方へ書き込み、最後に入れ替えます。2つのバッファで連続するステージ全体に対応できます。
std::swap(d_in, d_out);まずはステージごとに1カーネル
まずはステージごとに1つのカーネルを用意します。最も分かりやすく、検証も簡単な設計です。それぞれが正しいことを確認した後で、ステージを融合します。
ピクセルをスレッドに割り当てる
自然な対応付けは、1ピクセルにつき1スレッドです。2Dグリッドで幅と高さをカバーし、各スレッドが処理する(x, y)位置を1つだけ担当します。
int x = blockIdx.x * blockDim.x + threadIdx.x;
int y = blockIdx.y * blockDim.y + threadIdx.y;行ピッチでインデックスを計算する
画像は行単位で格納されます。row-majorインデックスを使って(x, y)をフラットなオフセットに変換し、各スレッドが正しいピクセルを読み取れるようにします。
int idx = y * width + x;画像の境界をガードする
グリッドは切り上げて設定するため、画像の外側に出るスレッドが存在します。単純な境界チェックで、触れてはいけないメモリへのアクセスを防ぎます。
if (x >= width || y >= height) return;2Dブロック形状を選ぶ
16x16や32x8のようなブロックは、十分なカバレッジとWarpに適した行を実現します。可能であれば、画像をきれいに分割できる2Dブロック形状を選びます。
dim3 block(16, 16);
dim3 grid((width+15)/16, (height+15)/16);一度確保して何度も再利用する
デバイスメモリの確保にはコストがかかるため、ループの前に一度だけ行います。毎回mallocとfreeを繰り返すのではなく、すべてのフレームで同じバッファを再利用します。
コードを書く前に設計図を描く
まずステージとそのバッファ、ステージ間の矢印を描きます。データフローの明確な図があれば、カーネルを実行するずっと前に設計ミスを見つけられます。✏️
クイックチェック
ステージが連続する処理があります。各ステージに新しいバッファを確保しないためには、どうすればよいですか?
まとめ
バッファでつないだ一方向のステージとしてパイプラインを設計し、2Dグリッドでピクセルごとに1スレッドを割り当て、バッファをピンポンし、まず処理の流れをスケッチする方法を学びました。🎯
よくある質問
「処理パイプラインを設計する」レッスンは無料ですか?
はい。「処理パイプラインを設計する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CUDA Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CUDA Academyコースには全4レッスンが含まれています。
「処理パイプラインを設計する」で何を学びますか?
ステージ、バッファ、データフロー ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CUDA Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCUDA Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「処理パイプラインを設計する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCUDA Academyレッスンでコードを書いて実行できますか?
はい。すべてのCUDA Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。