R: флаг оптимизации C++ при использовании встроенного пакета


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

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

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

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

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

2 18

2 ответа:

Есть несколько вариантов:

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

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

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

Нет нужды говорить, что мне нравится вариант 1, и я использую его сам.

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

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