Thrust のベクターと変換
GPU 上の STL 形式の並列処理
「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フィードバックを取得できます。ローカル設定は不要です。