fare diverse CPU x86 (con build-in FPU e ragionevolmente recente, diciamo lanciato questo millennio) produrre esattamente lo stesso risultato per i loro galleggianti primitive Point, assumendo la stessa istruzione è disponibile sul CPU a confronto, stesso ingresso e lo stesso parametri operativi come la modalità di arrotondamento? Non mi interessano le differenze nei tempi, né nello Pentium FDIV bug (che non si qualifica solo perché quell'incidente è antico).Le operazioni FP danno ESATTAMENTE lo stesso risultato su varie CPU x86?
Suppongo che la risposta sia sì per addizione, sottrazione, negazione e round-to-integer, poiché questi hanno definizioni precise, e non riesco a immaginare quale potrebbe essere una divergenza nelle implementazioni (breve forse di un bug nel rilevamento di overflow/underflow, ma quello sarebbe un disastro in alcune applicazioni, quindi immagino che questo sarebbe stato catturato e risolto molto tempo fa).
La moltiplicazione sembra più probabile che abbia implementazioni divergenti: determinare il numero a virgola mobile a doppia precisione (a 64 bit, incluso 52 + 1 di mantissa) del prodotto di due DPFPN a volte richiede il calcolo del prodotto di la loro mantissa alla (circa) accuratezza di 104 bit, che, per i pochi LSBit, è discutibilmente uno spreco di sforzi. Mi chiedo se questo sia addirittura tentato e fatto correttamente. O forse IEEE-754, o qualche standard de facto, prescrive qualcosa?
La divisione sembra ancora più delicata.
E, a meno di un progetto comune, dubito che tutte le implementazioni di cose molto più complesse (funzioni trigonometriche, log ..) potrebbero essere esattamente sincronizzate, data la varietà di metodi matematici che possono essere utilizzati.
Lo sto chiedendo da una combinazione di pura oscurità; disponibilità a migliorare that answer of mine; e il desiderio di un metodo per (a volte) consentire a un programma in esecuzione in una VM di rilevare una mancata corrispondenza tra la CPU che finge di essere in esecuzione e quella reale.
Mentre la domanda è molto interessante (e mi piacerebbe vedere una risposta), sembra improbabile che si possa usare questo per rilevare la virtualizzazione. La maggior parte delle VM che eseguo (principalmente VMWare e KVM) hanno riportato correttamente la CPU fisica, quindi le stranezze del chipset non causerebbero una mancata corrispondenza in quel caso. – ssube
La generazione di codice ottimizzata è una cosa molto più grande di cui preoccuparsi. L'FPU è * molto * difficile da ottimizzare in modo coerente. I compilatori di grandi motivi sono passati a SSE2. –
Non sono d'accordo con i commenti ravvicinati. Sebbene la motivazione della domanda possa essere non costruttiva, la domanda reale è abbastanza valida e può essere "supportata da fatti, riferimenti o competenze specifiche". –