7
votes

Rincer des nombres dénormalisés à zéro

J'ai fouillé le web en vain.

Y a-t-il un moyen pour Xcode et Visual C ++ pour traiter des nombres dénormalisés comme 0? J'aurais pensé qu'il y a une option dans les préférences de l'IDE pour activer cette option mais ne peut sembler le trouver.

Je fais des trucs audio de plate-forme inter-plate-forme et je dois arrêter certains processeurs Hogging Resources.

acclamations


0 commentaires

3 Réponses :


10
votes

Vous recherchez un moyen défini par la plate-forme de définir FTZ et / ou Daz dans le registre MXCSR (sur X86 avec SSE ou X86-64); Voir https://stackoverflow.com/a/2487733/567292

Habituellement, cela s'appelle quelque chose comme _controlfp ; Microsoft Documentation est chez http://msdn.microsoft.com/en-us/ Bibliothèque / E9B52CEH.ASPX

Vous pouvez également utiliser le _mm_set_flush_zero_mode macro: http://msdn.microsoft.com/en-us/library/a8b5ts9s (v = vs.71) .aspx - Il s'agit probablement de la méthode portable la plus plate-forme. < / p>


1 commentaires

Vous devez également définir des drapeaux de compilateur Visual Studio pour utiliser SSE: "/ arc: SSE2"



4
votes

Pour désactiver les dénormaux mondiaux, j'utilise ces 2 macros: xxx

J'appelle le premier au début du processus et le second à la fin. Malheureusement, cela semble ne pas fonctionner bien sur Windows.

Pour flush Denormals localement, j'utilise ce xxx


0 commentaires

0
votes

Pour ce faire, utilisez les macros Intel intrinsics pendant le démarrage du programme. Par exemple: xxx pré>

dans ma version de MSVC, ceci émit le code d'assemblage suivant: p> xxx pré>

MXCSR est le contrôle et le registre d'état, Et ce code est un bit de réglage 15, qui tourne flush zéro mode em> allumé. p>

une chose à noter: cela n'affecte que les disormaux résultant d'un calcul. Si vous souhaitez également définir des denormals à zéro si elles sont utilisées comme Entrée em>, vous devez également définir le drapeau DAZ (Denormals est zéro), à l'aide de la commande suivante: P>

_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);


0 commentaires