seuillage

seuillage - C++ - Programmation

Marsh Posté le 20-11-2011 à 17:57:07    

Je me demandais s'il était possible de faire plus performant que:
if (a>=b) a=b;
pareil pour if (a<=b) a=b;
?

Message cité 1 fois
Message édité par GrosBocdel le 20-11-2011 à 17:57:52
Reply

Marsh Posté le 20-11-2011 à 17:57:07   

Reply

Marsh Posté le 20-11-2011 à 18:00:26    

déjà ton égale est inutile,
Après peut-être que
if (a-b) a=b; vaut pareil. Mais je suis limité moi.


Message édité par Profil supprimé le 20-11-2011 à 18:00:38
Reply

Marsh Posté le 20-11-2011 à 18:02:46    

Je pensais plutot à un truc bit à bit. C'est une partie que je ne maitrise pas.

Reply

Marsh Posté le 20-11-2011 à 18:04:15    

GrosBocdel a écrit :

Je pensais plutot à un truc bit à bit. C'est une partie que je ne maitrise pas.


 
Sois je comprends pas, soit non. Tu peux pas, à moins que b et a soit deux bits ?


Message édité par Profil supprimé le 20-11-2011 à 18:05:27
Reply

Marsh Posté le 20-11-2011 à 18:09:16    

Non, dans mon cas, c'est des int.
 
T'as peut-etre raison, if (a-b) est peut-etre plus rapide (a vérifier).

Message cité 1 fois
Message édité par GrosBocdel le 20-11-2011 à 18:10:47
Reply

Marsh Posté le 20-11-2011 à 18:10:07    

GrosBocdel a écrit :

Je me demandais s'il était possible de faire plus performant que:
if (a>=b) a=b;
pareil pour if (a<=b) a=b;
?

Et depuis quand ce genre de chose, qui se traduit directement en langage machine en instruction de saut conditionnel plus les instructions pour une assignation, c'est pas performant?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 20-11-2011 à 18:11:33    

gilou a écrit :

Et depuis quand ce genre de chose, qui se traduit directement en langage machine en instruction de saut conditionnel plus les instructions pour une assignation, c'est pas performant?
A+,


 
Je sais pas  :o  
C'est directement le mieux?

Reply

Marsh Posté le 20-11-2011 à 18:19:03    

GrosBocdel a écrit :


 
Je sais pas  :o  
C'est directement le mieux?


 
T'as plus qu'à test !, je vais testé avec C. je sais pas quoi faire.  [:vyse]

Reply

Marsh Posté le 20-11-2011 à 18:19:56    

le code machine par défaut de ce code est :  
 

Code :
  1. b = 47;
  2. 0041146E  mov         dword ptr [a],2Fh
  3. b = 45;
  4. 00411475  mov         dword ptr [b],2Dh
  5. if ( a > b ) a =b ;
  6. 0041147C  mov         eax,dword ptr [a]
  7. 0041147F  cmp         eax,dword ptr [b]
  8. 00411482  jle         wWinMain+3Ah (41148Ah)
  9. 00411484  mov         eax,dword ptr [b]
  10. 00411487  mov         dword ptr [a],eax


 
Après, il existe des moyens plus rapides d'effectuer le test en utilisant des instructions spécifiques de certains processeurs.  
 
