Difference between revisions of "ATLAS"
(→Optional: Update about ATLAS / gcc-4.x performance) |
Weibullguy (talk | contribs) (Complete re-write for new ATLAS version.) |
||
Line 1: | Line 1: | ||
− | {| style="text-align: left; background-color: AliceBlue;" | + | {|style="text-align: left; background-color: AliceBlue;" |
|- | |- | ||
!Download Source: | !Download Source: | ||
− | | http:// | + | |http://downloads.sourceforge.net/math-atlas/atlas{{ATLAS-Version}}.tar.bz2 |
|- | |- | ||
− | !Download | + | !Download Patch: |
− | | http:// | + | |http://svn.cross-lfs.org/svn/repos/patches/atlas-{{ATLAS-Version}}/atlas-{{ATLAS-Version}}-shared-libs-1.patch |
+ | |- | ||
+ | !Download Patch: | ||
+ | |http://svn.cross-lfs.org/svn/repos/patches/atlas-{{ATLAS-Version}}/atlas-{{ATLAS-Version}}-decl-fix-1.patch | ||
|} | |} | ||
---- | ---- | ||
− | {{Package-Introduction|BLAS are '''B'''asic '''L'''inear '''A'''lgebra '''S'''ubprograms written in | + | {{Package-Introduction|BLAS are '''B'''asic '''L'''inear '''A'''lgebra '''S'''ubprograms written in Fortran. There are Level 1 (scalar and vector operations), Level 2 (scalar-matrix operations) and Level 3 (matrix-matrix operations) subprograms. ATLAS (Automatically Tuned Linear Algebra Software) will provide C and FORTRAN interfaces to a BLAS implementation optimized for a specific machine architecture. The ideal source of BLAS and LAPACK libraries are those provided by the microprocesor vendor such as AMD's [[ACML]]. However, these are not provided under a license that allows re-distribution without written consent from the vendor.|http://www.netlib.org/blas/}} |
− | + | == Configuration Information == | |
− | + | Patch the package: | |
− | + | patch -Np1 -i ../atlas-{{ATLAS-Version}}-decl-fix-1.patch && | |
+ | patch -Np1 -i ../atlas-{{ATLAS-Version}}-shared-libs-1.patch | ||
− | = | + | Create a wrapper script to assist in building the shared libraries: |
+ | |||
+ | export BUILD_DIR=CBLFS-build && | ||
+ | mkdir -pv ${BUILD_DIR} && | ||
+ | cd ${BUILD_DIR} | ||
− | + | cat > war << "EOF" | |
+ | #! /bin/bash | ||
+ | # | ||
+ | # war -- wrapper for the archiver | ||
+ | # | ||
+ | # Executed by ATLAS build as: | ||
+ | # full_path/war ARCHIVER ARFLAGS LIBNAME.a OBJS.lo | ||
+ | |||
+ | TOPDIR=$(echo $0 | sed 's/\(.*\)\/.*/\1/') | ||
+ | PWD=$(pwd) | ||
+ | |||
+ | ARCHIVER=$1 | ||
+ | LIBRARY=$(echo $3 | sed 's/.*\/\(.*\)/\1/') | ||
+ | OBJ_DIR=${TOPDIR}/CBLFS/$LIBRARY | ||
+ | |||
+ | if [ ! -x $OBJ_DIR ]; then mkdir -p ${OBJ_DIR}/.libs; fi | ||
+ | |||
+ | $ARCHIVER $@ | ||
+ | |||
+ | shift 3 | ||
+ | for obj in $@ ; do | ||
+ | lobj=$(echo $obj | sed 's/\.o/\.lo/') | ||
+ | ln -sf ${PWD}/$obj ${OBJ_DIR}/$obj | ||
+ | ln -sf ${PWD}/$lobj ${OBJ_DIR}/$lobj | ||
+ | ln -sf ${PWD}/.libs/$obj ${OBJ_DIR}/.libs/$obj | ||
+ | done | ||
+ | EOF | ||
− | + | Make the script executable: | |
− | + | chmod a+x war | |
== Non-Multilib == | == Non-Multilib == | ||
+ | {{Note|Either create a BUILD variable similar to the multiarch BUILD32, BUILDN32, and BUILD64 with compiler options or replace ${BUILD} in the configure flags below with your compiler options directly.}} | ||
+ | |||
+ | {{Note|Replace the <BITS> in the configure command below with 32 or 64 as appropriate for your non-multilib architecture.}} | ||
+ | |||
Compile the package: | Compile the package: | ||
− | + | ../configure --cc=gcc --cflags="${BUILD}" --prefix=/usr --incdir=/usr/include/atlas \ | |
+ | -C ac gcc -F ac "${BUILD}" -C if gfortran -F if "${BUILD}" -Ss pmake "\make -j3" \ | ||
+ | -Si cputhrchk 0 -b <BITS> && | ||
+ | make && | ||
+ | export RPATH=/usr/lib/blas/atlas && | ||
+ | make LIBDIR=/usr/lib RPATH="${RPATH}" shared | ||
− | + | Timing tests are critical for optimizing the performance of the libraries for your machine. Do not skip the tests. | |
+ | |||
+ | for i in F77 C; do | ||
+ | cd interfaces/blas/${i}/testing | ||
+ | make sanity_test | ||
+ | if <nowiki>[[ -d CBLFS/libptf77blas.a ]]</nowiki>; then | ||
+ | make ptsanity_test | ||
+ | fi | ||
+ | done | ||
+ | cd ../../../../ | ||
+ | make time | ||
Install the package: | Install the package: | ||
− | + | mkdir -pv ${RPATH} && | |
− | + | cd ./CBLFS/libs && | |
− | + | cp -vP libatlas* ${RPATH} && | |
− | + | cp -vP *blas* ${RPATH} && | |
− | + | mkdir -pv /usr/include/atlas && | |
− | + | install -v ../../../include/cblas.h /usr/include/atlas && | |
− | + | install -v ../../../include/atlas_misc.h /usr/include/atlas && | |
− | + | install -v ../../../include/atlas_enum.h /usr/include/atlas && | |
− | + | install -v ../../include/*.h /usr/include/atlas | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Multilib == | == Multilib == | ||
Line 61: | Line 105: | ||
Compile the package: | Compile the package: | ||
− | + | ../configure --cc=gcc --cflags="${BUILD32}" --prefix=/usr --libdir=/usr/lib64 --incdir=/usr/include/atlas \ | |
+ | -C ac gcc -F ac "${BUILD32}" -C if gfortran -F if "${BUILD32}" -Ss pmake "\make -j3" -Si cputhrchk 0 -b 32 && | ||
+ | make && | ||
+ | export RPATH=/usr/lib/blas/atlas && | ||
+ | make LIBDIR=/usr/lib RPATH="${RPATH}" shared | ||
+ | |||
+ | Timing tests are critical for optimizing the performance of the libraries for your machine. Do not skip the tests. | ||
− | + | for i in F77 C; do | |
+ | cd interfaces/blas/${i}/testing | ||
+ | make sanity_test | ||
+ | if <nowiki>[[ -d CBLFS/libptf77blas.a ]]</nowiki>; then | ||
+ | make ptsanity_test | ||
+ | fi | ||
+ | done | ||
+ | cd ../../../../ | ||
+ | make time | ||
Install the package: | Install the package: | ||
− | + | mkdir -pv ${RPATH} && | |
− | + | cd ./CBLFS/libs && | |
− | + | cp -vP libatlas* ${RPATH} && | |
− | + | cp -vP *blas* ${RPATH} && | |
− | + | mkdir -pv /usr/include/atlas && | |
− | + | install -v ../../../include/cblas.h /usr/include/atlas && | |
− | + | install -v ../../../include/atlas_misc.h /usr/include/atlas && | |
− | + | install -v ../../../include/atlas_enum.h /usr/include/atlas && | |
− | + | install -v ../../include/*.h /usr/include/atlas | |
− | |||
− | |||
=== N32 === | === N32 === | ||
Line 83: | Line 139: | ||
Compile the package: | Compile the package: | ||
− | + | ../configure --cc=gcc --cflags="${BUILDN32}" --prefix=/usr --libdir=/usr/lib64 --incdir=/usr/include/atlas \ | |
+ | -C ac gcc -F ac "${BUILDN32}" -C if gfortran -F if "${BUILDN32}" -Ss pmake "\make -j3" -Si cputhrchk 0 -b 32 && | ||
+ | make && | ||
+ | export RPATH=/usr/lib32/blas/atlas && | ||
+ | make LIBDIR=/usr/lib32 RPATH="${RPATH}" shared | ||
− | + | Timing tests are critical for optimizing the performance of the libraries for your machine. Do not skip the tests. | |
+ | |||
+ | for i in F77 C; do | ||
+ | cd interfaces/blas/${i}/testing | ||
+ | make sanity_test | ||
+ | if <nowiki>[[ -d CBLFS/libptf77blas.a ]]</nowiki>; then | ||
+ | make ptsanity_test | ||
+ | fi | ||
+ | done | ||
+ | cd ../../../../ | ||
+ | make time | ||
Install the package: | Install the package: | ||
− | + | mkdir -pv ${RPATH} && | |
− | + | cd ./CBLFS/libs && | |
− | + | cp -vP libatlas* ${RPATH} && | |
− | + | cp -vP *blas* ${RPATH} && | |
− | + | mkdir -pv /usr/include/atlas && | |
− | + | install -v ../../../include/cblas.h /usr/include/atlas && | |
− | + | install -v ../../../include/atlas_misc.h /usr/include/atlas && | |
− | + | install -v ../../../include/atlas_enum.h /usr/include/atlas && | |
− | + | install -v ../../include/*.h /usr/include/atlas | |
− | |||
− | |||
=== 64Bit === | === 64Bit === | ||
Line 105: | Line 173: | ||
Compile the package: | Compile the package: | ||
− | + | ../configure --cc=gcc --cflags="${BUILD64}" --prefix=/usr --libdir=/usr/lib64 --incdir=/usr/include/atlas \ | |
+ | -C ac gcc -F ac "${BUILD64}" -C if gfortran -F if "${BUILD64}" -Ss pmake "\make -j3" -Si cputhrchk 0 -b 64 && | ||
+ | make && | ||
+ | export RPATH=/usr/lib64/blas/atlas && | ||
+ | make LIBDIR=/usr/lib64 RPATH="${RPATH}" shared | ||
− | + | Timing tests are critical for optimizing the performance of the libraries for your machine. Do not skip the tests. | |
+ | |||
+ | for i in F77 C; do | ||
+ | cd interfaces/blas/${i}/testing | ||
+ | make sanity_test | ||
+ | if <nowiki>[[ -d CBLFS/libptf77blas.a ]]</nowiki>; then | ||
+ | make ptsanity_test | ||
+ | fi | ||
+ | done | ||
+ | cd ../../../../ | ||
+ | make time | ||
Install the package: | Install the package: | ||
− | + | mkdir -pv ${RPATH} && | |
− | + | cd ./CBLFS/libs && | |
+ | cp -vP libatlas* ${RPATH} && | ||
+ | cp -vP *blas* ${RPATH} && | ||
+ | mkdir -pv /usr/include/atlas && | ||
+ | install -v ../../../include/cblas.h /usr/include/atlas && | ||
+ | install -v ../../../include/atlas_misc.h /usr/include/atlas && | ||
+ | install -v ../../../include/atlas_enum.h /usr/include/atlas && | ||
+ | install -v ../../include/*.h /usr/include/atlas | ||
+ | |||
+ | == Configuration Information == | ||
− | + | Create and install pkgconfig metadata files: | |
+ | |||
+ | cat > blas.pc.in << "EOF" | ||
+ | prefix=/usr | ||
+ | exec_prefix=${prefix} | ||
+ | libdir=/usr/<LIB>/blas/atlas | ||
+ | includedir=${prefix}/include | ||
+ | |||
+ | Name: blas | ||
+ | Description: Automatically Tuned Linear Algebra Software F77 BLAS implementation | ||
+ | Version: 3.8.0 | ||
+ | URL: http://math-atlas.sourceforge.net/ | ||
+ | Libs: -L${libdir} -lblas -latlas | ||
+ | Libs.private: -lm -lgfortran | ||
+ | EOF | ||
+ | |||
+ | cat > cblas.pc.in << "EOF" | ||
+ | prefix=/usr | ||
+ | exec_prefix=${prefix} | ||
+ | libdir=/usr/<LIB>/blas/atlas | ||
+ | includedir=${prefix}/include | ||
+ | |||
+ | Name: cblas | ||
+ | Description: Automatically Tuned Linear Algebra Software C BLAS implementation | ||
+ | Version: 3.8.0 | ||
+ | URL: http://math-atlas.sourceforge.net/ | ||
+ | Libs: -L${libdir} -lcblas -latlas | ||
+ | Libs.private: -lm -lgfortran | ||
+ | Cflags: -I${includedir} | ||
+ | EOF | ||
− | + | === Non-Multilib or 32-Bit === | |
− | + | sed -i 's/<LIB>/lib/' blas.pc.in && | |
− | + | sed -i 's/<LIB>/lib/' cblas.pc.in && | |
− | + | cp -v blas.pc.in /usr/lib/pkgconfig/blas.pc && | |
− | + | cp -v cblas.pc.in /usr/lib/pkgconfig/cblas.pc | |
− | + | === N32 === | |
− | + | sed -i 's/<LIB>/lib32/' blas.pc.in && | |
− | + | sed -i 's/<LIB>/lib32/' cblas.pc.in && | |
− | + | cp -v blas.pc.in /usr/lib32/pkgconfig/blas.pc && | |
− | + | cp -v cblas.pc.in /usr/lib32/pkgconfig/cblas.pc | |
+ | |||
+ | === 64-Bit === | ||
+ | sed -i 's/<LIB>/lib64/' blas.pc.in && | ||
+ | sed -i 's/<LIB>/lib64/' cblas.pc.in && | ||
+ | cp -v blas.pc.in /usr/lib64/pkgconfig/blas.pc && | ||
+ | cp -v cblas.pc.in /usr/lib64/pkgconfig/cblas.pc | ||
+ | |||
== Contents == | == Contents == | ||
Line 135: | Line 262: | ||
|-valign="top"; | |-valign="top"; | ||
!Installed Libraries: | !Installed Libraries: | ||
− | | libatlas.a, libcblas.a, | + | | libatlas.{a,so}, libcblas.{a,so}, libblas{.a,so} |
|} | |} | ||
Line 142: | Line 269: | ||
{|style="text-align: left" | {|style="text-align: left" | ||
|-valign="top" | |-valign="top" | ||
− | !libatlas | + | !libatlas |
− | | | + | |is the main ATLAS library, providing low-level routines for all interface libraries. |
− | |||
− | |||
− | |||
|-valign="top" | |-valign="top" | ||
− | ! | + | !libcblas |
− | | | + | |is the C library with optimized BLAS functions. |
|-valign="top" | |-valign="top" | ||
− | ! | + | !libblas |
− | | | + | |is the FORTRAN library with optimized BLAS functions. |
|} | |} |
Revision as of 23:16, 1 November 2007
Contents
Introduction to ATLAS
BLAS are Basic Linear Algebra Subprograms written in Fortran. There are Level 1 (scalar and vector operations), Level 2 (scalar-matrix operations) and Level 3 (matrix-matrix operations) subprograms. ATLAS (Automatically Tuned Linear Algebra Software) will provide C and FORTRAN interfaces to a BLAS implementation optimized for a specific machine architecture. The ideal source of BLAS and LAPACK libraries are those provided by the microprocesor vendor such as AMD's ACML. However, these are not provided under a license that allows re-distribution without written consent from the vendor.
Project Homepage: http://www.netlib.org/blas/
Configuration Information
Patch the package:
patch -Np1 -i ../atlas-3.8.0-decl-fix-1.patch && patch -Np1 -i ../atlas-3.8.0-shared-libs-1.patch
Create a wrapper script to assist in building the shared libraries:
export BUILD_DIR=CBLFS-build && mkdir -pv ${BUILD_DIR} && cd ${BUILD_DIR}
cat > war << "EOF" #! /bin/bash # # war -- wrapper for the archiver # # Executed by ATLAS build as: # full_path/war ARCHIVER ARFLAGS LIBNAME.a OBJS.lo TOPDIR=$(echo $0 | sed 's/\(.*\)\/.*/\1/') PWD=$(pwd) ARCHIVER=$1 LIBRARY=$(echo $3 | sed 's/.*\/\(.*\)/\1/') OBJ_DIR=${TOPDIR}/CBLFS/$LIBRARY if [ ! -x $OBJ_DIR ]; then mkdir -p ${OBJ_DIR}/.libs; fi $ARCHIVER $@ shift 3 for obj in $@ ; do lobj=$(echo $obj | sed 's/\.o/\.lo/') ln -sf ${PWD}/$obj ${OBJ_DIR}/$obj ln -sf ${PWD}/$lobj ${OBJ_DIR}/$lobj ln -sf ${PWD}/.libs/$obj ${OBJ_DIR}/.libs/$obj done EOF
Make the script executable:
chmod a+x war
Non-Multilib
Compile the package:
../configure --cc=gcc --cflags="${BUILD}" --prefix=/usr --incdir=/usr/include/atlas \ -C ac gcc -F ac "${BUILD}" -C if gfortran -F if "${BUILD}" -Ss pmake "\make -j3" \ -Si cputhrchk 0 -b <BITS> && make && export RPATH=/usr/lib/blas/atlas && make LIBDIR=/usr/lib RPATH="${RPATH}" shared
Timing tests are critical for optimizing the performance of the libraries for your machine. Do not skip the tests.
for i in F77 C; do cd interfaces/blas/${i}/testing make sanity_test if [[ -d CBLFS/libptf77blas.a ]]; then make ptsanity_test fi done cd ../../../../ make time
Install the package:
mkdir -pv ${RPATH} && cd ./CBLFS/libs && cp -vP libatlas* ${RPATH} && cp -vP *blas* ${RPATH} && mkdir -pv /usr/include/atlas && install -v ../../../include/cblas.h /usr/include/atlas && install -v ../../../include/atlas_misc.h /usr/include/atlas && install -v ../../../include/atlas_enum.h /usr/include/atlas && install -v ../../include/*.h /usr/include/atlas
Multilib
32Bit
Compile the package:
../configure --cc=gcc --cflags="${BUILD32}" --prefix=/usr --libdir=/usr/lib64 --incdir=/usr/include/atlas \ -C ac gcc -F ac "${BUILD32}" -C if gfortran -F if "${BUILD32}" -Ss pmake "\make -j3" -Si cputhrchk 0 -b 32 && make && export RPATH=/usr/lib/blas/atlas && make LIBDIR=/usr/lib RPATH="${RPATH}" shared
Timing tests are critical for optimizing the performance of the libraries for your machine. Do not skip the tests.
for i in F77 C; do cd interfaces/blas/${i}/testing make sanity_test if [[ -d CBLFS/libptf77blas.a ]]; then make ptsanity_test fi done cd ../../../../ make time
Install the package:
mkdir -pv ${RPATH} && cd ./CBLFS/libs && cp -vP libatlas* ${RPATH} && cp -vP *blas* ${RPATH} && mkdir -pv /usr/include/atlas && install -v ../../../include/cblas.h /usr/include/atlas && install -v ../../../include/atlas_misc.h /usr/include/atlas && install -v ../../../include/atlas_enum.h /usr/include/atlas && install -v ../../include/*.h /usr/include/atlas
N32
Compile the package:
../configure --cc=gcc --cflags="${BUILDN32}" --prefix=/usr --libdir=/usr/lib64 --incdir=/usr/include/atlas \ -C ac gcc -F ac "${BUILDN32}" -C if gfortran -F if "${BUILDN32}" -Ss pmake "\make -j3" -Si cputhrchk 0 -b 32 && make && export RPATH=/usr/lib32/blas/atlas && make LIBDIR=/usr/lib32 RPATH="${RPATH}" shared
Timing tests are critical for optimizing the performance of the libraries for your machine. Do not skip the tests.
for i in F77 C; do cd interfaces/blas/${i}/testing make sanity_test if [[ -d CBLFS/libptf77blas.a ]]; then make ptsanity_test fi done cd ../../../../ make time
Install the package:
mkdir -pv ${RPATH} && cd ./CBLFS/libs && cp -vP libatlas* ${RPATH} && cp -vP *blas* ${RPATH} && mkdir -pv /usr/include/atlas && install -v ../../../include/cblas.h /usr/include/atlas && install -v ../../../include/atlas_misc.h /usr/include/atlas && install -v ../../../include/atlas_enum.h /usr/include/atlas && install -v ../../include/*.h /usr/include/atlas
64Bit
Compile the package:
../configure --cc=gcc --cflags="${BUILD64}" --prefix=/usr --libdir=/usr/lib64 --incdir=/usr/include/atlas \ -C ac gcc -F ac "${BUILD64}" -C if gfortran -F if "${BUILD64}" -Ss pmake "\make -j3" -Si cputhrchk 0 -b 64 && make && export RPATH=/usr/lib64/blas/atlas && make LIBDIR=/usr/lib64 RPATH="${RPATH}" shared
Timing tests are critical for optimizing the performance of the libraries for your machine. Do not skip the tests.
for i in F77 C; do cd interfaces/blas/${i}/testing make sanity_test if [[ -d CBLFS/libptf77blas.a ]]; then make ptsanity_test fi done cd ../../../../ make time
Install the package:
mkdir -pv ${RPATH} && cd ./CBLFS/libs && cp -vP libatlas* ${RPATH} && cp -vP *blas* ${RPATH} && mkdir -pv /usr/include/atlas && install -v ../../../include/cblas.h /usr/include/atlas && install -v ../../../include/atlas_misc.h /usr/include/atlas && install -v ../../../include/atlas_enum.h /usr/include/atlas && install -v ../../include/*.h /usr/include/atlas
Configuration Information
Create and install pkgconfig metadata files:
cat > blas.pc.in << "EOF" prefix=/usr exec_prefix=${prefix} libdir=/usr/<LIB>/blas/atlas includedir=${prefix}/include Name: blas Description: Automatically Tuned Linear Algebra Software F77 BLAS implementation Version: 3.8.0 URL: http://math-atlas.sourceforge.net/ Libs: -L${libdir} -lblas -latlas Libs.private: -lm -lgfortran EOF cat > cblas.pc.in << "EOF" prefix=/usr exec_prefix=${prefix} libdir=/usr/<LIB>/blas/atlas includedir=${prefix}/include Name: cblas Description: Automatically Tuned Linear Algebra Software C BLAS implementation Version: 3.8.0 URL: http://math-atlas.sourceforge.net/ Libs: -L${libdir} -lcblas -latlas Libs.private: -lm -lgfortran Cflags: -I${includedir} EOF
Non-Multilib or 32-Bit
sed -i 's/<LIB>/lib/' blas.pc.in && sed -i 's/<LIB>/lib/' cblas.pc.in && cp -v blas.pc.in /usr/lib/pkgconfig/blas.pc && cp -v cblas.pc.in /usr/lib/pkgconfig/cblas.pc
N32
sed -i 's/<LIB>/lib32/' blas.pc.in && sed -i 's/<LIB>/lib32/' cblas.pc.in && cp -v blas.pc.in /usr/lib32/pkgconfig/blas.pc && cp -v cblas.pc.in /usr/lib32/pkgconfig/cblas.pc
64-Bit
sed -i 's/<LIB>/lib64/' blas.pc.in && sed -i 's/<LIB>/lib64/' cblas.pc.in && cp -v blas.pc.in /usr/lib64/pkgconfig/blas.pc && cp -v cblas.pc.in /usr/lib64/pkgconfig/cblas.pc
Contents
Installed Libraries: | libatlas.{a,so}, libcblas.{a,so}, libblas{.a,so} |
---|
Short Description
libatlas | is the main ATLAS library, providing low-level routines for all interface libraries. |
---|---|
libcblas | is the C library with optimized BLAS functions. |
libblas | is the FORTRAN library with optimized BLAS functions. |