10

64ビットDelphiコンパイラでの浮動小数点サポートに何を期待する必要がありますか?

  • 64ビットコンパイラはSSEを使用して浮動小数点演算を実装しますか?

  • 64ビットコンパイラは現在の80ビットフローティングタイプ(拡張)をサポートしますか?

これらの質問は密接に関連しているので、私はそれらを単一の質問として尋ねます。

4

6 に答える 6

5

この件に関して 2 つの投稿を行いました (ここそこ)。要約すると、はい、64 ビット コンパイラは SSE2 (倍精度) を使用しますが、SSE (単精度) は使用しません。すべてが倍精度浮動小数点数に変換され、SSE2 を使用して計算されます (編集:ただし、それを制御するオプションがあります)

これは、倍精度浮動小数点の数学が高速である場合、単精度の数学が遅く (単精度と倍精度の間で多くの冗長な変換がスローされる)、"Extended" が "Double" にエイリアスされ、中間計算の精度が制限されることを意味します。倍精度に。

編集: SSEコード生成を制御する文書化されていない (当時の) ディレクティブがありました。

于 2011-09-06T06:40:25.097 に答える
3

Marco van de Voortの回答によると、最終的な64ビットコンパイラ用に32ビットDelphiプログラムをどのように準備すればよいですか。

x87 FPUはx64で非推奨になり、一般にSSE2がフローリングポイントに使用されます。そのため、浮動小数点とその例外処理はわずかに異なる動作をする可能性があり、拡張は80ビットではない可能性があります(ただし、64ビットまたはおそらく128ビット)。これは、異なるfpuワードを期待するCコードとのインターフェース時の通常の丸め(コプロ制御)の変更にも関連しています。

PHisはその答えについて次のようにコメントしています。

x87 FPUが非推奨になったとは言えませんが、Microsoftがそのようにするために最善を尽くすことを決定したのは確かです(そして彼らは実際には80ビットFP値を好まないようです)。 Win64でFPU/80ビットフロートを使用することは明らかに技術的に可能です。

于 2010-10-31T18:20:45.877 に答える
3

あなたの他の質問への回答を投稿しましたが、実際にはここに行くべきだと思います:

明らかに、Embarcadero 以外の誰も、製品がリリースされる前にこれに確実に答えることができません。

適切な x64 コンパイラは、SSE2 命令セットをベースラインとして使用する可能性が非常に高く、したがって、SSE 機能を使用してできるだけ多くの浮動小数点計算を実行しようとし、x87 FPU の使用を最小限に抑えます。ただし、x64 アプリケーション コードでの x87 FPU の使用を妨げる技術的な理由はないとも言えます (反対の噂が以前からありましたが、その点に関する詳細情報が必要な場合は、 Agner Fog の Calling Convention Manual、具体的には第 6.1 章「64 ビット Windows で浮動小数点レジスタを使用できますか?」を参照してください)。

編集 1 : Delphi XE2 Win64 は、実際にはそのままでは 80 ビット浮動小数点計算をサポートしていません (たとえば、ここでの議論を参照してください(ただし、そのような値を読み書きすることはできます)。この TExtendedX87 型で行われているように、レコード + クラス演算子 (ただし、注意事項が適用されます)。

于 2010-11-01T11:36:08.663 に答える
2

double =拡張ビットの場合:

ALlen BauerのTwitterアカウントKylix_rdを読む:

http://twitter.com/kylix_rd

後から考えると、SSE2レジスタは128ビットですが、2つの64ビットダブルとして使用されるためです。

于 2010-10-31T19:44:23.870 に答える
2

Embarcadero が実際に出荷するまで、64 ビット Delphi コンパイラが浮動小数点演算をどのように実装するかはわかりません。それ以前は憶測に過ぎません。しかし、確実にわかってからでは、それについて何かをするのは遅すぎます.

Allen Bauer のつぶやきは、彼らが SSE2 を使用し、拡張型が 80 ビットではなく 64 ビットに削減される可能性があることを示しているようです。さまざまな理由から、それは悪い考えだと思います。QualityCentral のレポートに自分の考えを書きまし

64 ビットの Delphi に移行するときに、コードの精度が 80 ビットから 64 ビットに低下したくない場合は、QualityCentral のリンクをクリックして、私のレポートに投票してください。票が多ければ多いほど、エンバカデロが耳を傾ける可能性が高くなります。64 ビット浮動小数点に SSE2 を使用するのは理にかなっていますが、FPU を使用して 80 ビット浮動小数点を追加することは、Embarcadero にとって余分な作業になります。多くの開発者がそれを求めない限り、彼らがその仕事をしてくれるとは思えません。

于 2011-03-17T06:45:03.470 に答える
1

本当に必要な場合は、この Embarcadero フォーラム スレッドで言及されているように、Philipp M. Schlüter ( PhiS on SO ) によるTExtendedX87 ユニットを使用できます。

@PhiS: 私の情報で回答を更新すると、私の情報は削除されます。

于 2011-09-13T15:16:19.687 に答える