Background:Esiste un equivalente g ++ (Linux) per i flag/fp: preciso e/fp: fast utilizzati in Visual Studio?
Molti anni fa, ho ereditato una base di codice che stava usando Visual Studio (VC++) flag '/ fp: fast' per produrre codice più veloce in una particolare libreria di calcolo-pesante. Sfortunatamente, '/ fp: fast' ha prodotto risultati leggermente diversi dalla stessa libreria con un compilatore diverso (Borland C++). Dato che dovevamo produrre esattamente gli stessi risultati, passai a '/ fp: preciso', che funzionava bene, e da allora tutto è stato peachy. Comunque, ora sto compilando la stessa libreria con g ++ su uBuntu Linux 10.04 e sto vedendo un comportamento simile, e mi chiedo se potrebbe avere una causa alla radice simile. I risultati numerici della mia build g ++ sono leggermente diversi dai risultati numerici della mia build VC++. Questo mi porta alla mia domanda:
Domanda:
Fa g ++ avere parametri equivalenti o simili a quelle del 'FP: veloce' e 'fp: precise' opzioni in VC++? (? E quali sono essi che voglio attivare il 'fp: preciso'. Equivalente)
più prolisso informazioni:
compilo usando 'make', che chiama g ++. Per quanto posso dire (i file make sono un po 'criptici e non sono stati scritti da me) gli unici parametri aggiunti alla chiamata g ++ sono quelli "normali" (include cartelle e file da compilare) e -fPIC (Non sono sicuro di cosa funzioni questo interruttore, non lo vedo nella pagina 'man').
Gli unici parametri rilevanti in "man g ++" sembrano essere quelli di attivare le opzioni di ottimizzazione. (ad esempio -funsafe-math-optimizations). Tuttavia, non penso di attivare nulla, voglio solo disattivare l'ottimizzazione pertinente.
Ho provato versioni di debug e di rilascio, VC++ fornisce gli stessi risultati per rilascio e debug e g ++ fornisce gli stessi risultati per rilascio e debug, ma non riesco a ottenere la versione g ++ per ottenere gli stessi risultati del Versione VC++.
Ho trovato il significato di -fPIC dopo un po 'più googling: -fPIC Se supportato per la macchina di destinazione, emette codice indipendente dalla posizione, adatto per il collegamento dinamico, anche se i rami (3, n) necessitano di grandi spostamenti. – Boinst
Questo potrebbe richiedere molto tempo, ma vale la pena: puoi provare e puntare con precisione le prime istruzioni (o almeno la riga di codice) dove alcuni calcoli divergono tra MSVC e gcc? –
Sì, sto lavorando al tuo suggerimento. Sfortunatamente, sono un po 'su un Linux n00b, quindi mi ci vorrà un po' di tempo per mettere insieme tutto! – Boinst