On 05/12/2012 05:34 PM, Pauli Virtanen wrote: > 12.05.2012 17:30, Thomas Unterthiner kirjoitti: > [clip] >> However it didn't seem to work. The same 5000x5000 matrix-multiply is >> still spinning at 100% CPU usage. I attached to the process after I let >> it run for over 3 minutes, and the stacktrace looked like this: >> >> #0 DOUBLE_dot (ip1=<optimized out>, is1=8, ip2= >> [...gibberish...], is2=40000, op=0x7f8633086000 "", >> n=5000, __NPY_UNUSED_TAGGEDignore=0x23f40f0) at >> numpy/core/src/multiarray/arraytypes.c.src:3077 >> #1 0x00007f864dea1466 in PyArray_MatrixProduct2 (op1=<optimized out>, >> op2=<optimized out>, out=<optimized out>) >> at numpy/core/src/multiarray/multiarraymodule.c:847 > This is also not using ACML. You'll need to adjust things until the line > > from numpy.core._dotblas import dot > > works. CBLAS is indeed needed. >
It seems like I just can't get it to work. Here is what I did: I downloaded cblas from netlib, and changed the Makefile.LINUX to read: BLLIB = /opt/acml5.1.0/gfortran64_fma4/lib/libacml.so CBLIB = ../lib/cblas.a CFLAGS = -O3 -DADD_ -march=native -flto -fPIC FFLAGS = -O3 -march=native -flto RANLIB = ranlib Then renamed Makefile.LINUX to Makefile.in, and built cblas. I copied the resulting libcblas.a to /opt/acml5.1.0/gfortran64_fma4/lib/ . I also copied the files in $CBLAS_DIR/include to /opt/acml5.1.0/gfortran64_fma4/include (not sure if that was needed). I then modified my .bashrc by adding the line export LD_LIBRARY_PATH=/opt/acml5.1.0/gfortran64_fma4/lib I started a new shell afterwards to make sure the variable was set. Next, I downloaded the numpy-1.6.1 source distribution. I then created the following 'site.cfg': [blas] blas_libs = cblas,acml library_dirs = /opt/acml5.1.0/gfortran64_fma4/lib include_dirs = /opt/acml5.1.0/gfortran64_fma4/include [lapack] language = f77 lapack_libs = acml library_dirs = /opt/acml5.1.0/gfortran64_fma4/lib include_dirs = /opt/acml5.1.0/gfortran64_fma4/include I'm not sure where 'site.cfg' is supposed to go, so I placed one copy in the root-directory of the package, one in ./numpy/ and one in ./numpy/distutils/ I then did 'sudo python setup.py install --prefix=/usr/local' which built and installed without a hitch. (Sidenote: in other tries, I noticed that if I export CFLAGS and LDFLAGS before calling this, there will be an error, is that normal? How am I supposed to set CFLAGS when building?) Anyways, when I don't export any environment variables and just do 'sudo python setup.py install --prefix=/usr/local', evertying works smoothly. Amongst other things, I get the following output while compiling: $ sudo python setup.py install --prefix=/usr/local 2>&1 [...] /media/scratch/software/numpy/numpy-1.6.1/numpy/distutils/system_info.py:1414: UserWarning: Atlas (http://math-atlas.sourceforge.net/) libraries not found. Directories to search for the libraries can be specified in the numpy/distutils/site.cfg file (section [atlas]) or by setting the ATLAS environment variable. warnings.warn(AtlasNotFoundError.__doc__) blas_info: FOUND: libraries = ['cblas', 'acml'] library_dirs = ['/opt/acml5.1.0/gfortran64_fma4/lib'] language = f77 FOUND: libraries = ['cblas', 'acml'] library_dirs = ['/opt/acml5.1.0/gfortran64_fma4/lib'] define_macros = [('NO_ATLAS_INFO', 1)] language = f77 [...] lapack_info: FOUND: libraries = ['acml'] library_dirs = ['/opt/acml5.1.0/gfortran64_fma4/lib'] language = f77 FOUND: libraries = ['acml', 'cblas', 'acml'] library_dirs = ['/opt/acml5.1.0/gfortran64_fma4/lib'] define_macros = [('NO_ATLAS_INFO', 1)] language = f77 [...] 'build/src.linux-x86_64-2.7/numpy/core/include/numpy/__multiarray_api.h', 'build/src.linux-x86_64-2.7/numpy/core/include/numpy/__ufunc_api.h'] building extension "numpy.core._dotblas" sources building extension "numpy.core.umath_tests" sources conv_template:> build/src.linux-x86_64-2.7/numpy/core/src/umath/umath_tests.c [...] /usr/bin/gfortran -Wall -Wall -shared build/temp.linux-x86_64-2.7/numpy/linalg/lapack_litemodule.o build/temp.linux-x86_64-2.7/numpy/linalg/python_xerbla.o -L/opt/acml5.1.0/gfortran64_fma4/lib -Lbuild/temp.linux-x86_64-2.7 -lacml -lcblas -lacml -lgfortran -o build/lib.linux-x86_64-2.7/numpy/linalg/lapack_lite.so The output contains no other mention of anything BLAS-related. Notice the absense of any calls to gcc/gfortran after the 'building extension "numpy.core._dotblas" sources' message. After the build is done, the directory ./build/lib.linux-x86_64-2.7/numpy/core/ does not contain any "dotblas" files, and neither does /usr/local/lib/python2.7/dist-packages/numpy/core/ afterwards. Thus it is no surprise that the following still fails: tom@blucomp:~$ python Python 2.7.3 (default, Apr 20 2012, 22:39:59) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from numpy.core._dotblas import dot Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named _dotblas _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion