R: C ++ Флаг оптимизации при использовании встроенного пакета - PullRequest
18 голосов
/ 26 апреля 2011

В R при использовании функции cxx из встроенного пакета как изменить флаг оптимизации для компилятора cpp?

По умолчанию на моей машине компилируется с -g -O2. Но я бы хотел использовать оптимизацию -O3, чтобы набрать скорость. Я использую плагин Rcpp, если это имеет какое-либо значение.

Я пытался создать свой собственный плагин, и я пытался установить различные аргументы функции cxx, но ничего не получалось.

Полагаю, одним из вариантов было бы скомпилировать его, используя R CMD SHLIB вместо cxxfunction. Но Rcpp рекомендует использовать inline, потому что большинство тестовых случаев используют его.

спасибо за вашу помощь, дайте мне знать, если вам нужны какие-либо разъяснения

Ответы [ 2 ]

15 голосов
/ 26 апреля 2011

Существует несколько вариантов:

  1. Лучшее решение - изменить это для всего использования с R , поэтому создайте например aфайл ~/.R/Makevars и установить CFLAGS, CXXFLAGS, ... там.Это повлияет на все использование R CMD INSTALL ..., R CMD SHLIB ... и т. Д. Pp, и, поскольку cxxfunction() из встроенного кода использует его, оно работает и здесь.

  2. Специфично для inline и Rcpp: измениплагин, поэтому это система плагинов.См. Rcpp:::Rcpp.plugin.maker().

  3. Переключение обратно с cxxfunction() на cfunction(), поэтому не используйте плагин и задайте все аргументы вручную.

Излишне говорить, что мне нравится вариант 1, и я использую его сам.

Редактировать: Четвертый (и грубый !!) метод, который я использовал в прошлом, - это редактировать $R_HOME/Makeconf и / или Makeconf.site.

1 голос
/ 26 апреля 2011

Я могу предложить взломать.Напишите небольшую программу-обертку (также называемую cpp), которая вызывает реальный cpp и передает ему все аргументы, как есть, за исключением того, что он передает -O3 для оптимизации.Затем убедитесь, что ваша программа появляется первой в разрешении пути для исполняемого файла R.

...