Je suis en train de faire quelques critiques pour les performances en C++, et nous sommes actuellement en utilisant des calculs avec des entiers pour les problèmes qui sont de nature à virgule flottante parce que "son plus rapide". Cela provoque beaucoup de problèmes gênants et ajoute beaucoup de gênant code.
Maintenant, je me souviens avoir lu sur la façon dont les calculs en virgule flottante ont été si lent à environ vers l'386 jours, où je crois (IIRC) qu'il y avait une option de co-proccessor. Mais sûrement aujourd'hui avec d'autant plus complexes et les plus puissants Processeurs, il ne fait aucune différence dans la "vitesse" si faire de point flottant ou entier de calcul? Surtout étant donné que les temps de calcul minuscule par rapport à quelque chose comme causant un pipeline de décrochage ou chercher quelque chose dans la mémoire principale?
Je sais que la bonne réponse est la référence sur le matériel cible, ce serait un bon moyen de tester cela? J'ai écrit deux petits programmes C++ et comparer les temps d'exécution avec le "temps" sur Linux, mais le temps d'exécution est trop variable (n'a pas d'aide, je suis en cours d'exécution sur un serveur virtuel). Court de passer toute ma journée consécutive, des centaines de points de référence, faire des graphiques, etc. est-il quelque chose que je peux faire pour obtenir un raisonnable test de la vitesse relative? Toutes les idées ou les pensées? Suis-je complètement tort?
Les programmes que j'ai utilisé comme suit, ils ne sont pas identiques par tous les moyens:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>
int main( int argc, char** argv )
{
int accum = 0;
srand( time( NULL ) );
for( unsigned int i = 0; i < 100000000; ++i )
{
accum += rand( ) % 365;
}
std::cout << accum << std::endl;
return 0;
}
Programme 2:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>
int main( int argc, char** argv )
{
float accum = 0;
srand( time( NULL ) );
for( unsigned int i = 0; i < 100000000; ++i )
{
accum += (float)( rand( ) % 365 );
}
std::cout << accum << std::endl;
return 0;
}
Merci à l'avance!
Edit: La plate-forme je me soucie est régulier x86 ou x86-64 fonctionnant sur Linux de bureau et les machines Windows.
Edit 2(collé à partir d'un commentaire ci-dessous): Nous avons une vaste base de code actuellement. Vraiment j'en suis venu à l'encontre de la généralisation que nous "ne doit pas utiliser float depuis entier de calcul est plus rapide" - et je suis à la recherche d'un moyen (si cela est encore vrai) pour réfuter cette prise en charge généralisée. Je me rends compte qu'il serait impossible de prédire le résultat pour nous, bref de faire tout le travail et le profilage par la suite.
De toute façon, merci à tous pour vos excellentes réponses et de l'aide. N'hésitez pas à ajouter d'autre chose :).