Salam pembuka.
Saya butuh bantuan dalam memahami instruksi untuk menginstal versi OpenMP di R (Mac OS). Pernyataan berikut ini cukup membingungkan bagi saya:
Atur file Makevars dalam prioritas tertinggi untuk R.
Intinya ada tiga Makevars : ~/.R/Makevars, xgboost/R-package/src/Makevars, dan /usr/local/Cellar/r/3.2.0/R.framework/Resources/etc/Makeconf ( yang terakhir diperoleh dengan menjalankan file.path(R.home("etc"), "Makeconf") di R), dan SHLIB_OPENMP_CXXFLAGS tidak disetel secara default!! Setelah mencoba, tampaknya yang pertama memiliki prioritas tertinggi (kejutan!).
Apa yang dimaksud dengan "Setel file Makevars dalam prioritas tertinggi untuk R"? Bagaimana saya bisa menangani prioritas? Apa yang harus saya lakukan untuk mengatur variabel "SHLIB_OPENMP_CXXFLAGS"?
re: Makevars...Saya membuat perubahan di ~/.R/Makevars. Selain flag SHLIB, saya harus mengubah compiler menjadi "clang-omp". Untuk kompiler saya menggunakan brew untuk menginstal versi dentang yang mendukung OpenMP.
Saya akhirnya mendapatkan ini untuk bekerja dengan menggunakan kode berikut dimodifikasi dari @ jimthompson5802 's jawaban . Kode dimasukkan ke dalam ~/.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
Dalam kasus saya R akan mencari /Library/Frameworks/R.framework/Resources/etc/Makeconf
untuk parameter yang diperlukan tidak terdefinisi dalam ~/.R/Makevars
. Itu akan mencoba menemukan pengaturan untuk CXX1X
di Makeconf
. Jadi dari situlah kompiler clang++
berasal dari kesalahan di posting saya
Saya mendapatkan banyak peringatan [-Wunused-variable]
tapi saya rasa itu baik-baik saja. Tidak ada peringatan OpenMP is not available
kali ini.
Juga karena saya telah mengikuti instruksi pembuatan resmi untuk mac os, saya telah menginstal gcc dan dengan itu saya berhasil membangun xgboost "utama" dengan OpenMP sebelumnya. Jadi saya menyarankan untuk siapa saja yang telah mengikuti instruksi yang sama seperti saya untuk mengatur Makevars
mereka seperti ini.
Dalam kasus saya, saya harus menyiapkan lebih banyak CXX
untuk membuatnya berfungsi:
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
Komentar yang paling membantu
Dalam kasus saya, saya harus menyiapkan lebih banyak
CXX
untuk membuatnya berfungsi: