問題タブ [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.

0 投票する
1 に答える
482 参照

cuda - エラー: 外部呼び出しはサポートされていません (cublasGetVersion_v2 へのインライン化されていない呼び出しが見つかりました)

cublasIdamax() の呼び出しを使用しようとしていますが、タイトルのような同様のエラーが発生しました。そこで、cublas のバージョンを確認するための簡単なコードを作成し、関数の署名のバージョン ミスを回避します。しかし、この単純なコードでもコンパイル エラーが発生します。

これが私のコードです:

3 行目に次のエラーがあります: 外部呼び出しはサポートされていません (cublasGetVersion_v2 へのインライン呼び出しが見つかりません)

私が間違っていることは何ですか?

PS .: このトピックを見ました https://devtalk.nvidia.com/default/topic/500814/external-calls-are-not-supported-found-non-inlined-call-to-meminit-/ しかし、私はまだ問題があります。

0 投票する
1 に答える
1506 参照

cuda - cublasSetMatrix と cublasSetVector の代わりに cudaMemCpy を使用する

cudaMalloc/cudaMemcpy を使用してデバイスに行列とベクトルを割り当てるアプリケーションを作成しました。行列は列優先で定義されます。cublas ライブラリ (cublasSgemv) の関数を使用して、これらを乗算したいと思います。cublas API 関数を使用するには、cudaMalloc を使用して行列とベクトルの複製を割り当て、cublasSetMatrix/cublasSetVector を使用してホストからそれらを初期化する必要があるようです。明らかに、このメモリをすべて複製するとコストがかかります。

私の理解では、cublasSetMatrix/cublasSetVector 関数は cudaMemCpy の単なるラッパーです。cudaMemCpy で初期化された配列へのポインターを cublas API 関数に渡すことができるかどうか疑問に思っていました。または、API が認識できるように配列を軽くラップして、すべてのメモリの重複を回避することは可能ですか?

0 投票する
1 に答える
1055 参照

c - cublasStrsmBatched - 実行に失敗しました

CUBLAS_STATUS_EXECUTION_FAILED (13) の出力がなければ、cublasStrsmBatched (113 行目) を実行できません。簡単にするために、すべての行列値とアルファは 1.0 で、すべての行列は正方形で、lda、ldb、m、n は等しいです。エラーなしで同じ方法で cublasSgemmBatched と cublasStrsm を実行できます。cublasStrsmBatched は同じはずですが、そうではありません。このコードで何が間違っているのかについて何か考えがあるかどうか教えてください:

Linux、CUDA 5.5、T10 および Windows、CUDA 5.5、GTX285 を使用

ありがとう!

0 投票する
1 に答える
291 参照

c++ - cublas デバイス API が奇妙な結果を出力する

皆さん: 最近、cuda 5.5 の最新のプロパティ、つまり動的並列処理をプログラムに利用しようと試みました。しかし、私はいくつかの非常に紛らわしい問題を抱えています。私のコードはここにあります:



構成パラメータを <<<1, 1>>> に設定すると、すべてがうまく機能します。出力は次のようになります。

位置 1 にある d_A の最初の 10 個の要素は次のとおりです。

0.840188 0.394383 0.783099 0.798440 0.911647 0.197551 0.335223 0.768230 0.277775 0.553970

位置 2 の d_A の最初の 10 個の要素は次のとおりです。

0.840188 0.394383 0.783099 0.798440 0.911647 0.197551 0.335223 0.768230 0.277775 0.553970

ただし、構成パラメーターを <<<32768, 128>>> に設定すると、出力はかなり奇妙になります。出力は次のようになります。

位置 1 にある d_A の最初の 10 個の要素は次のとおりです。

-0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

位置 2 の d_A の最初の 10 個の要素は次のとおりです。

0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

なぜなのか本当にわかりません!私のコードは、「サンプル」に少し変更を加えたものです。


そして、最後のコード「cublasDestroy(cnpHandle);」を削除するだけで、正常になります。出力は次のとおりです。

位置 1 にある d_A の最初の 10 個の要素は次のとおりです。

0.840188 0.394383 0.783099 0.798440 0.911647 0.197551 0.335223 0.768230 0.277775 0.553970

位置 2 の d_A の最初の 10 個の要素は次のとおりです。

0.840188 0.394383 0.783099 0.798440 0.911647 0.197551 0.335223 0.768230 0.277775 0.553970


誰かが同じ問題を抱えていましたか?

ありがとう!

0 投票する
1 に答える
1282 参照

cuda - CUDA 動的並列化; デバイスからのストリーム同期

基本的に、デバイス内からストリームを同期する方法を探しています。ストリームを使用して同時に実行したいカーネルの実行をシリアル化するため、cudaDeviceSynchronize() の使用は避けたいです。

より詳細な説明: 安定化された双共役勾配ソルバーであるカーネルを作成しました。ストリームを使用して、このカーネルを異なるデータで同時に起動したいと考えています。

このカーネルは cublas 関数を使用します。それらはカーネル内から呼び出されます。

ソルバーが必要とする操作の 1 つは、2 つのベクトルの内積の計算です。これは cublasdot() で行うことができます。ただし、この呼び出しは同期的であるため、異なるストリームでのカーネルの実行はシリアル化されます。内積関数を呼び出す代わりに、非同期で呼び出される cublasspmv() を使用して内積を計算します。問題は、結果が計算される前にこの関数が返されることです。したがって、デバイスからストリームを同期したい - cudaStreamSynchronize() と同等のものを探していますが、デバイスから呼び出すことができます。

関数が戻る前に結果が計算されるようにするにはどうすればよいですか? もちろん、cudaDeviceSynchronize() の挿入は機能しますが、前述したように、カーネルの実行をストリーム間でシリアル化します。

0 投票する
3 に答える
1612 参照

cuda - 列メジャーで行列から行をコピーする cuda 関数はありますか?

列の主要な順序で次元 MxN のデバイス マトリックス U があります。ここで、行 K をベクトル u に抽出したいと思います。これを実現する機能はありますか?コピーでは、K のオフセットと M のストライドを考慮する必要があることに注意してください。

関数cudaMemcpy2Dを見ていましたが、より多くの LAPACK スタイルの API から来て、ベルを鳴らしません。これらのピッチ パラメータが何であるか理解できません。単に行と列、または M と N と呼ばれないのはなぜですか?