2

たとえば、この質問のように、gperftools を使用してコール グラフを作成できます。

このバグを追跡するためbind_rows()に、 R パッケージのコール グラフを取得したいと思います。dplyr

Rdplyrを使用して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

4

0 に答える 0