Problème de performance d'une subroutine FORTRAN
Bien le bonjour,
Dans notre labo nous développons un solveur de mécanique des fluides en fortran. Je me suis décidé la semaine dernière à tenter de l'optimiser. J'ai donc commencé par le profiling: gprof, oprofile et Intel Vtune sont formels; une de mes subroutines consomment 20% du temps...alors qu'elle ne le devrait pas. donc j'ai un pb.
Sous oprofile ou sous Vtune on peut voir quelles sont les lignes de code consommant le plus de CPU. A notre grande surprise toutes les boucles DO servant à remettre à Zero les vecteurs consomment énormément de temps!!! Je fais par exemple:
Code:
1 2 3 4 5
|
do inp=icst,icen
su(inp)=d0
pp(inp)=d0
enddo |
ce qui est vraiment étrange c'est que qd je fais:
Code:
1 2 3 4 5 6 7
|
do inp=icst,icen
su(inp)=d0
enddo
do inp=icst,icen
pp(inp)=d0
enddo |
ces boucles DO n'apparaissent plus comme "hotspot" sous Vtune par exemple...à la place intel_new_memset (j'utilise intel fortran compiler) fait son apparition dans les subroutines consommant bcp de CPU.
Quelqu'un a une explication sur ce comportement. des liens ? une solution ?
Merci d'avance!