2015-09-27 4 views
1

Я прочесываю голову больше недели, не отвечая на вопрос. Я хочу построить R от cran источник с Intel MKL1 как общая библиотека. Вот небольшой скрипт, я использую, чтобы проверить мою конфигурацию:build R из источника: не удалось связаться с общими библиотеками

#! /bin/sh 
export MKL=/opt/intel/compilers_and_libraries_2016.0.109/linux/mkl 
MKL=" -L${_mkllibpath} \ 
-Wl,--start-group \ 
    -lmkl_gf_lp64 \ 
    -lmkl_gnu_thread \ 
    -lmkl_core \ 
-Wl,--end-group \ 
-lgomp -lpthread" 

./configure --prefix=/usr \ 
--libdir=/usr/lib \ 
--datarootdir=/usr/share \ 
rsharedir=/usr/share/R/ \ 
rincludedir=/usr/include/R/ \ 
rdocdir=/usr/share/doc/R/ \ 
--with-blas="${MKL}" \ 
--with-lapack \ 
--enable-R-shlib 

make -j4 

Этот небольшой скрипт сделать следующее:

  1. сборки R с НКУ и gfortran на x86_64
  2. сборки R с гну нитями
  3. экспортировать путь к библиотекам Intel MKL
  4. динамически связывать BLAS с Intel MKL

Теперь часть, где я начинаю сходить с ума. Об одной системы, Archlinux, сборка позволит мне со следующим выходом из LDD вбежал в каталоге сборки

$ ldd bin/exec/R 
..... 
libmkl_gf_lp64.so => /opt/intel/mkl/lib/intel64/libmkl_gf_lp64.so (0x00007f7707797000) 
libmkl_core.so => /opt/intel/mkl/lib/intel64/libmkl_core.so (0x00007f7705c2a000) 
libmkl_gnu_thread.so => /opt/intel/mkl/lib/intel64/libmkl_gnu_thread.so (0x00007f7704ed3000) 
libimf.so => /opt/intel/lib/libimf.so (0x00007f7704814000) 
libintlc.so.5 => /opt/intel/lib/libintlc.so.5 (0x00007f770284b000) 
....... 

Это именно то, что я искал. Теперь тот же скрипт с Intel MKL установлен на одном пути, запущен на Fedora22.

$ ldd bin/exec/R 
linux-vdso.so.1 (0x00007ffe9a9c5000) 
libR.so => /usr/lib64/R/lib/libR.so (0x00007f45d9b69000) 
libgomp.so.1 => /lib64/libgomp.so.1 (0x00007f45d9947000) 
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f45d972a000) 
libc.so.6 => /lib64/libc.so.6 (0x00007f45d936a000) 
libblas.so.3 => /lib64/libblas.so.3 (0x00007f45d9111000) 
libgfortran.so.3 => /lib64/libgfortran.so.3 (0x00007f45d8de5000) 
...... 

Как видно, ссылки не связаны с Intel MKL.

Я играл со всеми видами опций, с LD_PATHS, с вариантами компоновщика и т. Д .; Я проверил переменные среды; Я проверил кеш ldconfig; и т. д. Все еще невозможно получить правильную связь с Fedora.

Я хотел бы получить любые подсказки, на которых можно найти корень моей проблемы.

ответ

1

После многих попыток, ниже правильный скрипт для сборки R-КРАН с Intel MKL и ICC:

#! /bin/sh 

source /opt/intel/compilers_and_libraries_2016.0.109/linux/bin/mklvars intel64 
source /opt/intel/bin/compilervars.sh intel64 
_icclibpath=/opt/intel/compilers_and_libraries_2016.0.109/linux/compiler/intel64/      
_mkllibpath=${MKLROOT}/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 

Примечание:

  1. сценарий прописан для Parallel Studio 2016. Изменение пути соответственно, если composerxe 2015.
  2. libRlib и libRblas могут быть созданы как общие или статические librairies.
  3. Дополнительные параметры могут быть добавлены для настройки.
  4. Лучше всего использовать mklvars и compilervars в скрипте, так что он не будет защищает среду оболочки после завершения сборки.

 Смежные вопросы

  • Нет связанных вопросов^_^