Rcpp 및 RcppEigen을 통해 C++ 코드를 호출하는 R 패키지를 개발했습니다. 내 Makevars.win
는Windows/Mac에서 R 패키지의 C++ 컴파일 플래그
CXX_STD = CXX11
PKG_CPPFLAGS = -fopenmp -03 -Wall -ftree - 벡터 라이 -march = 기본 -mavx을 (열거 형은 내 질문을 참조하는 것을 의미한다)과 같다 - mfma
PKG_CXXFLAGS + = $ (SHLIB_OPENMP_CXXFLAGS)
PKG_LIBS = -fopenmp
PKG_LIBS + = $ (LAPACK_LIBS) $ (BLAS_LIBS) $ (FLIBS) $ (SHLIB_OPENMP_CXXFLAGS) 내가 사용하기 원하는
PKG_CPPFLAGS가 + = -I ../ INST//
포함 OpenMP 및 R 패키지를 인텔 MKL 라이브러리에 연결합니다. 또한 내 소스 파일에 플러그인 // [[Rcpp::plugins(cpp11)]]
및 // [[Rcpp::plugins(openmp)]]
을 추가하고 있습니다.
패키지를 컴파일해도 문제가 없지만 여전히 기본 컴파일 플래그 -O2
과 -std=c++0x
을 얻고 있습니다. 그래서 내 질문은 다음과 같습니다.
대답은 1.(그런데, 동일한 Makevars를 사용하면 올바른 C++ 버전을 생성하므로 Windows에만 한정된 것이어야합니다) A. 강제되지 않습니까?
B. B. 3에서 fopenmp가 3 번 반복됩니까?
C. 5. 여부를 확인하는 방법? 나는 Mac에서 빌드 된 동일한 패키지가 Windows보다 훨씬 빠르며 구성도 동일하지만이 질문을하고 있습니다. 필자는 Microsoft R Open 및 Mac을 사용하여 Windows에서 동일한 코드의 일부 벤치 마크를 수행했으며 Windows는이 경우 더 빠릅니다.
매우 소중한 도움에 감사드립니다.
Windows에서만 작동합니다 ... macOS에만 특수 처리가 필요합니다. – coatless
설명해 주셔서 감사합니다. 감사합니다. –
@DirkEddelbuettel 내가 들었던 것처럼 들리는데 ... 그 플래그가 내 src/Makevars에 있는데 R 패키지를 만드는 데 사용되었다는 것과 그 CXX_STD = CXX11은 Windows에서는 고려되지 않았지만 Mac에 있다는 것을 알립니다. 이유는 분명하지 않습니다. 그렇다면 분명히 OpenMP를 사용하여 패키지를 살펴 보았습니다. 마지막으로, 패키지가 openmp를 사용하여 Windows에서 제대로 빌드되었다고 말하면서 분명하다고 생각했습니다. 내 질문은 내 플래그가 정확하고 중복되지 않는지, 그리고 std = C++ 11 및 -O3이 Windows에서 고려되지 않은 이유 (Mac에 있음)와 관련이 있습니다. – itQ