0Pricing
CUDA Academy · レッスン

処理パイプラインを設計する

ステージ、バッファ、データフロー

「処理パイプラインを設計する」は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フィードバックを取得できます。ローカル設定は不要です。

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

  1. 処理パイプラインを設計する
  2. フィルターを 1 つのカーネルに融合する
  3. 大きな画像向けにタイルをストリーミングする
  4. プロファイル、最適化、出荷
← CUDA Academyに戻る