CUDA Academy · レッスン

Thrust のベクターと変換

GPU 上の STL 形式の並列処理

レッスン 2/413 ステップ

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

GPU向けのSTL

ThrustはC++ STLのように扱える高水準ライブラリですが、GPU上で動作します。カーネルコードを自分で記述する必要はほとんどありません。🎉

2種類のベクター

Thrustには、CPUメモリ用のhost_vectorとGPUメモリ用のdevice_vectorがあります。見た目は同じですが、異なる領域に存在します。

thrust::host_vector<int> h(100);
thrust::device_vector<int> d(100);

境界を越えてコピーする

host_vectorをdevice_vectorに代入すると、メモリ転送が自動的に実行されます。cudaMemcpyの定型コードを手作業で書く必要はありません。

thrust::device_vector<int> d = h; // host to device

確保は自動的に行われる

device_vectorはRAIIを使ってGPUメモリを確保および解放します。スコープを外れると、メモリは適切に解放されます。

FillとSequence

thrust::fillやthrust::sequenceなどのヘルパーを使うと、手動ループの代わりに、1回の並列呼び出しでdevice_vector全体を初期化できます。

thrust::sequence(d.begin(), d.end()); // 0,1,2,...

Transformで要素ごとに変換する

thrust::transformはすべての要素に関数を並列適用し、結果を出力範囲に書き込みます。これは典型的なmapパターンです。

thrust::transform(d.begin(), d.end(),
  out.begin(), op);

ファンクターが処理を表す

渡す処理はファンクターです。__host__ __device__が付いたoperator()を持つ構造体で、GPU上でも実行できます。

struct Square { __host__ __device__
  float operator()(float x){ return x*x; } };

組み込みの演算子

一般的な計算向けに、Thrustにはthrust::plusやthrust::multipliesなどのファンクターが用意されています。単純な処理のためにファンクターを自作する必要はありません。

thrust::transform(a.begin(), a.end(),
  b.begin(), c.begin(), thrust::plus<float>());

2つの入力から1つの出力へ

transformの2入力形式は2つの入力範囲を受け取り、要素ごとに組み合わせます。ベクターの要素ごとの加算に最適です。

生のポインタを取得する

手書きのカーネルに移行する必要がありますか。thrust::raw_pointer_castを使うと、渡すことのできる基になるデバイスポインタを取得できます。

float* p = thrust::raw_pointer_cast(d.data());

コードを減らし、バグを減らす

Thrustはメモリの確保、コピー、起動設定を隠蔽します。制御性を少し譲る代わりに、読みやすく安全なGPUコードを、すぐ動く形で記述できます。

クイックチェック

Thrustがベクター全体に処理を適用する方法を思い出しましょう。

まとめ

device_vectorでメモリ管理を自動化し、代入でデータを転送して、ファンクターを使ってtransformを実行しました。STLスタイルのGPU処理です。💪

無料で開始

AI チューターと学ぶ C++ — 無料

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

コース
30
レッスン
120

よくある質問

「Thrust のベクターと変換」レッスンは無料ですか?

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

「Thrust のベクターと変換」で何を学びますか?

GPU 上の STL 形式の並列処理 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Thrust のベクターと変換」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. cuBLAS GEMM を正しく使う
  2. Thrust のベクターと変換
  3. Thrust の Reduce、Scan、Sort
  4. ディープラーニングのための cuDNN
← CUDA Academyに戻る