From arnaud.gaboury at gmail.com  Sun Oct 11 18:55:57 2015
From: arnaud.gaboury at gmail.com (arnaud gaboury)
Date: Sun, 11 Oct 2015 18:55:57 +0200
Subject: [Rd] Build R with MKL and ICC
In-Reply-To: <CAK1hC9uEvrvsAob9hPUaFM1RVY8dYWun3udfqZT21fw2Gy1SpQ@mail.gmail.com>
References: <CAK1hC9uLYSyA-7W92TwD4J9adcxDRE1a2ig1iDDPSyN43kikyg@mail.gmail.com>
	<CAK1hC9u0btbbXGR3+OAcAd5n3SbFwUHoH+YsT5FzVpaeyZWdEQ@mail.gmail.com>
	<1441382281.4083.26.camel@iarc.fr>
	<CAK1hC9vg0SePBhEbp-Xpt8W1BDH-kY3XTLr39ZHCp2k2MHxUhA@mail.gmail.com>
	<1441621388.4083.54.camel@iarc.fr>
	<CAFAN8vw53p+dCnr_LroKZbQMw66kwMiXypNBJAZVHhW998Di2g@mail.gmail.com>
	<CAK1hC9sZKdaWTGxCDQhhPa-nJARfd-WG=ivi8gWpLiL-4BA8VQ@mail.gmail.com>
	<CAFAN8vz0H9TZ4Q3+dkoaMWvrJvK9O9g3=ioXWDS6zCM+YFqfbA@mail.gmail.com>
	<CAK1hC9uEvrvsAob9hPUaFM1RVY8dYWun3udfqZT21fw2Gy1SpQ@mail.gmail.com>
Message-ID: <CAK1hC9txrScpYCsg1E-2eyT=UG3Rg_LH2rcmaTqA--r4v1oK6A@mail.gmail.com>

