Les fonctions mathématiques du framework .NET fonctionnent principalement sur des flottants double précision, il n'y a pas de surcharges de précision simple (float). Lorsque vous travaillez avec des données de précision simple dans un scénario de haute performance, cela entraîne des coulées inutiles et des fonctions de calcul avec plus de précision que nécessaire, de sorte que les performances sont affectées dans une certaine mesure.Opérations mathématiques à simple précision dans .NET?
Y a-t-il un moyen d'éviter une partie de cette charge supplémentaire du processeur? Par exemple. existe-t-il une bibliothèque mathématique open source avec des surcharges flottantes qui appellent les instructions FPU sous-jacentes directement? (Ma compréhension est que cela nécessiterait un soutien dans le CLR). Et en fait je ne suis pas sûr si les processeurs modernes ont même des instructions de précision simple.
Cette question a été en partie inspiré par cette question sur l'optimisation d'une fonction sigmoïde:
Lorsque vous faites référence à instrinsics, est-ce la même chose que les fonctions externes? - comment les fonctions Math sont implémentées, par rapport aux intrinsèques définies dans le langage. AFIN que le CLR pourrait facilement être étendu pour mettre en œuvre par exemple. statique statique externe double Sin (float a) en plus de la version double précision. – redcalx
Parlez-vous de l'implémenter en code natif? Le surcoût P/Invoke de cette opération pour une seule opération à virgule flottante annulerait complètement la tentative d'éviter l'impact sur les performances de travailler avec 'Sin (double)'. Les intrinsèques sont déclarées 'extern' mais ne sont pas P/Invoke - le code natif pour eux est géré en interne par le JIT lui-même pour les rendre aussi efficaces que possible. –
Donc peut-être que certaines performances pourraient être obtenues si votre algorithme était tel que vous pourriez faire un seul P/Invoke qui fait beaucoup d'opérations flottantes. – Fantius