#r #profiling #rcpp
#r #профилирование #rcpp
Вопрос:
Итак, у меня есть программа, которая импортирует функцию из C с использованием Rcpp, и я хочу измерить ее использование памяти, в частности, ее пиковое использование памяти. Я пробовал Rprof, но, похоже, я не получаю достаточно хорошего разрешения, например, многие мои выходные данные показывают 0 как mem.total в выходных данных, созданных summaryRprof (). Я также пробовал lineprof от Хэдли Уикхема, и его результаты кажутся противоречащими тому, что я получаю от Rprof.
Код с использованием rprof:
Rprof(NULL)
Rprof(tf <- "rprof.log", memory.profiling=TRUE, interval = .0000025)
xz <- my.function(arg1, arg2)
Rprof(NULL)
out <- summaryRprof(tf, memory = c("both"))
Вывод из Rprof:
$by.self
[1] self.time self.pct total.time total.pct mem.total
<0 rows> (or 0-length row.names)
$by.total
total.time total.pct mem.total self.time self.pct
".Call" 0 100 0 0 100
"C function" 0 100 0 0 0
"R function" 0 100 0 0 0
$sample.interval
[1] 2e-06
$sampling.time
[1] 0.000332
С большими интервалами, выход $ by.self возвращается, но по-прежнему показывает ноль для mem.total.
Код с lineprof:
source("my_function.r")
prof <- lineprof(my.function(arg1, arg2))
shine(prof)
Не уверен, как / смогу ли я загружать изображения в stackoverflow, но в основном я получаю блестящий интерфейс приложения, но всего с одной строкой «.Call».
Извините, если это сбивает с толку, пожалуйста, спросите, нужно ли вам, чтобы я что-нибудь прояснил, и спасибо!
Комментарии:
1. Необходимо создать воспроизводимый пример.
2. Пожалуйста, прочтите Написание расширений R и особенно разделы о профилировании памяти . Насколько я помню, для этого может потребоваться R-двоичный инструмент. Это отслеживает все использование памяти R , и поскольку Rcpp использует распределитель памяти R для своих типов (чтобы их можно было вернуть в R), это распространяется и на это. И наоборот, если бы вы использовали типы STL (с их собственным распределителем), они не были бы охвачены.