After some experimentation I found that openblas can be significantly faster
than atlas (at least on AMD64). Combined with the recent introduction of
/usr/ports/Mk/Uses/blaslapack.mk it seemed a good idea to update the numpy
port to enable the use of openblas or atlas or netlib.

A patch to do that is given below. When using openblas, it uses the parallel
version.  I've tested it with atlas and openblas on 10.1-STABLE AMD64.
Portlint gives no errors.

Before I submit a PR, I'd like to ask volunteers for testing on other
releases/architectures as well as testing with the default netlib BLAS/LAPACK.

----- numpy updated to build with blaslapack -----
diff -ruN py-numpy.orig/Makefile py-numpy/Makefile
--- py-numpy.orig/Makefile      2015-01-02 17:36:43.000000000 +0100
+++ py-numpy/Makefile   2015-02-08 17:17:34.000000000 +0100
@@ -3,7 +3,7 @@
 
 PORTNAME=      numpy
 PORTVERSION=   1.9.1
-PORTREVISION=  1
+PORTREVISION=  2
 PORTEPOCH=     1
 CATEGORIES=    math python
 MASTER_SITES=  http://docs.scipy.org/doc/${PORTNAME}/:doc \
@@ -15,7 +15,7 @@
 EXTRACT_ONLY=  numpy-${PORTVERSION:S/r/rc/}${EXTRACT_SUFX}
 
 MAINTAINER=    pyt...@freebsd.org
-COMMENT=       The New Numeric Extension to Python
+COMMENT=       New Numeric Extension to Python
 
 LICENSE=       BSD3CLAUSE
 
@@ -25,9 +25,13 @@
 USE_PYTHON=    concurrent distutils py3kplist
 LDFLAGS+=      -shared
 
-OPTIONS_DEFINE=                ATLAS SUITESPARSE DOCS
-OPTIONS_DEFAULT=       SUITESPARSE
-ATLAS_DESC=            Use optimized blas library
+OPTIONS_DEFINE=                SUITESPARSE DOCS
+OPTIONS_DEFAULT=       SUITESPARSE CBLAS
+OPTIONS_SINGLE=                BLAS
+OPTIONS_SINGLE_BLAS=   CBLAS OPENBLAS ATLAS
+CBLAS_DESC=            Use math/cblas as BLAS library
+OPENBLAS_DESC=         Use math/openblas as (optimized) BLAS library
+ATLAS_DESC=            Use math/atlas as (optimized) BLAS library
 SUITESPARSE_DESC=      Use AMD and UMFPACK in SuiteSparse
 
 PYDISTUTILS_CONFIGUREARGS+=    --fcompiler=gnu95
@@ -36,9 +40,9 @@
 PORTDOCS=      *
 WRKSRC=                ${WRKDIR}/${DISTNAME:S/r/rc/}
 
-ATLAS_LIB_DEPENDS=     libatlas.so:${PORTSDIR}/math/atlas
-ATLAS_LIB_DEPENDS_OFF= libblas.so:${PORTSDIR}/math/blas \
-                       liblapack.so:${PORTSDIR}/math/lapack
+ATLAS_USES=    blaslapack:atlas
+OPENBLAS_USES= blaslapack:openblas
+CBLAS_USES=    blaslapack
 SUITESPARSE_LIB_DEPENDS=libumfpack.so:${PORTSDIR}/math/suitesparse
 
 .include <bsd.port.pre.mk>
@@ -50,21 +54,21 @@
 
 post-patch:
        ${REINPLACE_CMD} -e "s+%%FC%%+${FC}+" 
${WRKSRC}/numpy/distutils/fcompiler/gnu.py
-       ${CP} ${FILESDIR}/site.cfg ${WRKSRC}/site.cfg
-
-GCCLIBDIR_CMDS=        ${FC} -print-file-name=libgfortran.so|${SED} -e 
s/libgfortran.so//
-
-pre-configure:
 .if ${PORT_OPTIONS:MATLAS}
-       @${REINPLACE_CMD} -e "s+%%ATLASLIBS%%+alapack, f77blas, cblas, atlas+" 
${WRKSRC}/site.cfg
+       ${CP} ${FILESDIR}/site.cfg.atlas ${WRKSRC}/site.cfg
+.elif ${PORT_OPTIONS:MOPENBLAS}
+       ${CP} ${FILESDIR}/site.cfg.openblas ${WRKSRC}/site.cfg
 .else
-       @${REINPLACE_CMD} -e "s+%%ATLASLIBS%%+lapack, blas+" ${WRKSRC}/site.cfg
+       ${CP} ${FILESDIR}/site.cfg.cblas ${WRKSRC}/site.cfg
 .endif
