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

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

visual-c++ - CUFFT-パディング/初期化の質問

畳み込みFFTの例(大規模カーネルの場合)のNvidia SDKを見ていますが、フーリエ変換とそのFFT実装(少なくとも基本)の背後にある理論は知っていますが、次のコードが何をするのか理解できません。

私はこれまでCUFFTライブラリを使用したことがないので、snapTransformSizeが何をするのかわかりません

(ここにコードがあります)

また、複素平面がそのように初期化される理由もありません。

説明リンクや回答を教えていただけますか?

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

cuda - CUFFTのパフォーマンスの計算

複数のGPUに分割されたチャンク(N * N / p)でCUFFTを実行していますが、パフォーマンスの計算について質問があります。まず、私がそれをどのように行っているかについて少し:

  1. N * N/pチャンクを各GPUに送信します
  2. pGPUの各行のバッチ1-DFFT
  3. N * N/pチャンクをホストに戻す-データセット全体で転置を実行する
  4. 同上ステップ1
  5. 同上ステップ2

Gflops = ( 1e-9 * 5 * N * N *lg(N*N) ) / execution time

実行時間は次のように計算されます。

execution time = Sum(memcpyHtoD + kernel + memcpyDtoH times for row and col FFT for each GPU)

これは、複数のGPUでCUFFTのパフォーマンスを評価する正しい方法ですか?FFTのパフォーマンスを表す他の方法はありますか?

ありがとう。

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

c - cufft は結果にランダム データを追加しています

cufft ライブラリを正しく使用できるようにするための簡単なプログラムを作成しました。「1」のバッチサイズを実行すると、期待どおりの結果が得られます。ただし、バッチ サイズを大きくすると、データ バッファーの末尾にランダムなバイトのように見えるものが表示されます。バッチ サイズが 2 の場合、最後の 3 つのエントリはノイズです。バッチ サイズが 3 の場合、バッファの最後の 6 つのエントリと、バッチ内の 3 つの変換の 2 番目の結果であるはずの最後の 3 つのエントリにノイズが発生します。

バッチ内の 2 番目の変換の結果の最後にある不良データの例:

7.680291 1.411589← 良いデータ
7.748493 1.062853
7.797380 0.710554
7.826757 0.355854
-436781318144.000000 -436781318144.000000← 悪い結果の始まり ←
5349828096.000000 5000401408.000000
5511789568.000000 4813803008.000000
5664713728.000000 4619900416.000000
出力の終わり

コード:

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

cuda - CUFFT:ピッチポインタのfftを計算するには?

CUFFT を使用して画像の fft を計算しようとしています。CUFFT は、で割り当てられた単純なデバイス ポインターの fft のみを提供しているようですcudaMalloc

私の入力画像は を使用して割り当てられcudaMallocPitchますが、画像ポインターのピッチを処理するオプションはありません。

現在、行の配置を削除してから fft を実行し、結果をピッチ付きポインターにコピーする必要があります。私の現在のコードは次のとおりです。

正しい結果が得られますが、関数内で2つの余分なメモリ割り当てとコピーを行いたくありません。私はこのようなことをしたい:

質問:

CUFFTを使用して直接ピッチポインタのfftを計算する方法は?

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

cuda - 倍精度の CUFFT

CUDAs FFT ライブラリでいくつかの問題が発生しています。

入力を cuDoubleComplex として宣言しましたが、コンパイラは、この型が cufftComplex 型のパラメーターと互換性がないというエラーを返します。インターネットで検索したところ、cufft.h という行が含まれているファイルが見つかりましたtypedef cuComplex cufftComplex;。私の問題は、ライブラリ cuComplex.h では、cuComplex が単一の浮動小数点精度 ( typedef cuFloatComplex cuComplex;) を持っていることは明らかですが、倍精度が必要なことです。

これは可能ですか?

特に、私は以下を取得します。

この行で:

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

matlab - cuFFT による逆 FFT のスケーリング

cuFFT を使用してプログラムで得られた値をプロットし、その結果を Matlab の結果と比較すると、同じ形状のグラフが得られ、最大値と最小値が同じポイントになります。ただし、cuFFT によって得られる値は、Matlab から得られる値よりもはるかに大きくなります。Matlabコードは

同じ入力を持つ CUDA コードは次のようになります。

cuFFT は1024、バッチ サイズ のポイント FFTも実行し2ます。

の倍率でNX=1024は、値が正しくなりません。何をすべきか教えてください。

0 投票する
2 に答える
3080 参照

cuda - CUFFT エラー処理

CUFFT エラー処理に次のマクロを使用しています。

このマクロは、エラー コードからメッセージ文字列を返しません。本「CUDA プログラミング: GPU を使用した並列計算の開発者ガイド」では、次のマクロの使用が提案されています。

(注: 機能を変更せずに多少カスタマイズされています)。この本には、「この手法は、カーネルの呼び出しを除くすべての CUDA 呼び出しで機能します」と書かれています。ただし、CUDA_CALLCUFFT ルーチン呼び出しで使用すると、コンパイラは次を返します。

それはそう思われ、すぐには互換性がありませんcufftResultcudaError_t

このNVIDIA CUDA ライブラリリンクからもう少し調査すると、入力タイプcudaGetErrorStringが必要なようです。cudaError_t

私の質問は次のとおりです。

  1. CUFFT ルーチンで使用し、エラー コードからメッセージ文字列を受信できるようにcufftResultcudaError_t互換性を持たせる方法はありますか?CUDA_CALL
  2. CUFFT ライブラリに別のエラーを実装する技術的な理由はありますか? :-)

ありがとう。

ロバート・クロベラの回答に従って編集

CufftSafeCall ルーチンを次のように変更しました。

}

エラータイプの文字列も返すようにします。

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

cuda - GPU で FFTW を実行する場合と CUFFT を使用する場合の比較

次のような基本的な C++ FFTW 実装があります。

for ループで N fft を実行しています。FFTW で一度に多くのプランを実行できることはわかっていますが、私の実装ではループごとに inoutが異なります。ポイントは、FFTWパイプライン全体をforループの内側で実行していることです。

これを高速化するために CUDA の使用に移行したいと考えています。CUDA には独自の FFT ライブラリ CUFFT があることを理解しています。構文は非常に似ています:オンラインドキュメントから:

ただし、これらの「カーネル」(Nvida が呼ぶように) (cufftPlan3d、cufftExecC2C など) のそれぞれは、GPU との間の呼び出しです。CUDA 構造を正しく理解していれば、これらの各メソッド呼び出しは個別に並列化された操作です。

GPU で各 FFT ステップを実行することにより、コードがどのように高速化されるかを理解しています。しかし、for ループ全体を並列化したい場合はどうすればよいでしょうか。元の N for ループのそれぞれで FFTW パイプライン全体を GPU で実行したい場合はどうすればよいですか? カスタム「カーネル」を作成して、デバイス (GPU) から FFTW メソッドを呼び出すことはできますか?