J'essaie d'obtenir que GCC (ou clang) utilise de manière cohérente l'instruction SSE pour sqrt au lieu de la fonction de bibliothèque mathématique pour une application scientifique intensive. J'ai essayé une variété de GCC sur différents systèmes OS X et Linux 32 et 64 bits. Je m'assure d'activer sse avec -mfpmath = sse (et -march = core2 pour satisfaire l'exigence de GCC d'utiliser -mfpmath = sse sur 32 bits). J'utilise aussi -O3. Selon la version GCC ou clang, l'assembly généré n'utilise pas systématiquement les sqrtss de SSE. Dans certaines versions de GCC, tous les sqrts utilisent l'instruction. Dans d'autres, il existe une utilisation mixte de sqrtss et l'appel de la fonction de bibliothèque mathématique. Est-il possible de donner un indice ou de forcer le compilateur à utiliser uniquement l'instruction SSE?Assurez-vous que le compilateur utilise toujours l'instruction SSE sqrt
4
A
Répondre
4
Utilisez le sqrtss
intrinsèque __builtin_ia32_sqrtss
?
0
Vous devriez être prudent en utilisant cela, vous savez probablement qu'il a moins de précision. Ce sera la raison pour laquelle gcc ne l'utilise pas systématiquement.
Il y a une astuce qui est même mentionnée dans le manuel SSE d'INTEL (j'espère que je me souviens bien). Le résultat de sqrtss
est seulement une Heron itération loin de la cible. Peut-être que gcc est parfois capable de inline
qui entoure brève itération à un certain point (versions) et pour d'autres, il ne l'est pas.
Vous pouvez utiliser le builtin comme le dit MSN, mais vous devriez consulter définitivement les spécifications sur le site Web d'INTEL pour savoir ce que vous négociez.
Je sais que ça perd de la précision, mais j'espère que c'est plus cohérent entre différents OS. La fonction sqrt de la bibliothèque mathématique standard n'est pas particulièrement standard et le résultat est différent sur différentes plates-formes. La vitesse et la cohérence sont plus importantes dans ce cas. – arsenm
Je ne sais pas où vous avez obtenu cette information, mais c'est incorrect. 'sqrtss' est une racine carrée à simple précision correctement arrondie IEEE-754. Peut-être pensez-vous plutôt à 'rsqrtss ', qui est une racine carrée réciproque approximative rapide. –
@arsenm: Les fonctions sqrt de la bibliothèque mathématique standard sont complètement normalisées et les résultats ne peuvent pas varier entre les plates-formes conformes à l'Annexe F de la norme C: "Les fonctions sqrt dans fournissent l'opération racine carrée CEI 60559." La CEI 60559 (IEEE-754), à son tour, spécifie entièrement la sémantique de la racine carrée. –