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

#c #r #inline #rcpp

#c #r #встроенный #rcpp

Вопрос:

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

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

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

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

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

Ответ №1:

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

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

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

  3. Переключитесь обратно с 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. Но, черт возьми, это работает; мы все делали похожие вещи, чтобы выполнить работу.