[Numpy-discussion] Fortran was dead ... [was Re: rewriting NumPy code in C or C++ or similar]
Tue Mar 15 08:32:41 CDT 2011
Den 14.03.2011 23:02, skrev Sebastian Haase:
> Sturla has been writing so much about Fortran recently, and Ondrej now
> says he has done the move from C/C++ to Fortran -- I thought Fortran
> was dead ... !? ;-)
> What am I missing here
No, it is just that Fortran receives less hype. If Fortran was dead,
why does OpenML define matrices in column major der? Why does ACML and
Intel MKL define arrays as column major order?
> Apparently (from what I was able to read-up so far) there is a BIG
> difference between FORTRAN 77 and F95.
> But isn't gcc or gfortran still only supporting F77 ?
gfortran supports Fortran 77, Fortran 90, Fortran 95, most of Fortran
2003 and some of Fortran 2008.
> How about IntelCC's Fortran ? Is that superior?
Intel, Absoft and Portland are among the best Fortran compilers on the
market, but gfortran is closing the gap fast.
Currently what maily makes Intel ifort and Absoft f95 produce faster
binaries than gfortran is actually a faster math library.
> 1. How about debugging - does gdb work or is there somthing better ?
I use Absoft's Fx debugger.
gdb is ok, but it does not know anything about Fortran arrays.
> 2. How is the move of the F77 community to F95 in general ? How many
> people / projects are switching.
F77 is hardly used for new projects. But F77 is merely a subset of F95.
> 3. Or is the move rather going like Fortran 77 -> C -> Python ->
> Fortran 95 !? ;-)
Fortran is good for only one thing, which is number crunching with data
stored in arrays.
Fortran is much simpler than C, but still just as efficient. There are
less room for shooting your own foot off.
First, Fortran 90 (and later) has a convinient array syntax, basically
the same as NumPy and Matlab. The difference is that as Fortran
compilers know these arrays, they can generate optimized code. Think of
it as a form of compiled NumPy. In C++ one can make smart array classes
that "think like a Fortran compiler" (cf. Blitz++) to avoid many
temporary intermediates, but no array class for C++ is as smart as an
autovectorizing Fortran compiler (Blitz++ is lagging far behind, and
Second, Fortran compilers can generate efficient code for parallel
processing. This e.g. includes:
- autovectorization (SIMD, OpenMP) of array expressions.
- broadcasting arrays
- fortran pointers.
- aliasing disallowed.
- a large set of built-in, vectorized math functions.
- manual use of OpenMP.
- "where" and "forall" contructs.
- elemental and pure functions.
- internal functions.
- vectorized I/O with arrays.
For example: Parallel I/O in C or Python can take a lot of boiler-plate
code and tunig with threads, asynchronous i/o, etc. In Fortran this is
all done by the compiler. If a write or read statement takes an array as
argument, the compiler Fortran knows what to do.
More information about the NumPy-Discussion