問題タブ [cub]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cuda - CUB::DeviceScan の使用
CUDAで排他的な合計削減を試みています。私は CUB ライブラリを使用しており、CUB::DeviceReduce を試すことにしました。しかし、私の結果は NaN で、その理由がわかりません。
コードは次のとおりです。
このコードは、デバイスの結果の最後の 8 つの要素に対して NaN を返します。
このコードは、Linux Mint15 の GTX650 Ti Boost で実行されています。私は NSight を使用しており、コンソール出力のコンパイル コマンドは次のとおりです。
Cuda バージョンは 5.5 CUB バージョン 1.0.2 です
これは、Cuda 6、OSX10.9.2、CUB 1.2.3 を搭載し、GT750M を実行している別のコンピューターでテストされ、最後の 8 つの数字が NaN であるというエラーを再現しました。
編集: コードは int と double で正しく動作しますが、float では動作しません。
編集: Robert Crovella のおかげで、この質問はもともと DeviceReduce に関して尋ねられたものです。そのコードは機能し、DeviceScan を使用する以前のコードが入力として NaN を供給していたため、NaN をスローしていました。質問はそれに合わせて修正されます
c++ - CUDA を使用した残差計算
2 つのベクトル (oldvector
とnewvector
) があります。次の擬似コードで定義される残差の値を計算する必要があります。
現在、基本的に行っている 2 つの CUDA Thrust 操作でこれを計算しています。
thrust::transform_reduce
単項演算子として四角形の a が続きます。これは次のことを行っています。
これに伴う問題は、明らかに の前のグローバル メモリへの中間ストアtransform_reduce
です。これらの 2 つのステップを融合させる、この問題に対するより効率的なアプローチはありますか? 独自の CUDA カーネルを作成する以外に、他に選択肢はありますか?
私が考えた 1 つのアプローチは、thrust::reduce
with zip イテレータを記述することでした。これの問題は、演算子の戻り値の型が入力と同じ型でなければならないことです。私によると、これが意味することは、リダクション演算子が余分な追加を意味するタプルを返すということです。
リダクション CUDA カーネルを作成する場合、リダクション カーネルの CUDA 1.1 の例よりも改善されていますか?
visual-studio-2012 - カーネルから呼び出されたときに CUB DeviceScan を動作させる
現在、CUB を使用してインテグレーター コードを書き直す方法を学ぼうとしています。ドキュメントの例とコード スニペットを見てきましたが、私がやろうとしていることの例をまだ見つけていません。具体的には、マスター スレッドから呼び出された InclusiveSum を実行します。私が見たものから、すべての例はデバイスではなくホストから関数を呼び出しますが、ここで実行できることを示唆しています:
「カーネル コードからこのメソッドを呼び出すときは、必ずコンパイラのマクロ定義で CUB_CDP マクロを定義してください。」
プロジェクトのプロパティ-> Cuda Linker->コマンドラインに移動し、「-DCUB_CDP」を追加して、Visual Studio 2012にこれを追加しようとしました。それが正しいかどうかはわかりませんが、次のビルド行を取得します。
"nvcc.exe" -gencode=arch=compute_35,code=\"sm_35,compute_35\" --use-local-env --cl-version 2012 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 11.0 \VC\bin\x86_amd64" -rdc=true -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6 .0\include" -G --keep-dir x64\Debug -maxrregcount=0 --machine 64 --compile -cudart static -DCUB_CDP -g -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MT " -o "x64\Debug\Algorithm Test.cu.obj" "C:\Users...\Algorithm Test.cu"
テスト コードには、実際のコードがどのように機能するかをシミュレートするために、1 つのスレッドで実行されるテスト カーネルが含まれます。
次のエラーが表示されます。次の投稿から、このマクロ CUB_CDP の定義が私のエラーであることを示唆しています。
https://groups.google.com/forum/#!searchin/cub-users/CUB_CDP/cub-users/9ltP52Ohosg/uM9_RUy11e0J
このライブラリの使用方法を学ぶことは、物理学以外のことではなく、物理学に集中するのに本当に役立つと思うので、助けていただければ幸いです。
cuda - 1 つの CUDA コードで CUB と Thrust を使用する方法
「古い」Thrust コードに CUB を導入しようとしているので、 と比較する小さな例から始めましたthrust::reduce_by_key
。cub::DeviceReduce::ReduceByKey
両方とも に適用されthrust::device_vectors
ます。
コードのスラスト部分は問題ありませんが、thrust::raw_pointer_cast を介して取得した生のポインターを単純に使用する CUB 部分は、CUB の呼び出し後にクラッシュします。この問題を解決しようとしましたcudaDeviceSynchronize()
が、役に立ちませんでした。コードの CUB 部分は、CUB の Web ページから盗用されたものです。
OSX では、ランタイム エラーは次のとおりです。
Linux では、ランタイム エラーは次のとおりです。
cuda-memcheck の最初の数行は次のとおりです。
残念ながら、私はそれについて何をすべきかよくわかりません。
どんな助けでも大歓迎です。NVIDIA 開発者ゾーンでこれを試しましたが、応答がありませんでした。完全なサンプル コードは次のとおりです。CUDA 6.5 および cub 1.3.2 でコンパイルする必要があります。
cuda - 包括的スキャン コードが GPU よりも CPU で 2 倍速いのはなぜですか?
私は、高度に最適化された CUB ライブラリを使用する短い CUDA プログラムを作成し、古いクアッドコア Intel Q6600 プロセッサの 1 つのコア (4 つすべてが約 30 GFLOPS/秒の能力があるとされています) が包括的スキャン (または累積スキャン) を実行できることを示しました。 100,000 要素で、Nvidia 750 Ti (単精度で 1306 GFLOPS/秒の能力があると思われます) よりも高速です。これはなぜですか?
ソースコードは次のとおりです。
そして、自分のマシンで実行したときの出力は次のとおりです。
平均 GPU シミュレーション時間: 0.0011999999405816197 [sim/秒]
平均 CPU シミュレーション時間: 0.00059999997029080987 [sim/秒]
GPU/CPU タイミング:2x
また、ここに私のコンパイルフラグと出力があります: