Как бы я инструктировал extconf.rb использовать дополнительные флаги оптимизации G ++, а какие рекомендуются?

StackOverflow https://stackoverflow.com/questions/2962287

Вопрос

я использую Рис написать расширение C ++ для рубинового драгоценного камня. Расширение находится в форме файла общего объекта (.so).

Это требует «MKMF-Rice» вместо «MKMF», но два (AFAIK) довольно похожи.

По умолчанию компилятор использует флаги -g -O2. Анкет Лично я нахожу такой глупый, так как трудно отлаживать с помощью любой оптимизации. Я прибегал к редактированию Makefile, чтобы снять флаги, которые мне не нравятся (например, удаление -fPIC -shared Когда мне нужно отлаживать с помощью main() вместо крючков Руби).

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

$CPPFLAGS += " -DRICE"

Чтобы добавить дополнительные флаги. Но как мне удалить вещи, не редактируя макияж напрямую?

Вторичный вопрос: какие оптимизации безопасны для общих объектов, загруженных Ruby? Могу я сделать что -то вроде -funroll-loops? Что вы все рекомендуете?

Это проект научных компьютеров, так что чем быстрее, тем лучше. Память не большая проблема.

Большое спасибо!

Это было полезно?

Решение

Быстрый и грязный способ -добавить -O0 к Cxxflags, что отключит оптимизацию. Более поздние параметры будут переопределять более ранние.

Что касается безопасности плагина, вы должны иметь возможность сделать все, что не влияет на ABI. Без тестирования я не понимаю, почему -фунролл будет. Конечно, Safe не подразумевает лучше. Как отмечена страница «Человек», «-фунролл-петли увеличивает код больше, и может или не может запускать его быстрее».

Другие советы

Чтобы определить, что вы используете

-D name=definition

Как вы делаете в своем примере:

$CPPFLAGS += " -DRICE"

-У имя
Отмените любое предыдущее определение имени, встроенное или предоставленное с опцией -d.

$CPPFLAGS += " -URICE"

Хотя я не уверен, поможет ли это с неопределенным -O2, как вы хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top