Оптимизация R кода - Rcpp - PullRequest
0 голосов
/ 31 мая 2018

В дополнение к функциям бенчмаркинга, есть ли какой-нибудь инструмент в R, чтобы мы могли извлечь самые большие узкие места в R-коде?

Я часто очень сильно сомневаюсь в вычислительной выгоде, которую получу при переписывании R-кодав C ++.Например, в начальной загрузке, где каждая итерация должна выполнять оптимизацию, я не знаю, полезно ли использовать библиотеку GSL для оптимизации функции логарифмического правдоподобия, поскольку optimЯзыковая функция R использует файл stats.so.Я заметил, что это делает stats ::: C_optim.

> stats:::C_optim
$name
[1] "optim"

$address
<pointer: 0x1cb34e0>
attr(,"class")
[1] "RegisteredNativeSymbol"

$dll
DLL name: stats
Filename: /usr/lib/R/library/stats/libs/stats.so
Dynamic lookup: FALSE

$numParameters
[1] 7

attr(,"class")
[1] "ExternalRoutine"  "NativeSymbolInfo"

Глядя на тело функции optim (edit(optim)), я вижу, что есть импорт эффективных функций, реализованных в C. Например,есть:

.External2(C_optim, par, fn1, gr1, method, con, lower, 
        upper)

Сомнение : Для Rcpp пользователей в ваших проектах вы обычно пытаетесь реализовать все свои функции C ++ или реализовать набор небольшихФункции C ++, которые будут использоваться в функции R?

Я знаю, что это довольно общий вопрос, но все функции, которые я использую Rcpp , всегда пытаются реализовать функцию C ++ с нуля.Я чувствовал, что я программирую больше на C ++, чем на R. Я иногда думаю, что мне нужно программировать непосредственно на C ++.

R обладает многими характеристиками, которые делают язык медленным для различных задач.Я всегда стараюсь избегать петель и уступаю место использованию семейства функций apply.Тем не менее, я часто нахожу R очень медленным.Таким образом, поскольку я очень не определился с тем, что стоит оптимизировать, я все-таки реализовал все на C ++.

1 Ответ

0 голосов
/ 01 июня 2018

Если вы (как правило) пишете код быстрее на R и хотите писать много кода на C ++, я предлагаю следующий подход:

  1. Реализация вашего решения на R.
  2. Только если решение R. недостаточно быстрое, попытайтесь оптимизировать его.
  3. Первый шаг в оптимизации - это измерение производительности, т. Е. Профилирование вашего кода.
  4. Как только вы определилиузкие места, которые вы можете улучшить, используя улучшенный код R.,Но это зависит от того, над какими проблемами вы работаете.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...