ATLAS

From CBLFS
Revision as of 00:17, 2 November 2007 by Weibullguy (talk | contribs) (BLAS moved to ATLAS: This is the ATLAS implementation of the BLAS.)
Jump to navigationJump to search
Download Source: http://downloads.sourceforge.net/math-atlas/atlas3.8.0.tar.bz2
Download Patch: http://svn.cross-lfs.org/svn/repos/patches/atlas-3.8.0/atlas-3.8.0-shared-libs-1.patch
Download Patch: http://svn.cross-lfs.org/svn/repos/patches/atlas-3.8.0/atlas-3.8.0-decl-fix-1.patch

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

Caution.png

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.
Caution.png

Note

Replace the <BITS> in the configure command below with 32 or 64 as appropriate for your non-multilib architecture.

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.