[R-SIG-Mac] Build R with Intel Compiler

Simon Zehnder szehnder at uni-bonn.de
Fri Nov 8 16:26:14 CET 2013


The DYLD_LIBRARY_PATH gets set by the compilervars.sh from intel and it resolves to:

echo $DYLD_LIBRARY_PATH
/opt/intel/composer_xe_2013_sp1.1.103/compiler/lib:/opt/intel/composer_xe_2013_sp1.1.103/compiler/lib/intel64:/opt/intel:/opt/intel/composer_xe_2013_sp1.1.103/ipp/../compiler/lib:/opt/intel/composer_xe_2013_sp1.1.103/ipp/lib:/opt/intel/composer_xe_2013_sp1.1.103/mkl/lib:/opt/intel/composer_xe_2013_sp1.1.103/tbb/lib

The first path points directly into the directory with the libiomp5.dyiib. So theoretically when following https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryUsageGuidelines.html it should be founded during linking. Though looking into libR.dylib with otool -L I see, that the libraries from Intel are referred to only by name not by path. I think this information gets lost as soon as the dynamic library libR.dylib is build. 

So, I hope I understand “fix the id in the iomp library” correctly: I change via install_name_tool change @executable_path/ … the relative path to an absolute one? 

Best

Simon



On 08 Nov 2013, at 15:19, Simon Urbanek <simon.urbanek at r-project.org> wrote:

