2010-01-15 3 views
6

Я пытался вникнуть в то, что время-hogs в каком-то R-коде, который я написал, поэтому я использую Rprof. Выход еще не очень полезно, хотя:Получение дополнительной информации от Rprof()

> summaryRprof() 
$by.self 
         self.time self.pct total.time total.pct 
"$<-.data.frame"   2.38  23.2  2.38  23.2 
"FUN"      2.04  19.9  10.20  99.6 
"[.data.frame"    1.74  17.0  5.54  54.1 
"[.factor"     1.42  13.9  2.90  28.3 
... 

Есть ли какой-нибудь способ, чтобы копать глубже и выяснить, какие конкретные вызовы из $<-.data.frame и FUN (который, вероятно, из by()) и т.д., на самом деле преступники? Или мне нужно будет реорганизовать код и сделать меньшие функциональные блоки, чтобы получить более мелкие результаты?

Единственная причина, по которой я сопротивляюсь рефакторингу, заключается в том, что мне придется передавать структуры данных в функции, а все прохождение - по значению, так что это похоже на шаг в неправильном направлении.

Спасибо.

ответ

4

Существующие пакеты CRANprofr и proftools полезны для этого. Последний может использовать Rgraphviz, который не всегда устанавливается.

У R Wiki page on profiling есть дополнительная информация и хороший скрипт от Romain, который также может визуализировать (но требует графика).

+0

url broken, возможно, это сейчас [здесь] (http://rwiki.sciviews.org/doku.php?id=tips:misc:profiling). – hhh

0

Разбор вывода, который генерирует не Rprof, а затем вы получаете доступ ко всему абсолютному.

2

Rprof принимает образцы стека вызовов с интервалом времени - это хорошая новость.

Что бы я сделал, так это получить доступ к необработанным образцам стека (stackshots), которые он собирает, и выберите несколько случайно и исследуйте их. Я ищу сайты вызовов (а не только функции, но места, где одна функция вызывает другую), которые появляются на нескольких образцах. Например, если сайт вызова отображается на 50% образцов, то это то, что он стоит, потому что его возможное удаление сэкономит примерно 50% от общего времени. (Кажется очевидным, верно? Но это не так хорошо.)

Не каждый дорогостоящий сайт для звонков оптимизирован, но некоторые из них: , если программа уже работает как можно быстрее.

(Не отвлекайтесь на такие вопросы, как количество образцов, на которые вы должны обратить внимание. Если что-то поможет вам сэкономить разумную долю времени, то оно появится на аналогичной доле образцов. Что важно, так это то, что вы его находите. Также не отвлекайтесь на вычисления по графам, рекурсии, времени и подсчетам. Важно то, что для каждого сайта вызова вы видите долю образцов стека, которые показывают его.)

Смежные вопросы