|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre habitué
![]() Inscription : septembre 2004 Messages : 111 ![]() |
Bonjour,
je suis en train de réécrire un bout de code (des FFTs) en vieux Fortran: Code :
Code :
Code :
Ce post me confirme que ces versions sont les mêmes: http://www.developpez.net/forums/d37...o/#post2307861 Qu'en pensez-vous? |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : août 2006 Messages : 781 ![]() |
Pas évident.
La première transformation pourrait introduire une erreur via un goto 1001 dont le sens passerait de "cycle" à "exit", mais ça n'explique pas que l'erreur se produise avec la version "enddo" (il ne peut y avoir de goto 1001 oublié puisque la compilation avorterait). Il reste selon moi 2 possibilités :
|
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : septembre 2004 Messages : 111 ![]() |
Je penchais pour la deuxième solution
et tu confirmes ce que je pense.Je ne mets pas de côté la 1ère mais j'ai bien vérifié à coup d'outils de diff (tkdiff, emacs diff et vimdiff ;-) ). Mais bon ca fait quand même 2000 lignes... Enfin bref, tant pis, j'abandonne! Merci pour la réponse |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : août 2006 Messages : 781 ![]() |
Comment ça, « j'abandonne » ? Comme dirait l'autre, de quessé ?
Le problème avec ta stratégie (abandon), c'est que le problème risque de revenir dès tu changeras quelque chose (un petit bout de code, le compilateur, ...). Pour trouver ce genre d'erreur, la stratégie est toujours la même : mettre toutes les switches d'optimisation à off, toutes les switches de contrôle à on, et si possible, utiliser plus d'un compilateur. |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : septembre 2004 Messages : 111 ![]() |
Non mais 2000 lignes de code de fft que je pige que dalle
Mais pour faire avancer les choses, j'ai entrepris de faire la même chose avec le dgemm de BLAS, c'est-à-dire remplacer les continue par les enddo et oui apparemment les effets des optimisations compilateur se voient sur le résultat .... |
|
|
00
|
|
|
#6 | ||
|
Membre éclairé
![]() Inscription : mars 2007 Messages : 326 ![]() |
Bonjour,
Citation:
Par contre, pour en revenir à ton premier post et le fait que Citation:
Mais ce n'est qu'une hypothèse... (que tu peux tester en changeant la mémoire "stack" allouée à ta session; sous Unix/Linux via la commande "ulimit -s"). |
||
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Inscription : septembre 2004 Messages : 111 ![]() |
Déjà essayé mais pas plus conluant
Merci pour le conseil! |
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 83 ![]() |
Stack size overflow... quel est la taille des tableaux sur la stack? As tu des tableaux automatiques? Quel compilateur utilises tu?
|
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : septembre 2004 Messages : 111 ![]() |
La taille max des tableaux est environ de 2500*2500 complexes double precision (a priori 65Mo par processus).
J'ai bien des tableaux automatiques. J'utilise Intel 11 et 12. |
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 83 ![]() |
Les tableaux automatiques c'est pas automatique ! ...
Ahem... Ils sont alloués sur la stack donc ça peut expliquer ton problème. Passe les sur le heap en faisant un allocate ça devrait aller mieux. Si tu compiles avec -openmp, tu peux essayer d'augmenter la KMP_STACK_SIZE aussi. Essaye avec : export KMP_STACK_SIZE=70m (par défaut c'est 1m) En sachant que c'est un très mauvais workaround si ça marche, le mieux étant d'aller sur le heap. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com