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