OPTIMISATION DE CALCULS (WIN64)

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 2 mai 2010 à 04:48
kml404 Messages postés 53 Date d'inscription dimanche 20 juillet 2008 Statut Membre Dernière intervention 10 octobre 2015 - 1 juin 2010 à 16:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51710-optimisation-de-calculs-win64

kml404 Messages postés 53 Date d'inscription dimanche 20 juillet 2008 Statut Membre Dernière intervention 10 octobre 2015
1 juin 2010 à 16:09
bonjour BruNews

j'ai accepte sur bouton de telechargement j'ai fait d'ouvre mais ya de icon Agendat.ex_ ce qui ne peut pas ouvrer. c'est non exe...
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 mai 2010 à 19:08
entre movdqa et movapd, il ne DEVRAIT y avoir aucune difference.
Mais pourtant j'obtiens quasi toujours plus rapide avec movdqa, bizarre mais je m'adapte.
L'ordre des instructions, quand c'est SSE alors il n'y a que les tests pour dire ce qui va mieux.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 mai 2010 à 19:00
Tiens je me suis aperçu qu'en essayant d'améliorer mon code, je l'ai en fait ralenti. J'ai bien vérifié, ca me semble bizarre. Il y a des règles pour le choix de l'ordre des instructions?

1ere version me donne perf=585:

movapd xmm0, [rdx]
addps xmm0, [rdx + 16]
addps xmm0, [rdx + 32]
haddps xmm0, xmm0
haddps xmm0, xmm0 ; XMM0 = 12 * moy

movapd xmm4, [rdx]
movapd xmm1, [rdx + 16]
movapd xmm3, [rdx + 32]

2eme version me donne perf=607:

movapd xmm4, [rdx]
movapd xmm1, [rdx + 16]
movapd xmm3, [rdx + 32]

movapd xmm0, xmm4
addps xmm0, xmm1
addps xmm0, xmm3
haddps xmm0, xmm0
haddps xmm0, xmm0 ; XMM0 = 12 * moy
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 mai 2010 à 18:35
J'arrive à faire un peu plus rapide (je pense que c'est parce que je fais 2 mulss là ou tu en fais 3).

Tu fais moy / 12, puis 6 * moy, ensuite une division par 146
Je pense qu'une de ces instructions est en trop
(Pour y arriver, j'ai divisé en dur les valeurs de TNDCFLT par 146.0f).

Sinon, petite question : quelle différence entre movdqa et movapd?
Si je ne me trompe pas tu as changé d'instruction entre les deux versions.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 mai 2010 à 22:56
Je regarde ça, merci vecchio.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 mai 2010 à 22:20
au lieu de faire la somme des TNDCFLT[i] * (moy - pTbl[i]), si on développe ca, ca nous donne
6 * moy - (somme des TNDCFLT[i] * pTbl[i])

On s'épargne ainsi de 3 subps

Chez mois je gagne environ 33% de temps (80 au lieu de 120), mais je suis sur une VM, donc je ne sais pas si la mesure est très fiable...
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 mai 2010 à 15:15
QUESTION (à 2 sous):
Comme visible sur la capture d'écran, la plus rapide affiche 31 en perfCounter.
On peut aisément atteindre 28 avec qlqs modifs, LESQUELLES ?

PS: celui à qui je l'ai dit par phone et qui se reconnaitra est prié de s'abstenir.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 mai 2010 à 10:40
Super le lien, grand merci
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
2 mai 2010 à 04:48
Salut BruNews,

Superbe exemple d'application des maths dans un contexte de performance. Je ne pense pas qu'il existe de methode "plus rapide" dans ce cas précis.
Les statistiques sont tous sauf précis, surtout pour le calcul des tendances.
Ainsi ton exemple reste a premiere vu le plus "sophistiqué" dans le contexte auquel il se rapporte.

Sur d'autres applications comme le calcul de tendances sur des années ou des mois, il va y avoir du résidu et donc du garbage dans les résultats finaux. Voici un lien qui résume plutot bien le cas :
http://www.jybaudot.fr/Previsions/desaisannuel.html

Bref encore un très bon code source pour les matheux/programmeur :)
Rejoignez-nous