たとえば、この質問のように、gperftools を使用してコール グラフを作成できます。
このバグを追跡するためbind_rows()
に、 R パッケージのコール グラフを取得したいと思います。dplyr
R
とdplyr
を使用してCPP/CXXFLAGS=-g -fvar-tracking-assignments
との両方をコンパイルしLDFLAGS=-lprofiler -lunwind
ました。
次を実行すると:
CPUPROFILE="samples.log" R --vanilla <<< "library(dplyr)
ll = lapply(1:1e5, function(x) as.list(setNames(runif(5), letters[1:5])))
print(system.time(bind_rows(ll)))"
pprof --gif /usr/lib/R/bin/exec/R samples.log > out.gif
私が得るのは次のとおりです。
dplyr
のバインド行ファイル内のどの呼び出しがボトルネックであるかを知るために、呼び出し階層を取得するにはどうすればよいですか?
編集:--focus
ここで必要なのはオプションのようです。しかし、これを に接続する方法はRecursiveRelease
?
pprof --focus=rbind__impl --gif /usr/lib/R/bin/exec/R samples.log > out.gif
編集:でRcppを再コンパイルし-g
、 でリンクし-lprofiler
た後、次を取得できました。これは、一部のライブラリがサポートなしでロードされているためでしょうか?-lprofiler