Как мне профилировать базовый C-код в пакете R? - PullRequest
0 голосов
/ 06 мая 2019

Я довольно хорошо понимаю C, но очень мало R. Я установил R-пакет (coxme) в R-studio на Windows7 из исходного кода, который включал компиляцию нескольких файлов C в .dll. Этот пакет не является автономным и зависит как минимум от 2 других пакетов (возможно, большего). Он работает слишком медленно, поэтому я хотел бы посмотреть, смогу ли я ускорить его, сначала профилировав. Я использовал R-пакет «profvis» для профилирования R-кода, но он только говорит мне, что 98% времени используется пакетом «coxme» без каких-либо дополнительных подробностей. Вызов пакета R выглядит примерно так:

frail.xg=coxme(Surv(y.vec,delta.vec)~x.mat+g.vec+(1|fiid.vec),varlist=list(K.mat))

Весь пакет не имеет функции с именем coxme(...), поэтому я понятия не имею, что происходит после вызова этого пакета, как показано выше. Я пометил каждую функцию в каталоге «src» пакета для печати (добавления) в файл, но только функция init() запускается при установке, когда регистрирует пакет. Ни одна из других функций не печатает в этот файл, как только я запускаю coxme из R-Studio. Помимо функции init() кажется, что ни одна из C-функций в пакете даже не выполняется, когда я вызываю coxme(...). Мой подход такой:

remove.packages("coxme")

манипулировать C-кодом в каталоге coxme "src" для печати в какой-нибудь внешний файл "Я являюсь функцией XYZ и т. Д.". создать coxme.tar.gz

install.packages('E:/Workdir/AOO/R/coxme/coxme.tar.gz', repos = NULL, type="source")
library("coxme")
frail.xg=coxme(Surv(y.vec,delta.vec)~x.mat+g.vec(1|fiid.vec),varlist=list(K.mat))

это дает некоторый ожидаемый результат. Но ни одна из C-функций, похоже, не пострадала, как и мой код профилирования. Итак, мои вопросы:

  1. Что именно исполняется?
  2. Как мне узнать, что кушает большую часть времени в пакете coxme?

1 Ответ

0 голосов
/ 06 мая 2019

Основная проблема заключается в том, что Rstudio (по крайней мере, в Windows7) не обновляет ни один .dll после загрузки.Таким образом, мои изменения C-кода никогда не вступали в силу, так как старый .dll никогда не заменялся, даже когда я выгружал и перекомпилировал через install.packages ().Мне пришлось полностью выйти из Rstudio и вручную удалить каталог пакета (coxme).Затем перезапустите Rstudio при установке из моего отредактированного источника.Теперь мои правки дают желаемые результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...