xgboost不能与R 3.5.1和OS X 10.12.6并行工作。我遵循了这个instructions。编译C代码时,似乎是openMP OK,但是在R中编译时,找不到-fopenmp
选项,并且并行执行不起作用。
Makevars
cat ~/.R/Makevars
CC=gcc-7
CXX=g++-7
CXX1X=g++-7
CXX11=g++-7
CXX14=g++-7
CXX17=g++-7
SHLIB_OPENMP_CFLAGS=-fopenmp
SHLIB_OPENMP_CXXFLAGS=-fopenmp
SHLIB_OPENMP_FCFLAGS=-fopenmp
SHLIB_OPENMP_FFLAGS=-fopenmp
我也尝试了gcc-8,但没有成功。
实验:
编译C代码:xgboost$ make -j4
=>似乎有效,其中包含-fopenmp
编译器选项:g++-7 -c -DDMLC_LOG_CUSTOMIZE=1 -std=c++11 -Wall -Wno-unknown-pragmas -Iinclude -Idmlc-core/include -Irabit/include -I/include -O3 -funroll-loops -msse2 -fPIC -fopenmp src/common/common.cc -o build/common/common.o
来自源:R-package$ R CMD INSTALL .
=> checking whether OpenMP will work in a package... no
和g++-7 -std=gnu++11 -I"/usr/local/Cellar/r/3.5.1/lib/R/include" -DNDEBUG -I../..//include -I../..//dmlc-core/include -I../..//rabit/include -I../../ -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=1 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/opt/gettext/include -I/usr/local/opt/readline/include -I/usr/local/include -fPIC -g -O2 -c xgboost_R.cc -o xgboost_R.o
似乎R并未考虑Makevars选项中的SHLIB_OPENMP_*
。有想法吗?
答案 0 :(得分:0)
感谢hcho3(https://github.com/dmlc/xgboost/issues/2503)
mkdir build
cd build
cmake .. -DCMAKE_C_COMPILER=gcc-7 -DCMAKE_CXX_COMPILER=g++-7 -DR_LIB=ON
make
make install
最后一次make安装可能会失败。如果发生这种情况,请运行
# still inside build/
cd R-package
mv src/libxgboost.dylib src/xgboost.so # in my case 'mv src/xgboost.dylib src/xgboost.so'
R CMD INSTALL .
他的解释: 到目前为止,修改Makevars并没有取得太大的成功,因为它被R-package中的configure脚本覆盖。在应用自定义构建选项时,使用CMake可以使IMO容易得多,CMake可以在R包中生成配置文件和其他构建文件(因此,在build /下生成R-package目录)到目前为止,我所见的唯一缺陷与CMake一起使用的是它生成名为libxgboost.dylib的共享库,而R期望xgboost.so