Red Hat Bugzilla – Bug 166871
Review Request: ATLAS - fast linear algebra libraries
Last modified: 2009-03-02 19:41:51 EST
Spec Name or Url: http://webpages.charter.net/qspencer/rpm/atlas.spec
SRPM Name or Url: http://webpages.charter.net/qspencer/rpm/atlas-3.6.0-1.src.rpm
Description: The ATLAS (Automatically Tuned Linear Algebra Software) project is an ongoing research effort focusing on applying empirical techniques in order to provide portable performance. At present, it provides C and Fortran77 interfaces to a portably efficient BLAS implementation, as well as a few routines from LAPACK.
This package provides replacements for the default blas and lapack libraries that should be substantially faster. A simple verification of speed improvement can be obtained using Octave with the following command:
echo "X=randn(500); t=cputime; Y=X'*X; disp(cputime-t); exit" | octave -q
On my system without atlas installed, I obtain this result:
After running "rpm -i atlas-3.6.0-1.i386.rpm", I get:
This is a 3x speedup that is obtained on base i386 architecture without any SIMD extensions. The package creates static libraries for sse, sse2, and 3dnow, but shared libraries for those are currently broken with gcc 4.
Because ATLAS is based on compile-time optimizations, distributing a package like ATLAS in binary format is a challenging problem. The Debian approach to this seems to make the most sense, so I'm using the Debian patches directly in the build process in order to avoid duplication of effort. See the document atlas_fedora_notes.txt for a more detailed explanation of the build scheme and discussion of the reasons for it.
I am not able to build it using mock on x86_64, or this is not supposed to be
build in a x86_64 environment?
This is the error message:
Enter f77 compiler [g77]: /usr/bin/gfortran^J Enter F77 Flags
[-fomit-frame-pointer -O -m32]: ^JF77 & FLAGS: /usr/bin/gfortran
-fomit-frame-pointer -O -m3
FLINKER & FLAGS: $(F77) $(F77FLAGS)
Compiling with = 'gcc -fomit-frame-pointer -O -mfpmath=387 -m32' doesn't seem
to work for me.
Enter 1 to try different CC/flags, 0 to continue anyway : error: Bad
exit status from /var/tmp/rpm-tmp.96529 (%build)
This should compile on x86_64, but I hadn't tested it before. The only x86_64
system I have access to is FC3, which is pre GCC4, so I can't really debug this.
It seems that the problem is that it is incorrectly trying 32-bit flags. Could
you send me the complete build log so I can see what it did to get to this point?
I believe I have found the problem and updated the spec and SRPM files:
I am sorry but it has failed again. :-(
The good news is that the problem seems the same as before. I will send
you the build-log privately.
It seems I fixed the problem for the portion of the code where static libraries
are built, but not for the subsequent shared library build. This should be fixed
now, and updated files have been posted.
Now it fails almost in the end. I have sent you the build.log but the relevant
lines are here:
/usr/bin/ld: tmp/cbdsqr.o: relocation R_X86_64_32 against `a local symbol' can
not be used when making a shared object; recompile with -fPIC
tmp/cbdsqr.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
It appears this problem is caused by the fact that the LAPACK library that is
being used was not compiled with the PIC flag. I have proposed changes to the
lapack package, and the maintainer has requested a new build of lapack. Some
minor changes to atlas.spec were also necessary. The updated files have been
uploaded, but in order to compile them, you will need install the new
lapack-devel, which will probably be released to the mirrors by tomorrow (or you
can get it now from the build system).
Things are improving. :-)
Now it fails like this:
+ ar x /usr/lib64/liblapack_pic.a
ar: /usr/lib64/liblapack_pic.a: No such file or directory
OK, the problem is again with the LAPACK library. The new lapack.spec compiles,
but doesn't install the liblapack_pic.a library. I have sent a patch to the
maintainer, and this should now work properly with lapack-3.0-31 when it is
Review for release 5:
* RPM name is OK
* Source atlas3.6.0.tar.bz2 is the same as upstream
* This is the latest version
* The license is correct, and it is included in the package
* Builds fine in mock
* rpmlint of atlas looks OK
* rpmlint of atlas-devel looks OK
* File list of atlas looks OK
* File list of atlas-devel looks OK
* BuildRoot should be
* Missing SMP flags. If it doesn't build with it, please add a comment
Approved. You can fix the remaining problems after importing the package.
A successful build has just completed on devel. A FC-4 branch has been requested.
Package Change Request
Package Name: atlas
New Branches: EL-5