web-dev-qa-db-ja.com

フロートとダブルパフォーマンス

私はいくつかのタイミングテストを行い、 this one (最後のコメント)などの記事も読みました。リリースビルドでは、floatとdoubleの値は同じ処理時間を要します。

これはどのように可能ですか? double値に比べてfloatの精度が低く、小さい場合、CLRが同じ処理時間でdoubleを取得する方法を教えてください。

88
Joan Venge

X86プロセッサでは、少なくともfloatdoubleは、処理のためにFPUによってそれぞれ10バイトの実数に変換されます。 FPUには、サポートするさまざまな浮動小数点型用の個別の処理ユニットはありません。

floatdoubleよりも速いという昔からのアドバイスは、ほとんどのCPUにFPUが内蔵されていなかった(そして、FPUチップが個別になかった人はほとんどいなかった)100年前に適用されたため、ポイント操作はソフトウェアで行われました。これらのマシン(溶岩ピットで生成されたSteamを使用)では、floatsを使用する方がwasより高速です。 floatsの唯一の本当の利点は、使用するスペースが少ないことです(数百万個ある場合にのみ重要です)。

146
P Daddy

CUDAを使用した小さなプロジェクトがありましたが、floatの方が2倍よりも高速だったことを覚えています。一度、ホストとデバイス間のトラフィックが低い(ホストはCPUであり、「通常」RAMであり、デバイスはGPUであり、対応するRAMがある) 。しかし、データが常にデバイス上にあるとしても、それは遅くなります。これは最近変更されたか、次世代で変更されるはずであるとどこかで読んだと思いますが、わかりません。

そのため、GPUは単純に倍精度をネイティブに処理できない場合があり、GLDoubleではなくGLFloatが通常使用される理由も説明できます。

(私が言ったように、それは覚えている限りで、CPUでfloatとdoubleを検索しているときにこれにつまずいただけです。)

14
Mene

ただし、フロートが優先される場合がいくつかあります。たとえば、OpenGLコーディングでは、GLDoubleよりもほとんどのGPUでより効率的であるため、GLFloatデータ型(一般に16ビットフロートに直接マップされる)を使用することがはるかに一般的です。

11
Cruachan