Domanda

Cosa dobbiamo aspettarci dal supporto in virgola mobile a 64 bit di Delphi compilatore?

  • userà compilatore a 64 bit SSE a implementare aritmetica in virgola mobile?

  • Will compilatore a 64 bit supporta la corrente flottante 80 bit (Extended)?

Queste domande sono strettamente connesse, quindi chiedo loro come una sola domanda.

È stato utile?

Soluzione

Per il bit doppia = estesa:

di Leggi Allen Bauer account Twitter Kylix_rd:

http://twitter.com/kylix_rd

a ben vedere logico, perché mentre REGS SSE2 sono 128 bit, sono utilizzati come due doppie 64 bit.

Altri suggerimenti

Ho fatto due post sull'argomento ( qui e ci ), per riassumere, sì, il compilatore a 64 bit utilizza SSE2 (doppia precisione), ma non fa uso di SSE (singola precisione). Tutto è convertito in doppia precisione galleggianti, e calcolato utilizzando SSE2 ( Modifica tuttavia non v'è la possibilità di controllo che)

Questo significa F.I. che se matematica sui doppi galleggianti precisione è veloce, matematica sulla precisione singola è lento (molte conversioni ridondanti tra precisioni singole e doppie sono gettati in), "estesa" è alias a "doppia", e calcoli intermedi precisione è limitato a doppia precisione .

Modifica C'è stato un non documentato (al momento) la direttiva che i controlli SSE generazione di codice, {$ EXCESSPRECISION OFF} attiva SSE generazione di codice, che porta le prestazioni indietro entro le aspettative.

Secondo Marco van de Voort nella sua risposta a: Come devo preparare i miei programmi Delphi a 32 bit per un eventuale 64 bit compilatore :

  

x87 FPU è deprecato su x64, e in generale SSE2 verrà utilizzato per il punto florating. così in virgola mobile e la sua manipolazione eccezione potrebbe funzionare in maniera differente, e potrebbe non essere esteso 80-bit (ma 64-bit o, meno probabile 128 bit). Ciò riguarda anche il solito arrotondamento (copro controlwork) cambia quando si interfaccia traino con codice C che prevede un termine fpu differente.

Phis commentato che la risposta con:

  

Non direi che l'x87 FPU è deprecato, ma è certamente il caso che Microsoft ha deciso di fare del loro meglio per rendere in questo modo (e in realtà non sembrano come i valori FP 80-bit) , anche se è chiaramente tecnicamente possibile utilizzare i galleggianti FPU / 80-bit in Win64.

Ho appena pubblicato una risposta alla tua domanda di altri, ma credo che in realtà dovrebbe andare qui:

Ovviamente, nessuno tranne che per Embarcadero può rispondere a questa di sicuro prima che il prodotto viene rilasciato.

E 'molto probabile che qualsiasi compilatore x64 discreto utilizzerà il set di istruzioni SSE2 come linea di base e quindi cercare di fare tanto calcolo in virgola mobile usando SSE dispone possibile, minimizzando l'uso di FPU x87. Tuttavia, va anche detto che non v'è alcuna ragione tecnica che impedirebbe l'uso del x87 FPU nel codice dell'applicazione x64 (nonostante le voci contrarie, che sono stati in giro per un po ', se volete maggiori informazioni su questo punto, si prega di dare un'occhiata al di Agner Fog convenzione di chiamata Manuale , in particolare il capitolo 6.1 "registri in virgola mobile possono essere utilizzato in Windows a 64 bit? ").

Modifica 1 : Delphi XE2 Win64 infatti non supporta calcoli a virgola mobile 80 bit dalla scatola (vedi ad es discussuion qui (anche se permette di leggere / scrivere tali valori). si possono portare tali capacità tornare a Delphi Win64 utilizzando un record di + gli operatori di classe, come si fa in questo tipo TExtendedX87 (anche se si applicano avvertimenti).

Non lo sapremo con certezza come la Delphi compilatore a 64 bit implementerà aritmetica in virgola mobile fino a Embarcadero in realtà navi IT. Tutto ciò prima che è solo speculazione. Ma una volta che sappiamo per certo che sarà troppo tardi per fare qualcosa al riguardo.

tweet di Allen Bauer sembrano indicare che useranno SSE2 e che il tipo esteso può essere ridotto a 64 bit invece di 80 bit. Credo che sarebbe una cattiva idea, per una serie di motivi. Ho scritto il mio pensiero in un rapporto QualityCentral estesa dovrebbe rimanere un tipo 80-bit su piattaforme a 64 bit

Se non si desidera che il codice a goccia da 80-bit di precisione a 64-bit di precisione quando si sposta a 64-bit di Delphi, clicca sul link QualityCentral e votare per il mio rapporto. I voti più, più è probabile Embarcadero ascolteranno. Se lo fanno usare SSE2 per virgola mobile a 64 bit, che ha senso, quindi aggiungendo virgola mobile 80-bit usando l'FPU sarà lavoro extra per Embarcadero. Dubito che faranno che il lavoro a meno che un sacco di sviluppatori chiedono.

Se si ha realmente bisogno, quindi è possibile utilizzare il TExtendedX87 unità di Philipp M. Schlüter ( Phis su così ) come indicato nel questo thread del forum Embarcadero .

@PhiS:. Quando si aggiorna la vostra risposta con le informazioni dal mio, io tolgo il mio

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top