経験則はないと思います!
その理由は、主に、検討しているシステムと解決しようとしている問題の両方が非常に広い範囲にわたって変化するため、さまざまです。
問題ベースの側面
FFTを実行したいとおっしゃっていますが、それは常に実際に実行したいことの半分です。
FFTをabs²に変換し、カラーにマッピングして、画面に表示する必要がありますか?GPUでそれを実行してください。fosphorは、対応するPC / GPUの組み合わせで簡単な200MS / sでそれを行います。
その場合、FFTのサイズは重要ではありません。データはGPUでさらに処理されるため、そこでFFTを実行します。
一方、FFTの個々の要素の多くのチェックに依存する何かをCPUで実行したい場合がありますか?おそらく1つのFFTだけで、それ以上はありませんか?
その場合、理論上のスループットはまったく役に立ちません。データがCPUキャッシュから取り出されてコヒーレントメモリに戻るのを待つだけで、GPUにDMAで転送され、FFTが開始されます(途中で割り込み/コンテキストスイッチが無駄になる可能性があります)。完了するまで待つと、GPUがデータをメインメモリにDMA転送し、CPUのキャッシュにデータを取り込みました。中規模のFFTの場合でも料金はかかりません。
したがって、この「高レイテンシの数学アクセラレータビジネス」全体が実際に報われるのは、待つ間に賢明なことができる場合だけです。できない場合は、レイテンシが大幅に低下します。
システムベースの側面
ここではあまり詳しく説明しませんが、
- DSPシステムは、CPUまたはメモリ帯域幅が制限されています
- GPU操作がCPU制限に役立つが、メモリインターフェースに追加のデータ移動負荷がかかるが、実際にはシステムの残りの部分はメモリ帯域幅が制限されている場合、あなたは自分自身を傷つけています。
- 同じことが他の方法にも当てはまります。たぶん、アルゴリズム(特定のサイズでのFFT)はCPUに制限がありますが、GPUアクセラレーションは追加の割り込みを引き起こします
- CPUが非常にうまく実行できるFFTサイズとは何ですか?これはおそらく、L1キャッシュとL2キャッシュのサイズによって定義されます。Xeonの数値処理CPUには数十メガバイトありますが、Jetson NVidia SoCで実行されているARMにはありません。
- グラフィックカードが得意なFFTサイズはどれくらいですか?カード間での並列スレッドの数、柔軟性、およびメモリ帯域幅には大きな違いがあります。
- 「良い」という指標は何ですか?スループットとレイテンシの奇妙な比率だけでなく、おそらくエネルギーもあり、適切な種類のリソースを他の作業のために無料のままにしますか?
- CPU <->メインメモリインターフェイスは何ですか?2GHz近くで動作するクアッドチャネルDDR4インターフェイスですか、それともシングルチャネルDDRですか?
- GPU <-> GPUメモリインターフェイスとは何ですか?
- GPU <->メインメモリインターフェイスは何ですか?
- CPU <-> GPU通信は、特定のユースケースでどの程度うまく機能しますか?
- たとえば、同じPCIeスイッチが高速システムに出入りするデータのフローを処理する必要があるため、たとえば、PCIeバスに高い負荷がありますか(たとえば、ストレージですが、10ギガビットイーサネットまたはビデオデータ) ?
したがって、答えはおそらく満足できるものではありませんが、実際には次のとおりです。
単精度FFTの場合、64ビンより上のどこか、2 20ビンより下のどこか。場合によります。