R: флаг оптимизации С++ при использовании встроенного пакета
В R при использовании функции cxx из встроенного пакета, как изменить флаг оптимизации для cpp-компилятора?
По умолчанию на моей машине он компилируется с помощью -g -O2
. Но я бы хотел использовать оптимизацию -O3
для увеличения скорости. Я использую плагин Rcpp
, если это имеет значение.
Я попытался создать свой собственный плагин, и я попытался установить разные аргументы функции cxx, но ничего не получилось.
Я предполагаю, что одним из вариантов было бы скомпилировать его с помощью R CMD SHLIB
вместо использования cxxfunction
. Но Rcpp рекомендует использовать inline
, потому что большинство их тестовых случаев используют его.
спасибо за вашу помощь, дайте мне знать, если вам нужно какое-либо разъяснение.
Ответы
Ответ 1
Есть несколько вариантов:
-
Лучшим решением является изменение этого для всех использования с помощью R, чтобы создать, например. файл ~/.R/Makevars
и установите CFLAGS, CXXFLAGS,... там. Это повлияет на все использование R CMD INSTALL ...
, R CMD SHLIB ...
и т.д. Pp и как cxxfunction()
из inline использует его, он также работает здесь.
-
Конкретно для inline и Rcpp: измените плагин, поэтому он является плагиновой системой. См. Rcpp:::Rcpp.plugin.maker()
.
-
Переключитесь с cxxfunction()
на cfunction()
, поэтому не используйте плагин и задайте все аргументы вручную.
Излишне говорить, что мне нравится вариант 1 и использовать его сам.
Изменить: четвертый (и грубый!!) метод, который я использовал в прошлом, - это отредактировать $R_HOME/Makeconf
и/или Makeconf.site
.
Ответ 2
Я могу предложить взломать. Напишите небольшую программу-оболочку (также называемую cpp), которая вызывает реальный cpp и передает ему все аргументы, за исключением того, что он передает -O3 для оптимизации. Затем убедитесь, что ваша программа встречается сначала в разрешении исполняемого пути для R.