問題タブ [cublas]
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 - ベクトル要素の削除を含む推力ベクトル変換
スラストdevice_vectorを100のチャンクに分割しました(ただし、GPUメモリ上で完全に連続しています)。コピー先の新しいdevice_vectorを再割り当てせずに、各チャンクの最後の5つの要素を削除したいと思います。
どうすればこれを正しく実装できますか?できれば、変換を保存するためにGPUメモリに新しいベクトルを割り当てないようにします。このような操作を処理するためのスラストテンプレート関数があることは理解していますが、それらをつなぎ合わせるのに問題があります。これを行うことができるThrustが提供するものはありますか?
matrix - cuBLASを使用した部分行列へのアクセス
私は次の投稿を読みました
FortranからcuBLASルーチンを呼び出すのと同じようなことをしたいと思います。
基本的に、大きな行列を3 x 3
ブロックに分割し、ループの各ステップで分割を変更します。現時点では、個々のサブブロックごとにポインターを割り当て/解放し、各ステップでデバイスとの間でマトリックスの関連部分をコピーします。それは私が排除したいと思っている多くのオーバーヘッドを生み出します。それは実行可能ですか?
cuda - 「cublas」のバージョン4をインポートすると同時に、「cudart」ライブラリのバージョン5をインポートすることはできますか?
奇妙に聞こえるかもしれませんが、CUDA4をCUDA5にアップグレードした後、自分のカーネルの実行速度は速くなりますが、cublas関数(cublasDgemmなど)の速度は遅くなります。また、cublasDgemmはバージョン5でいくつかのマグマのものを呼んでいるようです。
それで、「cublas」のバージョン4をインポートできるのに対し、「cudart」ライブラリのバージョン5をインポートできるかどうか疑問に思います。簡単な試用版として、私はコード(mycode.cc)を持っています:
試してみました:
私のシステムには「モジュール」セットアップがあり、「モジュールロードcuda4」と「モジュールロードcuda5」の両方を試しました。興味深いことに、「module load cuda4」のときにコンパイルされ、次のように報告されました。
それは私がcudartに望んでいたものではありません。さらに、「module load cuda5」を実行すると、コンパイルは完了しましたが、excutableの実行は次のように失敗しました。
提案をありがとう。
cuda - cublasSgemm / clAmdBlasSgemmルーチンを呼び出すときに、スレッド/ブロックはGPUにどのようにマッピングされますか?
行列の乗算(C = A * B)を計算するときに、cublasSgemm
/ルーチンがGPUにどのようにマッピングされるかを知りたいです。clAmdBlasSgemm
入力行列の次元を想定します::A_rows= 6144; A_cols = 12288; B_rows = 12288; B_cols = 15360;
結果の行列の次元::C_rows= 6144; C_cols = 15360;
ホストで入力マトリックスを初期化し、マトリックスデータをデバイスメモリにコピーしたと仮定します。その後、GPUで行列の乗算を行うために次のcuBlas
またはルーチンを呼び出しています。clAmdBlas
ここで、m = A_rows; およびn=B_cols;
だから私の疑問は次のとおりです:
1。)これらのルーチンはGPUでどのように実装されていますか?
2.)mとnの値は1つの計算単位(SM)にマッピングされていますか?いいえの場合、mとnの最大値は何になりますか?
3.)スレッド/ブロックを制御できますか?
performance - CUDA での実効帯域幅の測定
したがって、次の合計メモリ有効帯域幅を計算する方法を知りたいです。
その関数はどこへcublas_v2.h
この関数は 0.46 ミリ秒で実行され、ベクトルは10000 * sizeof(float)
私は持ってい((10000 * 4) / 10^9 )/0.00046 = 0.086 GB/s
ますか?
cublasSdot関数の中身が分からず、必要かどうかも分からないので気になっています。
c++ - cuda-kernel 内の cuDoubleComplex を使用した操作
cuda カーネルの実装について質問があります。
cuDoubleComplex 変数の要素を追加したい cude カーネルを生成しました。後で、要素に対していくつかの乗算も実行したいと考えています。
いくつかの方法を試しましたが、解決策が見つかりませんでした。
私の機能は次のとおりです。
私が何かをしようとするところ
ここで、newValue も cuDoubleComplex です。cublasZaxpy 関数を使用しようとしましたが、グローバル関数からホスト関数を呼び出すことは許可されていないと言われました
cuDoubleComplex 変数を使用してカーネル内で単純な追加を行うにはどうすればよいですか?
cuda - CUBLAS ライブラリ: 絶対値ではなく実際の値の最大値を見つける
NVIDIA CUDA の CUBLAS ライブラリを使用すると、絶対値が最大の要素/インデックスを見つけることができます (cublasIsamax)。CUBLASリダクション関数を使用して、実際の最大値を持つ要素/インデックスを見つけることは可能ですか?
【CUBLAS バージョン 3.2 を使用しています。】
制約の編集
: 本番サーバーの状態を変更することはできません。これは、thrust/cudpp を使用できず、古いバージョンの CUBLAS を使用したままになっていることを意味します。
cuda - CUDA 5.0: CUBIN および CUBLAS_device、コンピューティング機能 3.5
動的並列処理を使用して CUBLAS を実行するカーネルを cubin ファイルにコンパイルしようとしています。コマンドを使用してコードをコンパイルしようとすると
私は得るptxas fatal : Unresolved extern function 'cublasCreate_v2
コンパイル オプションを追加する-rdc=true
と問題なくコンパイルされますが、cuModuleLoad を使用してモジュールをロードしようとすると、エラー 500: CUDA_ERROR_NOT_FOUND が発生します。cuda.h から:
カーネルコード:
注: のスコープA
はローカルであるため、 に指定されたポインターのデータcublasIdamax_v2
は定義jp
されていないため、このコードでは多かれ少なかれランダムな値になります。それを行う正しい方法はA
、グローバルメモリに置くことです。
ホスト コード:
ホスト コードは、nvcc -lcuda test.cpp
. カーネルを単純なカーネル (以下) に置き換えて、.xml なし-rdc=true
でコンパイルすると、正常に動作します。
シンプルな作業カーネル
前もって感謝します
- ソーレン
cuda - cublas ライブラリの使い方
私はcudaの初心者です。cudaプログラムでcublasの機能を使いたいのですが、使い方の手順を知りたいです。GPU でプログラムを実行しようとすると、*"cublas_v2.h file not present"* というエラーが発生します。
cuda - CUDAで行列を転置する最も効率的な方法は何ですか?
ホストメモリマトリックスがM*N
あり、デバイスメモリにコピーするときに、マトリックスに転置する必要がありますN*M
。それを行うcuda(cuBLAS ...)APIはありますか?私はCUDA4を使用しています。ありがとう!