Saudações.
Preciso de ajuda para entender as instruções de instalação da versão OpenMP em R (Mac OS). A seguinte afirmação é bastante confusa para mim:
Defina o arquivo Makevars na prioridade mais alta para R.
A questão é que existem três Makevars: ~ / .R / Makevars, xgboost / R-package / src / Makevars e /usr/local/Cellar/r/3.2.0/R.framework/Resources/etc/Makeconf ( o último obtido executando file.path (R.home ("etc"), "Makeconf") em R), e SHLIB_OPENMP_CXXFLAGS não é definido por padrão !! Depois de tentar, parece que o primeiro tem maior pioridade (surpresa!).
O que significa "Definir o arquivo Makevars na prioridade mais alta para R"? Como posso lidar com a prioridade? O que devo fazer para definir a variável "SHLIB_OPENMP_CXXFLAGS"?
re: Makevars ... Fiz as alterações em ~ / .R / Makevars. Além dos sinalizadores SHLIB, tive que mudar para compilador para "clang-omp". Para o compilador, usei o brew para instalar a versão do clang compatível com OpenMP.
Finalmente consegui fazer isso funcionar usando o seguinte código modificado da resposta de @ jimthompson5802 . O código é colocado em ~/.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
No meu caso, R procuraria /Library/Frameworks/R.framework/Resources/etc/Makeconf
por parâmetros necessários indefinidos em ~/.R/Makevars
. Ele tentaria encontrar a configuração de CXX1X
em Makeconf
. Então é daí que vem o complier clang++
nos erros do meu post anterior .
Recebo vários avisos de [-Wunused-variable]
mas acho que não tem problema. Sem aviso OpenMP is not available
desta vez.
Além disso, como segui as instruções oficiais de construção para mac os, instalei o gcc e com ele construí com sucesso o xgboost "principal" com OpenMP antes. Portanto, sugiro que qualquer pessoa que tenha seguido as mesmas instruções como eu tenha seus Makevars
configurados desta forma.
No meu caso, tenho que configurar mais CXX
para fazer funcionar:
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
Comentários muito úteis
No meu caso, tenho que configurar mais
CXX
para fazer funcionar: