Im essayant d'optimiser mon application d'exercice dans VS2010. Fondamentalement, j'ai plusieurs sqrt, pow et memset dans la boucle de base. Plus précisément, ce que je fais:Comment puis-je savoir si la version intrinsèque de la fonction est utilisée à partir du démontage?
// in a cpp file ...
#include <cmath>
#pragma intrinsic(sqrt, pow, memset)
void Simulator::calculate()
{
for(int i=0; i<NUM; i++)
{
...
float len = std::sqrt(lenSq);
distrib[0] = std::pow(baseVal, expVal);
...
clearQuad(i); // invokes memset
}
}
Après la construction, le démontage montre que, par exemple, l'appel de sqrt compile toujours comme « appel _CIsqrt (0x ####) » ne change rien que ce soit le drapeau/Oi est activé ou non.
Quelqu'un peut-il expliquer comment je peux activer la version intrinsèque et comment puis-je la vérifier avec le code de désassemblage? (j'ai également activé dans les paramètres du projet du/O2.)
Merci
Edit: Problème résolu en ajoutant/fp: rapide. Pour sqrt, par exemple, la version intrinsèque utilise un seul "fsqrt" pour remplacer la version std "appel __CIsqrt()". Malheureusement, dans mon cas, la version intrinsèque est 5% plus lente.
Un grand merci à Zan Lynx et mch.
Testé, résultat positif. Le/fp: rapide le résout. Je vous remercie – Veg