CUDA は倍精度浮動小数点数をサポートしていますか?
また、同じ理由は何ですか?
GPU の計算能力が 1.3の場合、倍精度を実行できます。ただし、1.3 ハードウェアには MP ごとに 1 つの倍精度 FP ユニットしかなく、その MP 上のすべてのスレッドで共有する必要がありますが、8 つの単精度 FPU があるため、アクティブなスレッドごとに独自の単精度 FPU があることに注意してください。言い換えれば、倍精度では単精度よりも 8 倍悪いパフォーマンスになる可能性があります。
ヒントとして:
倍精度を使用する場合は、GPU アーキテクチャをsm_13
(GPU がサポートしている場合) に設定する必要があります。
そうしないと、すべての double が float に変換され、警告のみが表示されます (faya の投稿に見られるように)。(これが原因でエラーが発生すると非常に面倒です :-) )
フラグは次のとおりです。-arch=sm_13
Paul Rのコメントに続いて、Compute Capability 2.0デバイス(別名Fermi)は、単精度の半分のパフォーマンスで、倍精度のサポートが大幅に改善されました。
このFermiホワイトペーパーには、新しいデバイスの2倍のパフォーマンスに関する詳細が記載されています。
他の人が述べたように、古い CUDA カードはこのタイプをサポートしていませんdouble
。ただし、古い GPU が提供する精度よりも高い精度が必要な場合は、 double-double手法に似たfloat-floatソリューションを使用できます。そのテクニックの詳細については、こちらをお読みください
もちろん、最近の GPU ではdouble-doubleを使用して doubleよりも大きな精度を達成することもできます。PowerPCdouble-double
でも使用されますlong double