Apparemment SSE4 ( http://fr.wikipedia.org/wiki/SSE4 ) définit des instructions permettant de calculer le min et le max plus rapidement ( 4 entiers 32 bits packés pour la comparaison ). Microsoft propose par exemple d'y accéder de la façon suivante : http://msdn.microsoft.com/fr-fr/library/bb514097.aspx

Reply

Marsh Posté le 20-11-2011 à 18:35:06    

D'accord ok je vois mieux comment ça se passe  :jap:  

Reply

Marsh Posté le 20-11-2011 à 18:35:06   

Reply

Marsh Posté le 20-11-2011 à 18:49:02    

GrosBocdel a écrit :

Non, dans mon cas, c'est des int.
 
T'as peut-etre raison, if (a-b) est peut-etre plus rapide (a vérifier).


 
J'ai utilisé time sur gnu/linux sur p4, les résultat sont équivalents grosso modo. sur un entier, je pense pas que leur valeurs change quelque chose.

Reply

Marsh Posté le 20-11-2011 à 18:50:43    


 
Il me semblait avoir vu qu'une comparaison avec zéro était plus rapide qu'une comparaison avec une autre valeur.
 
Je vais aller faire un tour du coté de sse, ça va m'occuper
 

Reply

Marsh Posté le 20-11-2011 à 18:55:13    

GrosBocdel a écrit :


 
Il me semblait avoir vu qu'une comparaison avec zéro était plus rapide qu'une comparaison avec une autre valeur.
 
Je vais aller faire un tour du coté de sse, ça va m'occuper
 


 
[hors sujet]
Ca pourrait peut-être changer...
Est-ce que si au lieu de mesurer des suites de bits, on compare d'abord leur longueur ça change ?
Quel sont les enjeux...


Message édité par Profil supprimé le 20-11-2011 à 18:55:46
Reply

Marsh Posté le 20-11-2011 à 19:05:18    

En fait si j'ai posé la question du bit à bit, c'est parce que j'ai dans mon code
int t1=i & 0x7f;
qui me fait un modulo sur 0x7f.
 
C'est pour ça que je cherchais un truc comme ça

Reply

Marsh Posté le 20-11-2011 à 19:13:03    

Je comprends pas. un modulo tu fais pas un et logique la ?
 
edit : otrho, j'ai fini. trop speedé le mec.  [:palmyre]


Message édité par Profil supprimé le 20-11-2011 à 19:14:09
Reply

Marsh Posté le 20-11-2011 à 19:18:10    

J'en sais rien je fais rien, les trucs bits à bits je maitrise pas

Reply

Marsh Posté le 21-11-2011 à 12:53:14    

si tu veux gagner en perf sur une telle operation, déjà ca n'a de sens que sur un grand jeu de donnée (au moins une image mettons).
donc vectorise (sse) et multithread (eg avec openmp) apres chercher a faire plus optimisé au niveau du code assembleur je suis sûr que c'est comme essayer de battre un ordinateur a tetris, le compilateur fera mieux de toute facon.


---------------
http://projets.6mablog.com/
Reply

Marsh Posté le 21-11-2011 à 13:21:03    

GrosBocdel a écrit :

En fait si j'ai posé la question du bit à bit, c'est parce que j'ai dans mon code
int t1=i & 0x7f;
qui me fait un modulo sur 0x7f.
 

Ça c'est une astuce qui ne marche qu'avec les nombres de la forme (2^n) - 1  (ie dont tous les bits significatifs sont à 1)
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-11-2011 à 15:03:12    

GrosBocdel a écrit :


 
Je sais pas  :o  
C'est directement le mieux?


 
Ben le jour où tu auras clairement un problème de perf avec la ligne  
    if (a>=b) a=b;  
tu creuseras la question, mais faudrait vraiment avoir du code trèèèèès particulier que pour ça soit de là et pas d'ailleurs que vienne ton goulot d'étranglement :o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 21-11-2011 à 16:17:35    

j'avais trouvé ça hier.
http://www.aishack.in/2011/05/a-su [...] technique/
 
Il arrive à faire un x3!
 
Ca se rapproche un tout petit peu de mon probleme.
 

Reply

Marsh Posté le 21-11-2011 à 16:23:54    

Ouais m'enfin là, c'est que dla spéculation à ce niveau :o


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 21-11-2011 à 16:56:42    

cette page me fait pleurer du sang

Reply

Marsh Posté le 21-11-2011 à 17:52:40    

Joel F a écrit :

cette page me fait pleurer du sang


 
Je t'attendais pour commencer la kimouss. T'es en retard  :o  
 
Moi ça va, j'ai appris qu'on peut faire ce que je veux par pack de 4.
Je m'y colle dès que j'ai le temps.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed