問題タブ [cufft]
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 - cuFFT 出力が正しくない
このプログラムに問題があります:
信号を変換してから逆を返したいのですが、前半の出力が間違っています。
エラーを見つけるのを手伝ってもらえますか?
どうもありがとうございました!
cuda - cufftGetSize1d の CUFFT_INVALID_VALUE
cufftGetSize1d
(またはいずれかのcufftGetSize*
) 関数を使用する適切な方法は何ですか?
私は試しました:
CUFFT_INVALID_VALUE
ただし、使用するサイズ、タイプ、またはバッチに関係なく、最後の呼び出しの結果は常にです。同じことが 2d および 3d バリアントにも当てはまります。cufftEstimate1d
正しく動作します。
cuda - cufft で完全な fft 係数を取得するにはどうすればよいですか?
カフトによる2次元fft処理を行っています。処理タイプは実数から複素数になるため、出力配列のサイズは NX * (NY / 2 + 1) となり、これは冗長ではありません。しかし、冗長な係数を含む完全な係数が必要です。どうすればそれらをすべて入手できますか? 前もって感謝します。
c++ - CUDA の cuFFT ライブラリと cufftPlanMany でバッチ FFT をオーバーラップすることは可能ですか?
Chromaprint として知られている音響指紋ライブラリの FFT 変換を並列化しようとしています。「元のオーディオを多くの重複するフレームに分割し、それらにフーリエ変換を適用する」ことで機能します。Chromaprint は 2/3 のオーバーラップで 4096 のフレーム サイズを使用します。たとえば、最初のフレームは要素 [0...4095] で構成され、2 番目のフレームは [1366.. 5462] のようなものになります。
cufftPlanMany を使用すると、[0... 4095]、[4096... 8192] などのバッチを実行するサイズ 4096 のバッチを指定できることがわかっています。バッチ化された変換をオーバーラップさせる方法はありますか?バッチ実行を使用しない別のアプローチを検討していますか?
python - Python マルチプロセッシングと pyfft を使用して GPU で複数の FFT を計算する: GPU メモリ リークを回避するには?
pycudaおよびpyfftパッケージを使用して、マルチ CPU およびシングル GPU計算用に次のパターンを Python で実装しようとしています。
GPU (NVIDIA CUDA を使用) を使用して FFT を実行できるように、複数のプロセス(たとえば、multiprocessing.Pool() で起動)が必要です。
ただし、次の問題があります。
あまりにも多くのプロセスを実行したり、プロセスごとにあまりにも多くの FFT を実行したりすると、スクリプト全体が停止せずに保留されたままになります(また、予定されているすべての FFT を計算することもありません)。さらなる調査から、これは GPU のメモリ制限(現在、NVIDIA GeForce GT 750M で 2048MB) が原因であると思われます。マルチプロセッシング プールが制御を取り戻すことができないようです。これを回避する方法はありますか?
各プロセスは 2048 MB 未満しか必要としないため、各プロセスが GPU の使用を予約できるキューのようなものが必要です。プロセスがコンテキストを解放すると、キュー内の次のプロセスがそれを使用し始めます。これは実行可能ですか?
あるいは、特定の時間に 1 つのプロセスだけが GPU を使用するように強制することはできますか?
これらのソリューションを個別に試しましたが、機能しません (または、正しく実装していない可能性があります)。
- proc_stream.synchronize() でストリームを同期する
- pycuda.tools.clear_context_caches() を使用して、コンテキスト キャッシュをクリアします。
- cuda.compute_mode = cuda.compute_mode.EXCLUSIVE で計算モードを変更します
注:解決策 2. はいくらかのメモリを解放するように見えますが、計算が遅くなり、問題は解決しません。たとえば、計算する fft の数を増やすと、スクリプトは同じ動作を示します。
ここにコード。簡単なタスクから始めると、ここでは各プロセスが 1 つの FFT を計算します (次に、execute() でバッチ オプションを使用して、さらに FFT を連続して実行できます)。
そしてここに関数ラッパーがあります:
ここで、nffts=16 および pool_size=4 で、スクリプトは正しく終了し、次の出力が得られます。
ただし、nffts=18 および pool_size=4 の場合、スクリプトは終了せず、次の出力が表示され、最後の行でスタックしたままになります。
助けてくれて本当にありがとうございます!
cuda - cucomplex.h を使用してカフト データを操作する
私はここに新しいです。FFT を使用していて、簡単なコードを作成する必要がありますが、うまくいきません。cufft a sin(x) で変換して元に戻す必要がありますが、変換の間に結果を 2 倍する必要があるため、逆変換で結果を元に戻すと、2*sin( を受け取ります。 x) 例えば。fftw.h では、d_signal[i] を 2 倍するだけで、引き返すと 2*sin(x) になりますが、以前は complex.h で作業していました。何か案が?ありがとう。
}
シンプルな変換コード
結果
android - Shield タブレットでの CUDA CUFFT
CUFFT を使用して、Shield Tablet の CUDA サンプルを変更しようとしました。ただし、プログラムをビルドすると、リンク エラーが発生しましたundefined reference to 'cufftExecR2C'
。undefined reference to 'cufftExecC2R'
.
.so ファイルが見つからないためにエラーが発生する可能性があると考えました。次に、次のように Android.mk ファイルに libcufft.so を追加しました。
私はまだ同じエラーが発生しました。誰でも私を助けて、正しい方向に向けてもらえますか?
どうもありがとう。
cuda - Jetson TK1 では FFT が遅くなりますか?
合成開口レーダー画像処理用の CUDA プログラムを作成しました。計算の大部分は FFT と iFFT を見つけることであり、私はそのために cuFFT ライブラリを使用しました。Jetson TK1 と GT635M (Fermi) を搭載したラップトップで CUDA コードを実行しましたが、Jetson では 3 倍遅いことがわかりました。これは、FFT に時間がかかり、Jetson の GFLOPS/s が低いためです。私が書いたカーネルの GFLOPS/s のパフォーマンスは、Jetson と Fermi GT635M の両方でほぼ同じです。Jetson で遅いのは FFT です。
私が観察したその他のプロファイラー パラメーターは次のとおりです。発行された制御フロー命令、テクスチャ キャッシュ トランザクション、ローカル メモリ ストア スループット (バイト/秒)、要求ごとのローカル メモリ ストア トランザクションは Jetson で高く、要求されたグローバル ロード スループット (バイト/秒) とグローバル ロード トランザクションは Fermi GT635M で高くなっています。
ジェットソン
GPU クロック レート: 852 Mhz
メモリ クロック レート: 924 Mhz
フェルミ GT635M
GPU クロック レート: 950 Mhz
メモリ クロック レート: 900 Mhz
どちらもほぼ同じクロック周波数を持っています。それでは、Jetson で FFT に時間がかかり、GFLOPS/s が低いのはなぜですか?
FFT のパフォーマンスを確認するために、サイズ 2048 * 4912 の行列で 1D FFT を実行する単純な CUDA プログラムを作成しました。ここのデータは連続しており、ストライドされていません。それらの所要時間と GFLOPS/秒は次のとおりです。
ジェットソン
3.251 GFLOPS/秒 持続時間: 1.393 秒
フェルミ GT635M
47.1 GFLOPS/秒 持続時間: 0.211 秒