Grosse perte de perf... PB -> ASM

Pour discuter de l'assembleur
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Grosse perte de perf... PB -> ASM

Message par ker2x »

Code PB :

Code : Tout sélectionner

x0 = (complexWidth * i / screenSize - (complexWidth/2.0))
Code ASM généré par PB :

Code : Tout sélectionner

; x0 = (complexWidth * i / screenSize - (complexWidth/2.0))
	FLD	 qword [v_complexWidth]
	FIMUL	 dword [v_i]
	MOVZX	 eax,word [v_screenSize]
	MOV	 dword [rsp-4], eax
	FIDIV	 dword [rsp-4]
	FLD	 qword [v_complexWidth]
	FDIV	 qword [D3]
	FSUBP	 st1,st0
	FADD	 qword [D4]
	FSTP	 qword [v_x0]

Mon code a moi :

Code : Tout sélectionner

    EnableASM
      FLD complexWidth  ; st0 = complexWidth 
      FIMUL i           ; st0 = complexWidth * i 
      FIDIV screenSize  ; st0 = complexWidth * i / screenSize 
      FLD complexWidth  ; st0 = complexWidth ; st1 = complexWidth * i / screenSize
      FLD1              ; st0 = 1 ; st1 = complexWidth ; st2 = complexWidth * i / screenSize
      FLD1              ; st0 = 1 ; st1 = 1 ; st2 = complexWidth ; st3 = complexWidth * i / screenSize
      FADDP             ; st0 = 2 ; st1 = complexWidth ; st2 = complexWidth * i / screenSize
      FDIVP             ; st0 = complexWidth / 2 ; st1 = complexWidth * i / screenSize
      FSUBP             ; st0 = complexWidth * i / screenSize - complexWidth / 2
      FSTP x0
    DisableASM
La perte en performance en utilisant mon code ASM est abyssale.
Ce n'est pas la partie la plus critique du code et je perd plus de 20% en performance

J'ai merdé ou ?
La difference entre les 2 code ne me semble pourtant pas monstrueuse...
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Grosse perte de perf... PB -> ASM

Message par djes »

En effet, ton code ne devrait pas être plus lent. Par contre, si je peux donner mon avis, ces calculs sont inutiles, tu pourrais les faire une fois pour toutes au début de ton code et en utiliser le résultat tout fait.
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Re: Grosse perte de perf... PB -> ASM

Message par ker2x »

j'ai deplacé una partie du code ailleur et je n'ai plus ce probleme.
Mais je ne comprend quand meme pas autant de perte de perf.

Je suis en train de virer toutes les instructions de la fpu pour faire du MMX/SSE :)

Ca avance, ca avance ... d'ailleur cette partie la est devenue :

Code : Tout sélectionner

  MOVQ     xmm2, qword [v_complexWidth]
  MOVZX    eax, word [v_i]
  CVTSI2SD xmm3, eax
  MULSD    xmm2, xmm3
  MOVZX    eax, word [v_screenSize]
  CVTSI2SD xmm4, eax
  DIVSD    xmm2, xmm4
  SUBSD    xmm2, qword [v_complexWidthBy2]
  MOVQ     qword [v_x0], xmm2
Pas optimal mais ca marche. Une fois que j'aurai fini de tout passé en instruction SSE, j'optimiserai pour tirer avantage des "packed" instructions et mieux utiliser les registres pour eviter tout ces MOV. Mais faut d'abord que je recode avant d'optimiser l'utilisation des registres :)

Il y a largement assez de registres pour arreter tout ces MOV dans tous les sens.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Grosse perte de perf... PB -> ASM

Message par djes »

Oui, maintenant, faut pas se priver :)
Je ne suis d'ailleurs plus trop au courant des instructions spécifiques AMD/Intel; A priori, le SSE2 devrait être compatible partout, par contre le SSE3 SSSE3 etc vaut mieux éviter ; à moins de faire un test en début de code. Y'a ça pour savoir : http://www.nasm.us/doc/nasmdocb.html
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Re: Grosse perte de perf... PB -> ASM

Message par ker2x »

Pour l'instant j'ai multiplié la vitesse du code par 4 :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Grosse perte de perf... PB -> ASM

Message par djes »

Rien que ça :D
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Re: Grosse perte de perf... PB -> ASM

Message par ker2x »

5ans plus tard j'ai perdu mon code source et j'arrive pas a relire le peu que j'ai pu poster.

Serieux. j'ai codé ca moi ? Je suis jaloux de mon moi d'il y a 5ans. 8O
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Grosse perte de perf... PB -> ASM

Message par djes »

Tu sais il y en a ici qui ont travaillé avec des cartes perforées... :mrgreen:
Répondre