Giu 302005
 
Duodi, 12 Messidor CCXIII; Jour de l’Artichaut

" Grande è la confusione sotto il cielo. La situazione è eccellente."

Explicit interfaces are mandatory if an EXTERNAL procedure has dummy arguments that are assumed-shape arrays, pointers or targets; (…)


INTERFACE
 SUBROUTINE genprime(n,p)

  IMPLICIT NONE
  INTEGER(KIND=8), INTENT(IN) :: n
  INTEGER(KIND=8), INTENT(OUT) :: p(0:*)
  INTEGER(KIND=8) :: i, ip, ipr, j
  LOGICAL :: found, loop

 END SUBROUTINE genprime
END INTERFACE

Ed ecco in azione il programma che contiene l’interfaccia precedente:


% time ./prime
Finding the first 323641 prime numbers
Factorization of: 104743104743
 101^1
 9901^1
 104743^1
./prime 4.82s user 0.01s system 98% cpu 4.922 total

Apparentemente il programma serve a trovare i fattori primi di un numero, ma il suo scopo reale è mettere in evidenza un bug relativo all’allocazione di grandi array nel compilatore Intel Fortran 8.x (in entrambe le versioni, ia32 e ia64, non ho ancora provato la versione 9, speriamo abbiano corretto il problema); il programma funziona come deve se compilato altrimenti, per esempio con le versioni di Intel Fortran precedenti, o con PGI Fortran, g95, GNU Fortran 95 (gfortran), e tutti i compilatori Fortran 95 e Fortran 2003 che ho avuto modo di provare, per sistemi operativi che non fossero Linux. Quando funziona, però, il Fortran Intel tende a produrre applicazioni piú efficienti.


% time ./prime
Finding the first 2259368 prime numbers
zsh: segmentation fault (core dumped) ./prime

Note to Self: implementare <pre> e <code> nel template CSS.

  4 Responses to “A richiesta”

  1. è un baco piuttosto datato…

  2. Ormai sarà diventato una farfalla.

  3. 🙂 tutto sommato e leggibile, pensavo (molto) peggio

  4. Tra l’altro quella che ho riportato è l’interfaccia che risolve il problema.

Sorry, the comment form is closed at this time.