Il y a plusieurs années, je hérité d'une base de code qui utilisait le Visual Studio (VC++) flag «/fp: rapide » pour produire un code plus rapide dans une bibliothèque de calcul lourds particulier. Malheureusement, '/ fp: fast' produisait des résultats légèrement différents de la même bibliothèque sous un autre compilateur (Borland C++). Comme nous devions produire exactement les mêmes résultats, je suis passé à '/ fp: précise', ce qui a bien fonctionné, et tout a toujours été clair. Cependant, maintenant je compile la même bibliothèque avec g ++ sur uBuntu Linux 10.04 et je vois un comportement similaire, et je me demande si cela pourrait avoir une cause similaire. Les résultats numériques de ma construction g ++ sont légèrement différents des résultats numériques de ma compilation VC++. Cela me amène à ma question:
Question:
Est-ce que g ++ ont des paramètres équivalents ou similaires aux options VC++ 'fp:: rapide' et 'précis' fp? (? Et quels sont-ils que je veux activer le 'fp: précis. Équivalent)
Plus verbeux Information:
Je Compile en utilisant make', qui appelle g ++. Pour autant que je sache (les fichiers make sont un peu énigmatiques et n'ont pas été écrits par moi), les seuls paramètres ajoutés à l'appel g ++ sont les "normaux" (inclure les dossiers et les fichiers à compiler) et -fPIC (Je ne suis pas sûr de ce que fait cet interrupteur, je ne le vois pas sur la page 'homme').
Les seuls paramètres pertinents dans 'man g ++' semblent être d'activer les options d'optimisation. (par exemple, -funsafe-math-optimizations). Cependant, je ne pense pas que j'allume quelque chose, je veux juste désactiver l'optimisation pertinente. J'ai essayé les versions Release et Debug, VC++ donne les mêmes résultats pour release et debug, et g ++ donne les mêmes résultats pour release et debug, mais je ne peux pas obtenir la version g ++ pour donner les mêmes résultats que le Version VC++.
J'ai trouvé la signification de -fPIC après un peu plus de googling: -fPIC Si supporté pour la machine cible, émette un code indépendant de la position, adapté à la liaison dynamique, même si les branches (3, n) ont besoin de grands déplacements. – Boinst
Cela peut prendre du temps, mais cela en vaut la peine: pouvez-vous essayer de définir la première instruction (ou au moins la ligne de code) où certains calculs divergent entre MSVC et gcc? –
Oui, je travaille sur votre suggestion. Malheureusement, je suis un peu sur un linux n00b, donc ça me prend un peu de temps pour tout faire ensemble! – Boinst