Est-il possible d'augmenter la précision de l'arithmétique en virgule flottante avec gcc?

StackOverflow https://stackoverflow.com/questions/3774067

  •  04-10-2019
  •  | 
  •  

Question

certains programmes en C qui ne extensives calculs à virgule flottante obtenir des résultats bons sur une boîte de linux pc, mais des résultats erronés sur la SPE du processeur cellulaire, mais pas sur le PPU de la cellule. J'utilise compilateurs gcc. Je me demande s'il y a une option de compilation gcc pour augmenter méthode d'arrondi ou similaire si je reçois des calculs de précision à flotteur unique avec plus de précision. Je ne peux pas changer de doubler, comme sur la performance de SPE drastique réduire

Merci

Était-ce utile?

La solution

Basé sur IBM documentation pour les différences de IEEE 754 sur SPU, il pourrait être un certain nombre de choses:

  
      
  • Résultats zéro à partir des opérations arithmétiques sont toujours +0, -0 jamais.
  •   
  • entrées dénormalisés 2-149 à 2-126 pour des opérations arithmétiques sont traités   zéro avec le même signe. Arithmétique   opérations ne produisent jamais denormal   résultats, mais produisent +0 la place.
  •   
  • Les opérations arithmétiques ne prennent pas en charge IEEE Inf ou NaN. Ces modèles de bits   représenter des nombres valides. Débordement   produisent des résultats de l'ampleur maximale   valeur de signe approprié.
  •   
  • Les opérations arithmétiques utilisent uniquement le cycle à zéro (chop, troncature)   mode d'arrondi, quelle que soit la   Le réglage du mode d'arrondi dans la   Virgule flottante Statut et contrôle   Registre (FPSCR), qui ne touche que   arithmétique double précision   opérations.
  •   

Bien sûr, sur une page connexe, vous pouvez aussi compiler le code SPU pour IEEE stricte conformité :

  

Par défaut, XL C / C ++ suit la plupart, mais   pas toutes les règles de l'IEEE   la norme. Si vous compilez le   l'option -qnostrict, qui est activé par défaut au niveau d'optimisation ou -O3   plus, certaines règles à virgule flottante IEEE   sont violés de manière qui peuvent améliorer   performance, mais pourrait affecter le programme   exactitude. Pour éviter ce problème, et   pour établir la conformité stricte avec   la norme IEEE, procédez comme suit:

     
      
  • Utilisez les -qfloat = nomaf option du compilateur.
  •   
  • Si le programme change le mode d'arrondi à l'exécution, utilisez la -qfloat = RRM   option.
  •   
  • Si le code de données ou programme contient des valeurs de signalisation NaN (SIAA), utilisez la   -qfloat = Nans option. (Nan A est différent d'un calme NaN, vous   doit coder explicitement dans la   programme ou des données ou créer en utilisant   l'option du compilateur -qinitauto.)
  •   
  • Si vous compilez avec -O3, -O4 ou -O5, ajoutez l'option -qstrict après.
  •   
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top