#c #r #inline #rcpp
#c #r #встроенный #rcpp
Вопрос:
Как изменить флаг оптимизации для компилятора cpp в R при использовании функции cxx из встроенного пакета?
По умолчанию на моей машине он компилируется с -g -O2
. Но я хотел бы использовать -O3
оптимизацию для увеличения скорости. Я использую Rcpp
плагин, если это имеет какое-либо значение.
Я пытался создать свой собственный плагин, и я пытался установить различные аргументы cxxfunction, но ничего не сработало.
Я думаю, одним из вариантов было бы скомпилировать его с помощью R CMD SHLIB
вместо использования cxxfunction
. Но Rcpp рекомендует использовать inline
, потому что большинство их тестовых примеров используют его.
спасибо за вашу помощь, дайте мне знать, если вам нужны какие-либо разъяснения
Ответ №1:
Есть несколько вариантов:
-
Лучшее решение — изменить это для всего использования R, поэтому создайте , например, файл
~/.R/Makevars
и установите CFLAGS, CXXFLAGS, … там. Это повлияет на все использованиеR CMD INSTALL ...
,R CMD SHLIB ...
etc pp, И посколькуcxxfunction()
from inline использует это, это работает и здесь. -
Специфично для inline и Rcpp: измените плагин, вот почему это система плагинов. Смотрите
Rcpp:::Rcpp.plugin.maker()
. -
Переключитесь обратно с
cxxfunction()
наcfunction()
, следовательно, не используйте плагин и устанавливайте все аргументы вручную.
Излишне говорить, что мне нравится вариант 1, и я использую его сам.
Редактировать: Четвертый (и грубый !!) метод, который я использовал в прошлом, заключается в редактировании $R_HOME/Makeconf
и / или Makeconf.site
.
Комментарии:
1. Спасибо за подтверждение и принятие, вы также можете проголосовать «за», нажав на обращенный вверх треугольник 🙂
2. Я бы так и сделал, но, видимо, моя репутация слишком низкая (ниже 15) 🙂
3. вы могли бы повысить репутацию @tibo, проголосовав за их вопрос. 😉
4. Очень справедливое замечание 🙂 Тем более, что я признаю, что
~/.R/Makevars
это кажется несколько недокументированным для R.5. Спасибо за ответ. Было бы действительно полезно, если бы вы предоставили синтаксис для установки CFLAGS или CXXFLAGS с примером строки.
Ответ №2:
Я могу предложить взлом. Напишите небольшую программу-оболочку (также называемую cpp), которая вызывает реальный cpp и передает ему все аргументы как есть, за исключением того, что она передает -O3 для оптимизации. Затем убедитесь, что ваша программа находится первой в разрешении пути к исполняемому файлу для R.
Комментарии:
1. Но, черт возьми, это работает; мы все делали похожие вещи, чтобы выполнить работу.