> On Nov 8, 2013, at 4:05 AM, Simon Zehnder <szehnder at uni-bonn.de> wrote:
> 
>> Where does R in make install get its libraries/library paths from to be installed? I set DYLD_LIBRARY_PATH and libiomp5.dylib is on that path … Is there another variable to be set (DYLD_FALLBACK_LIBRARY_PATH I want to use only, if no other possibility remains). 
>> 
> 
> Well, you really don't want to set DYLD_LIBRARY_PATH since it breaks dependencies, but that's another topic. However, the error tells you that you don't have it on the path, otherwise you wouldn't get "image not found". Either way, as I said, what you really want is to fix the id in the iomp library so you don't get into the path troubles in the first place. Another way to go about it is to put the Intel dependencies into $R_HOME/lib - I wouldn't do that for development but that's a good option if you want to distribute the build to other machines.
> 
> Cheers,
> Simon
> 
> 
>> Best
>> 
>> Simon
>> On 07 Nov 2013, at 19:52, Simon Urbanek <simon.urbanek at r-project.org> wrote:
>> 
>>> 
>>> On Nov 7, 2013, at 1:30 PM, Simon Zehnder <szehnder at uni-bonn.de> wrote:
>>> 
>>>> Your and Brian’s guesses were right: the -openmp linker flag was it. It compiles now fine, though I get errors in make check-all and make install: 
>>>> 
>>>> Running a make check-all gives me (with and without flag -ipo)
>>>> 
>>>> Running examples in 'mgcv-Ex.R’ failed
>>>> ...
>>>> Loading required package: splines
>>>>> plot(b,pages=1)
>>>>> b<-gamm(y~s(x0,bs="tr",m=2)+s(x1,bs="ps",m=c(1,3))+
>>>> +          s(x2,bs="tr",m=3)+s(x3,bs="tr",m=2),data=dat)
>>>>> plot(b$gam,pages=1)
>>>> Warning in sqrt(rowSums((P$X %*% x$Vp[first:last, first:last, drop = FALSE]) *  :
>>>> NaNs produced
>>>> Error in if (se && pd[[i]]$se) { : missing value where TRUE/FALSE needed
>>>> Calls: plot -> plot.gam
>>>> Execution halted
>>>> 
>>>> A sudo make install gives me:
>>>> 
>>>> /opt/intel/composer_xe_2013_sp1.1.103/bin/intel64/icc -std=gnu99 -I. -I../../src/include -I../../../R-3.0.2/src/include -I/usr/X11/include/ -D__ACCELERATE__ -DHAVE_CONFIG_H    -fPIC  -O3 -ipo -openmp -xHost  -DR_HOME='"/usr/local/R/R-intel/R.framework/Versions/3.0/Resources"' -o Rscript \
>>>> 	  ../../../R-3.0.2/src/unix/Rscript.c
>>>> installing packages ...
>>>> building HTML index ...
>>>> dyld: Library not loaded: libiomp5.dylib
>>> 
>>> ^^ your Intel libs (or at least libiomp5) are missing paths in the id string - probably not installed properly? You can hack around that using DYLD_FALLBACK_LIBRARY_PATH but it's better to fix the issue in libiomp5 directly.
>>> 
>>> 
>>>> Referenced from: /Users/simonzehnder/Downloads/build/bin/exec/R
>>>> Reason: image not found
>>>> /bin/sh: line 1: 87375 Done                    echo "utils:::make.packages.html(.Library, verbose=FALSE, docdir=\"/usr/local/R/R-intel/R.framework/Versions/3.0/Resources/doc\")"
>>>>  87376 Trace/BPT trap: 5       | R_DEFAULT_PACKAGES=NULL LC_ALL=C ../../bin/R --vanilla --slave > /dev/null
>>>> make[2]: *** [install] Error 133
>>>> make[1]: *** [install] Error 1
>>>> make: *** [install] Error 1
>>>> 
>>>> It seems that it is connected with the MKL. I have in my MKL variable “-lmkl_gf_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread. It seems that libiomp5 is not linked to correctly. 
>>>> 
>>>> I uploaded also my config.log to https://gist.github.com/simonsays1980/7359508 
>>>> 
>>>> Best
>>>> 
>>>> Simon
>>>> 
>>>> 
>>>> 
>>>> On 07 Nov 2013, at 15:33, Simon Urbanek <simon.urbanek at r-project.org> wrote:
>>>> 
>>>>> 
>>>>> On Nov 7, 2013, at 7:56 AM, Simon Zehnder <szehnder at uni-bonn.de> wrote:
>>>>> 
>>>>>> I am trying to build R with an Intel Compiler (14.0.3). Has anyone before done it and could give me a hint for the configuration? 
>>>>>> 
>>>>>> I am sourcing the compilervars.sh for Intel and then configure R with 
>>>>>> 
>>>>>> ./R-3.0.2/configure OBJC="clang" --enable-R-framework=/usr/local/R/R-intel --x-includes=/usr/X11/include/ --x-libraries=/usr/X11/lib/ --enable-memory-profiling --with-blas="$MKL" --with-lapack
>>>>>> 
>>>>>> Further Variables are:
>>>>>> 
>>>>>> CFLAGS=“-O3 -ipo -openmp -xHost”
>>>>>> CXXFLAGS=“-O3 -ipo -openmp -xHost”
>>>>>> MKL=“-lmkl_gf_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread”!
>>>>>> 
>>>>>> I get always the same error:
>>>>>> 
>>>>>> /opt/intel/composer_xe_2013_sp1.1.103/bin/intel64/icc -std=gnu99 -I../../../R-3.0.2/src/extra/zlib -I../../../R-3.0.2/src/extra/bzip2 -I../../../R-3.0.2/src/extra/pcre -I../../../R-3.0.2/src/extra  -I../../../R-3.0.2/src/extra/xz/api -I. -I../../src/include -I../../../R-3.0.2/src/include -I/usr/local/include -DHAVE_CONFIG_H    -fPIC  -O3 -ipo -openmp -xHost  -c ../../../R-3.0.2/src/main/Rmain.c -o Rmain.o
>>>>>> /opt/intel/composer_xe_2013_sp1.1.103/bin/intel64/icc -std=gnu99  -L/usr/local/lib -o R.bin Rmain.o  -L../../lib -lR
>>>>>> Undefined symbols for architecture x86_64:
>>>>>> "___kmpc_begin", referenced from:
>>>>>> _main in ipo_icc4xtjyH.o
>>>>>> "___kmpc_end", referenced from:
>>>>>> _main in ipo_icc4xtjyH.o
>>>>>> ld: symbol(s) not found for architecture x86_64
>>>>>> 
>>>>>> Any clue what this could be? 
>>>>>> 
>>>>> 
>>>>> The above certainly won't work, because you're missing linker flags - I'm pretty sure that you must use -openmp in the linker for it to work, I'm not sure about -ipo -- but doesn't R detect all those automatically? I don't think you should put them in manually. The actual error comes from missing libguide link flags, but they may be implicit if you fix the other problem.
>>>>> 
>>>>> Cheers,
>>>>> S
>> 
> 



More information about the R-SIG-Mac mailing list