你好。
我需要一些帮助来理解在 R (Mac OS) 中安装 OpenMP 版本的说明。 以下陈述让我感到困惑:
将 Makevars 文件设置为 R 的最高优先级。
关键是,有三个 Makevars :~/.R/Makevars、xgboost/R-package/src/Makevars 和 /usr/local/Cellar/r/3.2.0/R.framework/Resources/etc/Makeconf (最后一个是通过运行 file.path(R.home("etc"), "Makeconf") in R) 得到的,默认没有设置 SHLIB_OPENMP_CXXFLAGS!! 经过尝试,似乎第一个具有最高的优先级(惊讶!)。
“将 Makevars 文件设置为 R 的最高优先级”是什么意思? 我该如何处理优先级? 我该怎么做才能设置“SHLIB_OPENMP_CXXFLAGS”变量?
回复:Makevars...我在 ~/.R/Makevars 中进行了更改。 除了 SHLIB 标志之外,我还必须将编译器更改为“clang-omp”。 对于编译器,我使用 brew 来安装支持 OpenMP 的 clang 版本。
我终于通过使用从@jimthompson5802的答案修改的以下代码来实现这一点。 代码放入~/.R/Makevars
:
CC=gcc-5
CXX=g++-5
CXX1X = g++-5
SHLIB_OPENMP_CFLAGS= -fopenmp
SHLIB_OPENMP_CXXFLAGS= -fopenmp
SHLIB_OPENMP_FCFLAGS= -fopenmp
SHLIB_OPENMP_FFLAGS= -fopenmp
在我的情况R.将搜索/Library/Frameworks/R.framework/Resources/etc/Makeconf
为未定义必要的参数~/.R/Makevars
。 它会尝试在Makeconf
找到CXX1X
的设置。 所以这就是clang++
编译器在我上一篇文章中的错误中
我收到一堆[-Wunused-variable]
警告,但我想这很好。 这次没有OpenMP is not available
警告。
此外,由于我遵循了 mac os 的官方构建说明,因此我安装了 gcc,并使用它成功构建了“主”xgboost 之前的 OpenMP。 因此,我建议任何像我一样遵循相同说明的人将Makevars
设置为这样。
就我而言,我必须设置更多CXX
才能使其工作:
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
最有用的评论
就我而言,我必须设置更多
CXX
才能使其工作: