[Numpy-discussion] [ANN] numscons 0.3.0 release

David Cournapeau david@ar.media.kyoto-u.ac...
Thu Jan 24 22:03:10 CST 2008


Matthew Brett wrote:
> Hi David,
>
> Thanks again for doing this.  I've been playing with the compilation -
> should I email you direct with questions, to the lists?
I don't think it would be inappropriate to use the current lists for that.
>
> Basically, I'm trying to understand the library discovery, linking
> steps - ATLAS in particular.
Don't trust the included doc: it is not up-to-date, and that's the part 
which I totally redesigned since I wrote the initial doc.

For things like FFT, BLAS, LAPACK, things are a bit complicated. 
Fortunately, for "normal" libraries, things are much easier: you use the 
NumpyCheckLibraryAndHeader function

http://projects.scipy.org/scipy/numpy/wiki/NumpySconsExtExamples#Checkingforalibrary

This function can check for a library, headers, and check for symbol in 
the library. site.cfg customization is also automatically taken care of. 
I also intend to add the possibility to check for libraries which use 
pkgconfig.

For BLAS/LAPACK/FFT, the basic principles are:
    - I make a distinction between "API libraries" (called meta 
libraries in numscons) and "implementation libraries" (called perflib in 
numscons).
    - Meta libraries uses perflibs: FFT/BLAS/LAPACK may use 
Sunperf/MKL/ATLAS.
    - For each meta library and each perflib, a Check function is 
defined: CheckMKL, CheckCBLAS, etc...
    - For a perflib check to succeed, I try to compile, link and run 
code snippets. Any failure means the Check* function will return failure.
    - When a perflib Check* succeeds, the meta library check checks that 
another code snippet can be compiled/linked/run. For example, if 
CheckMKL succeeds in CheckCBLAS, I will compile/link/run a cblas program 
using MKL configuration.
    - Both perflib and meta libraries are customizable through site.cfg 
(I tried to keep backward compatibility at this level with numpy.distutils).

I still have the feeling that it is over-designed, but BLAS/LAPACK 
libraries are really a PITA. Every perflib has slightly different 
conventions, and I wanted to use common code for all of them as much as 
possible [1]. Also, the configuration is not inside python code anymore: 
libraries, frameworks, link flags are all defined in perflib.cfg.

cheers,

David

[1] This design also allow some funky stuff: for example, when using sun 
performance libraries with sun tools, because of something which look 
like a bug to me, the sunperf are not linked when building a shared 
library. So I link a code snippet, and parse the linker output to get 
the necessary libraries; this is totally transparent to BLAS/LAPACK 
checkers.


More information about the Numpy-discussion mailing list