Entre les double et les float... - C++ - Programmation
Marsh Posté le 18-04-2003 à 15:35:40
Fodger a écrit : On peut gagner en vitesse de traitement non dans les calculs? |
Ben a priori, puisque les doubles utilisent plus de précisions, ils demandent donc plus de mémoire et plus de précisions dans les calculs = plus de calculs => moins de performances.
Mais bon, pour voir la différence, faut déjà un sacré programme ...
Marsh Posté le 18-04-2003 à 15:40:15
à toi de faire la comparaison
Citation : 11.10 Faut-il préférer les double aux float ? |
[benoit@benserver tmp]$ gcc -lm -o float float.c |
evidemment, faudrait le faire tourner plusieurs fois, mais tu peux voir qu'il n'y a pas de différence majeur. En fait on utilise les float pour les calculs scientifique où l'on traite beaucoup de données (pour l'anecdote, un copain traite des matrices de 10^6 * 10^6, ce qui l'interesse c'est pas d'avoir quelques chiffres de plus, mais bien d'avoir la matrice la plus garnde possible. La je t'assure, le passage de double en float ce fait sentir: il passe de 7,5To à 3,7To, c'est plus que sensible
Marsh Posté le 18-04-2003 à 15:51:00
++Taz a écrit : Un truc tout à fait interessant |
Au moins j'aurai apris un truc interessant aujourd'hui.
Marsh Posté le 18-04-2003 à 15:55:30
T'as choppé ça où?
++Taz a écrit : à toi de faire la comparaison
|
Marsh Posté le 18-04-2003 à 15:57:30
ReplyMarsh Posté le 18-04-2003 à 15:59:34
j'appelles ça un testàlacon.
le cos est très long en cycles cpu, une bonne centaine.
de plus si le fpu est en 80 bits ça sortira dans un registre fpu 80 bits. ensuite le cos rebouffera le même registre.
donc le type donné en C/C++ que ce soit float ou double sera inutilisé si le compilateur optimise le code un temps soit peu, et donc qu'il effectues la boucle dans les registres fpu et non la mémoire.
donc ce test a tellement de paramètres non maitrisés que ç'est pas vraiment valable:
pour les x86: mode de précision du fpu ?, d reste-t-il dans un registre ou est-il dégradé dans le format reel en mémoire ?
pour un ppc: vu qu'il me semble que le ppc n'a pas de fonction trigonométriques, quelle est l'implémentation logicielle de cos ?
pour les deux: cos est-il utilisé si fréquemment que c'est une instruction test valable pour dire quelle mode est le plus rapide ?
Marsh Posté le 18-04-2003 à 16:01:47
c'est bien ce qu'on veut dire: on s'en fout du temps de traitement, il sera sans doute le meme. La seule chose qui importe, c'est la taille des données (voir mon edit)
Marsh Posté le 18-04-2003 à 16:03:05
la seule chose que l'on puisse dire, c'est que dans le cas d'un quantité massive de données, le float sera nettement plus rapide, car 2x plus petit que le double, 2x plus petit => 2x moins de bande passante mémoire pour balayer un tableau, 2x plus d'éléments dans une ligne de cache (et donc 2x moins de lignes de caches pour le même nombre d'élements)
Marsh Posté le 18-04-2003 à 16:03:21
++Taz a écrit : c'est bien ce qu'on veut dire: on s'en fout du temps de traitement, il sera sans doute le meme. La seule chose qui importe, c'est la taille des données (voir mon edit) |
oki on est d'accord
Marsh Posté le 18-04-2003 à 16:06:00
BJOne a écrit : j'appelles ça un testàlacon. |
On s'en fout : y a des tables de sin/cos en dur dans les proco
Marsh Posté le 18-04-2003 à 16:07:00
donc je dirais dans la pratique, pour des ressources qui seont utilisées en "lecture seule" (tableau/structure source), le float est souvant suffisant. dans des calculs intermédiaires, le double est à conseiller (et encore si des résultats intermérdiaires sont conservés dans des registres fpu, la précision peut être supérieure au double):
d'où une petite règle personelle simple:
précision temporaire >= précision finale >= précision de la source.
Marsh Posté le 18-04-2003 à 16:07:33
Tetragrammaton IHVH a écrit : |
t'a vu jouer ça où ?
Marsh Posté le 18-04-2003 à 16:15:58
BJOne a écrit : |
sur ce forum.
Marsh Posté le 18-04-2003 à 16:18:44
Tetragrammaton IHVH a écrit : |
non, on utilises des tables de précalcul pour aller plus vite, pour justement éviter les fonctions trigo du fpu qui sont couteuses.
mais le cos lui même du fpu est effectué par un algo itératif +ou- compliqué (d'où la centaine de cycles...)
tu ne peux pas utiliser des tables, car ça boufferai trop de rom, et en plus c'est impraticable car imprécis.
pour un jeu, on utilisait avant des tables de précalcul ou tes 360° était sur 256 ou 512 entrées, mais 1° de précision c'est dégueu....
Marsh Posté le 18-04-2003 à 16:21:29
BJOne a écrit : |
Y a deja toutes les divisions en dur, alors quelques tables de cosinus, c'est minime. Mais bon, si tu le dis.
Marsh Posté le 18-04-2003 à 16:24:09
Tetragrammaton IHVH a écrit : |
les divisions en dur
Marsh Posté le 18-04-2003 à 16:28:45
BJOne a écrit : donc je dirais dans la pratique, pour des ressources qui seont utilisées en "lecture seule" (tableau/structure source), le float est souvant suffisant. dans des calculs intermédiaires, le double est à conseiller (et encore si des résultats intermérdiaires sont conservés dans des registres fpu, la précision peut être supérieure au double): |
Pour les comparaisons d'égalité, mieux s'abstenir à cause des erreurs d'arondi.
Marsh Posté le 18-04-2003 à 16:35:21
Fodger a écrit : |
heu vi mais je compare pas des variables flottantes là, je parle de précision...
par exemple je sais pas, pour un système lié à un terrain, tu stoques tes altitudes en short int 16 bits, pour tes calculs temporaires tu ramènes ça en float ou double et idem pour ce qui est à considérer comme calcul final.
Marsh Posté le 18-04-2003 à 16:41:05
ReplyMarsh Posté le 18-04-2003 à 16:44:46
Le choix peut aussi être dû aux optimisations possibles avec les unités spécifiques:
Altivec et SSE n'utilisent que des floats.
SSE2 permet l'utilisation de flottants 64bits mais y en a que 2 par registre de 128 bits.
Marsh Posté le 18-04-2003 à 19:10:18
BJOne a écrit : |
Ah ouais, d'accord, je croyais que j'avais affaire à un spécialiste...
Renseigne toi un minimum avant de poster des ":lol:" à tout va.
Mots clés : pentium, bug, FDIV
Marsh Posté le 18-04-2003 à 22:35:20
Tetragrammaton IHVH a écrit : |
et ?
donne le lien...
il y a probablement des tables de précalcul utilisées dans les cpu, mais "Y a deja toutes les divisions en dur" est sujet à interprétation bizarre...
Marsh Posté le 18-04-2003 à 22:42:42
oki dans le cas du pentium, il y a une table de précalcul de 1066 entrées. mais le terme "Y a deja toutes les divisions en dur" n'est pas du -tout- approprié oki
car même utilisant des tables de précalcul, la divsion, racine carré et la trigo utilisent des algo itératifs...
Marsh Posté le 18-04-2003 à 15:30:51
On peut gagner en vitesse de traitement non dans les calculs?