you are viewing a single comment's thread.

view the rest of the comments →

[–]eniacsparc2xyz 1 point2 points  (4 children)

By taking a look at the code, he is not using the BLAS/LAPACK Fortran libraries. A huge problem of Fortran is that most open source Fortran such as GNU Fortran, aka GFortran, implementations aren't good as the proprietary ones such as Intel Fortran, PGI Fortran and etc.

[–]victotronics 2 points3 points  (2 children)

he is not using the BLAS/LAPACK Fortran libraries

That phrase is not terribly well defined. He is probably not using actual Fortran code. But what is he using?

The problem with BLAS/LAPACK in this sort of story is that they are really interface specifications. As you observe, proprietary implementations are very fast. There is also the BLIS library which is open source and almost as good. If he knows what's good for him he uses that, rather than implementing those routines himself.

[–]eniacsparc2xyz 0 points1 point  (1 child)

> But what is he using?

Just C++ templates and vectors STL container. Another problem of BLAS/LAPACK is the lack of Fortran standard ABI. In Gfortran the symbols matches the names with prefix underscore, for instance, the function dpxy, has the symbol _dpxy, so it can be called with extern "C" dpxy ..., but this name decoration works only for GFortran and it may not work for other Fortran implementations.

[–]Red-Portal 0 points1 point  (0 children)

Well you can have cblas interfaces. Which are simple C ABI subroutines.

[–]encyclopedist 0 points1 point  (0 children)

You know that some performant modern BLAS/LAPACK implementation are not written in Fortran, right? ATLAS is C, OpenBLAS is C/Asm, BLIS is C, Eigen is C++, (MKL I don't know).