+GCCLIBDIR_CMDS=        ${FC} -print-file-name=libgfortran.so|${SED} -e 
s/libgfortran.so//
+
+pre-configure:
 .if !${PORT_OPTIONS:MSUITESPARSE}
        @${REINPLACE_CMD} -e "s+:%%LOCALBASE%%/include/suitesparse++" 
${WRKSRC}/site.cfg
 .endif
        @${REINPLACE_CMD} -e "s+%%GCCLIBDIR%%+$$(${GCCLIBDIR_CMDS})+" \
-           -e "s+%%LOCALBASE%%+${LOCALBASE}+g" \
+               -e "s+%%LOCALBASE%%+${LOCALBASE}+g" \
                ${WRKSRC}/site.cfg
        @${REINPLACE_CMD} -e "s+%%GCCLIBDIR%%+$$(${GCCLIBDIR_CMDS})+" 
${WRKSRC}/numpy/distutils/system_info.py
 
diff -ruN py-numpy.orig/files/site.cfg py-numpy/files/site.cfg
--- py-numpy.orig/files/site.cfg        2015-01-02 17:36:43.000000000 +0100
+++ py-numpy/files/site.cfg     1970-01-01 01:00:00.000000000 +0100
@@ -1,10 +0,0 @@
-[DEFAULT]
-lapack_type=atlas
-library_dirs = /usr/lib:%%LOCALBASE%%/lib:%%GCCLIBDIR%%
-include_dirs = 
/usr/include:%%LOCALBASE%%/include:%%LOCALBASE%%/include/suitesparse
-src_dirs = %%LOCALBASE%%/src
-# search static libraries (.a) in preference to shared ones (.so)
-search_static_first = 0
-[atlas]
-library_dirs = %%LOCALBASE%%/lib:%%GCCLIBDIR%%
-atlas_libs = %%ATLASLIBS%%
diff -ruN py-numpy.orig/files/site.cfg.atlas py-numpy/files/site.cfg.atlas
--- py-numpy.orig/files/site.cfg.atlas  1970-01-01 01:00:00.000000000 +0100
+++ py-numpy/files/site.cfg.atlas       2015-02-08 17:19:17.000000000 +0100
@@ -0,0 +1,9 @@
+[DEFAULT]
+lapack_type=atlas
+library_dirs = /usr/lib:%%LOCALBASE%%/lib:%%GCCLIBDIR%%
+include_dirs = 
/usr/include:%%LOCALBASE%%/include:%%LOCALBASE%%/include/suitesparse
+src_dirs = %%LOCALBASE%%/src
+search_static_first = 0
+[atlas]
+library_dirs = %%LOCALBASE%%/lib:%%GCCLIBDIR%%
+atlas_libs = alapack, f77blas, cblas, atlas
diff -ruN py-numpy.orig/files/site.cfg.cblas py-numpy/files/site.cfg.cblas
--- py-numpy.orig/files/site.cfg.cblas  1970-01-01 01:00:00.000000000 +0100
+++ py-numpy/files/site.cfg.cblas       2015-02-08 17:19:30.000000000 +0100
@@ -0,0 +1,5 @@
+[DEFAULT]
+library_dirs = /usr/lib:%%LOCALBASE%%/lib:%%GCCLIBDIR%%
+include_dirs = 
/usr/include:%%LOCALBASE%%/include:%%LOCALBASE%%/include/suitesparse
+src_dirs = %%LOCALBASE%%/src
+search_static_first = 0
diff -ruN py-numpy.orig/files/site.cfg.openblas py-numpy/files/site.cfg.openblas
--- py-numpy.orig/files/site.cfg.openblas       1970-01-01 01:00:00.000000000 
+0100
+++ py-numpy/files/site.cfg.openblas    2015-02-08 17:19:39.000000000 +0100
@@ -0,0 +1,9 @@
+[DEFAULT]
+lapack_type=openblas
+library_dirs = /usr/lib:%%LOCALBASE%%/lib:%%GCCLIBDIR%%
+include_dirs = 
/usr/include:%%LOCALBASE%%/include:%%LOCALBASE%%/include/suitesparse
+src_dirs = %%LOCALBASE%%/src
+search_static_first = 0
+[openblas]
+libraries = openblasp
+library_dirs = %%LOCALBASE%%/lib:%%GCCLIBDIR%%
----- numpy updated to build with blaslapack -----


-- 
R.F.Smith                                   http://rsmith.home.xs4all.nl/
[plain text _non-HTML_ PGP/GnuPG encrypted/signed email much appreciated]
pgp: 5753 3324 1661 B0FE 8D93  FCED 40F6 D5DC A38A 33E0 (keyID: A38A33E0)

Attachment: pgpNVISDnUmBH.pgp
Description: PGP signature

Reply via email to