Я прочитал связанные сообщения здесь и здесь и посмотрел выступление Дирка Эддельбюттеля здесь, но мне даже не удается получить файл .log от gperftools
. Вот мой файл R
под названием Rcpp_practice.R
:
library(Rcpp)
Sys.setenv("PKG_LIBS"="-lprofiler")
sourceCpp('eigen.cpp')
a <- matrix(rnorm(300^2), 300, 300)
getEigenValues(a)
Вот содержимое eigen.cpp
:
#include <RcppArmadillo.h>
#include <gperftools/profiler.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::vec getEigenValues(arma::mat M) {
return arma::eig_sym(M);
}
Затем в Терминале (я использую OSX):
CPUPROFILE="eigenprof.log" R -f "Rcpp_practice.R"
Я надеялся увидеть eigenprof.log
в моем рабочем каталоге, но этого не произошло. Кроме того, я не получаю сообщение, которое я видел в других сообщениях формы PROFILE: interrupts/evictions/bytes = 012/34/567891
Я убедился, что у меня установлена последняя версия gperftools
. ($ brew upgrade google-perftools
дает Error: gperftools 2.5 already installed
).
Что мне не хватает?
Обновить
После того, как я изменил свой код, чтобы он соответствовал коду @nrussell, я получаю это сообщение об ошибке:
Error in dyn.load("/private/var/folders/6k/ffcchdq52kbb7d631b5vsqcw0000gn/T/RtmpCIdHkG/sourceCpp-x86_64-apple-darwin13.4.0-0.12.7/sourcecpp_6c3253d60384/sourceCpp_2.so") :
unable to load shared object '/private/var/folders/6k/ffcchdq52kbb7d631b5vsqcw0000gn/T/RtmpCIdHkG/sourceCpp-x86_64-apple-darwin13.4.0-0.12.7/sourcecpp_6c3253d60384/sourceCpp_2.so':
dlopen(/private/var/folders/6k/ffcchdq52kbb7d631b5vsqcw0000gn/T/RtmpCIdHkG/sourceCpp-x86_64-apple-darwin13.4.0-0.12.7/sourcecpp_6c3253d60384/sourceCpp_2.so, 6): Symbol not found: _ProfilerStart
Referenced from: /private/var/folders/6k/ffcchdq52kbb7d631b5vsqcw0000gn/T/RtmpCIdHkG/sourceCpp-x86_64-apple-darwin13.4.0-0.12.7/sourcecpp_6c3253d60384/sourceCpp_2.so
Expected in: flat namespace
in /private/var/folders/6k/ffcchdq52kbb7d631b5vsqcw0000gn/T/RtmpCIdHkG/sourceCpp-x86_64-apple-darwin13.4.0-0.12.7/sourcecpp_6c3253d60384/sourceCpp_2.so
Calls: sourceCpp -> source -> withVisible -> eval -> eval -> dyn.load
Execution halted
Это появляется в строке с sourceCpp
, если я запускаю скрипт в интерактивном режиме.
main()
в файле С++, убедиться, что у меня есть все флаги и параметры компиляции и компоновки, а затем перенести это в сборку на основе Rcpp. - person Dirk Eddelbuettel   schedule 19.10.2016