On Wed, Sep 30, 2015 at 12:18 PM, arnaud gaboury
<arnaud.gaboury at gmail.com> wrote:
> On Tue, Sep 29, 2015 at 8:11 PM, Nathan Kurz <nate at verse.com> wrote:
>> Hi Arnaud --
>>
>> I'm glad it's working for you.  I'm not sure I understand your final
>> answer.  Are you saying that the version I posted worked for you as
>> given, or that you had to remove some of the other options?
>
> I say it works perfectly when using the single dynamic library
> (lmkl_rt):  MKL=" -L${_mkllibpath} -lmkl_rt -lpthread -lm"
> N.B: not sure the -lm is needed, and It builds without it. It seems it
> may trigger some issues on. See[0]. Thus I removed it
>
>> Perhaps you could post the full final recipe in a way that others can
>> copy and paste if they find this thread in the future?
>
> Here it is. The script is writen for Parallel studio 2016. Change path
> accordingly if composerxe 2015.
> libRlib and libRblas are build as shared librairies. It build with
> static libraries too.
> More options can be added to configure.
> Best is to source mklvars and compilervars in a script so it won't
> polluated your shell environment once the build is done.
>
> ---------------------------------------------------------------
> #! /bin/sh
>
> source /opt/intel/compilers_and_libraries_2016.0.109/linux/mkl/bin/mklvars.sh
> intel64
> source /opt/intel/bin/compilervars.sh intel64
>
> _icclibpath=/opt/intel/compilers_and_lbraries_2016.0.109/linux/compiler/lib/intel64/
> _mkllibpath=${MKLROOT}/lib/intel64/
> _omp_lib=/opt/intel/lib/intel64/
>
> MKL=" -L${_mkllibpath} -lmkl_rt -lpthread"
>
> export CC="icc"
> export CXX="icpc"
> export AR="xiar"
> export LD="xild"
> export F77="ifort"
>
> export CFLAGS="-g -O3 -xHost -I${MKLROOT}/include"
> export CXXFLAGS="-g -O3 -xHost -I${MKLROOT}/include"
> export FFLAGS="-I${MKLROOT}/include"
> export FCFLAGS="-I${MKLROOT}/include"
>
> # shared libs
> ./configure --with-blas="${MKL}" --enable-R-shlib --enable-BLAS-shlib
> # static libs
> ./configure --with-blas="${MKL}" --with-lapack
>
> make -j4
> ----------------------------------------------------------------------------------------------
>
> from inside the build folder:
> -------------------------
> $ldd bin/exec/R
> linux-vdso.so.1 (0x00007ffc1e853000)
> libR.so => /usr/lib64/R/lib/libR.so (0x00007f747091f000)
> libRblas.so => not found         !! is not yet installed in the machine !!
> libm.so.6 => /lib64/libm.so.6 (0x00007f7470616000)
> libiomp5.so => /opt/intel/lib/intel64_lin/libiomp5.so (0x00007f74702d5000)
> libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f74700be000)
> libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f746fea1000)
> libc.so.6 => /lib64/libc.so.6 (0x00007f746fae1000)
> libdl.so.2 => /lib64/libdl.so.2 (0x00007f746f8dd000)
> libblas.so.3 => not found         !! we don't need it !!
> libgfortran.so.3 => /lib64/libgfortran.so.3 (0x00007f746f5b1000)
> libquadmath.so.0 => /lib64/libquadmath.so.0 (0x00007f746f372000)
> libreadline.so.6 => /lib64/libreadline.so.6 (0x00007f746f127000)
> libtre.so.5 => /lib64/libtre.so.5 (0x00007f746ef17000)
> libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f746eca7000)
> liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f746ea80000)
> libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f746e870000)
> libz.so.1 => /lib64/libz.so.1 (0x00007f746e65a000)
> librt.so.1 => /lib64/librt.so.1 (0x00007f746e451000)
> libicuuc.so.54 => /lib64/libicuuc.so.54 (0x00007f746e0c0000)
> libicui18n.so.54 => /lib64/libicui18n.so.54 (0x00007f746dc69000)
> libgomp.so.1 => /lib64/libgomp.so.1 (0x00007f746da46000)
> /lib64/ld-linux-x86-64.so.2 (0x000055fcb8058000)
> libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f746d81c000)
> libicudata.so.54 => /lib64/libicudata.so.54 (0x00007f746bdf0000)
> libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f746ba6e000)
>
> $ ldd lib/libRblas.so
> linux-vdso.so.1 (0x00007ffc5f3da000)
> libmkl_rt.so => /opt/intel/mkl/lib/intel64_lin/libmkl_rt.so (0x00007f232203e000)
> libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2321e21000)
> libm.so.6 => /lib64/libm.so.6 (0x00007f2321b19000)
> libimf.so => /opt/intel/lib/intel64_lin/libimf.so (0x00007f2321621000)
> libsvml.so => /opt/intel/lib/intel64_lin/libsvml.so (0x00007f2320762000)
> libirng.so => /opt/intel/lib/intel64_lin/libirng.so (0x00007f2320559000)
> libiomp5.so => /opt/intel/lib/intel64_lin/libiomp5.so (0x00007f2320218000)
> libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f2320001000)
> libintlc.so.5 => /opt/intel/lib/intel64_lin/libintlc.so.5 (0x00007f231fda1000)
> libc.so.6 => /lib64/libc.so.6 (0x00007f231f9e1000)
> libdl.so.2 => /lib64/libdl.so.2 (0x00007f231f7dd000)
> /lib64/ld-linux-x86-64.so.2 (0x000055ce12e09000)
> --------------------------------------------------------------------------
>
>
>>
>> Also, did you determine if the the same approach worked for linking to
>> MKL worked when using a non-Intel compiler?   That is, can you
>> substitute the gcc or clang tool names and get the same result?
>
> No. I was not enable to do it with gcc. More tries are needed with
> some variations.
>>
>> --nate
>>
>> On Tue, Sep 29, 2015 at 9:07 AM, arnaud gaboury
>> <arnaud.gaboury at gmail.com> wrote:
>>> On Wed, Sep 9, 2015 at 11:26 PM, Nathan Kurz <nate at verse.com> wrote:
>>>>
>>>> As a short and simple approach, I just compiled the current R release
>>>> on Ubuntu with ICC and MKL using just this:
>>>>
>>>> $ tar -xzf R-3.2.2.tar.gz
>>>> $ cd R-3.2.2
>>>> $ CC=icc CXX=icpc AR=xiar LD=xild CFLAGS="-g -O3 -xHost" CXXFLAGS="-g
>>>> -O3 -xHost" ./configure --with-blas="-lmkl_rt -lpthread" --with-lapack
>>>> --enable-memory-profiling --enable-R-shlib
>>>> $ make
>>>> $ sudo make install
>>>> $ R --version
>>>> R version 3.2.2 (2015-08-14) -- "Fire Safety"
>>>
>>>
>>> That is exactly the right combo: with-blas="-lmkl_rt -lpthread"
>>> Nothing more for $MKL
>>>
>>> now
>>> $ ldd bin/exec/R
>>> linux-vdso.so.1 (0x00007ffe305f9000)
>>> libmkl_rt.so => /opt/intel/mkl/lib/intel64_lin/libmkl_rt.so (0x00007f216c9e3000)
>>>         .................................
>
>
> [0]https://software.intel.com/en-us/search/site/language/en?query=-lm
> --
>
At least, after so many failed build attempts, R with Intel ICC and
MKL builds, installs and runs fine on Fedora 22.
If anyone is interested in building the rpm packages, please visit my
github[0] for the spec file.

Comments are welcome

[0]https://github.com/gabx/r-project/tree/master/R-mkl


-- 

google.com/+arnaudgabourygabx



[Rd] Build R with MKL and ICC
arnaud gaboury