Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 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.