Каков метод оптимизации отдельных функций в файле в GCC 4.1.1? - PullRequest
3 голосов
/ 08 мая 2009

Различные компиляторы C / C ++ имеют #pragma s для управления оптимизацией.

Например:

CodeWarrior

#pragma optimization_level 0
void func_no_opt()
{
    // Some Work - not optimized
}

#pragma optimization_level 3
void func_full_opt()
{
    // Some Work - optimized
}

MSVC

#pragma optimize("g", off)
void func_no_opt()
{
    // Some Work - not optimized
}

#pragma optimize("g", on)
void func_full_opt()
{
    // Some Work - optimized
}

#pragma optimize("", on)
void func_default_opt()
{
    // Some Work - default optimizations
}

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

Есть ли способ в GCC (в частности, 4.1.1) сделать что-то похожее на эти другие компиляторы? К сожалению, GCC 4.4 не поддерживается на моей целевой платформе (проприетарное оборудование), поэтому я не могу использовать атрибут optimize - т.е. __attribute__((optimize(...))).

Кроме того, в наборе инструментов для этой целевой платформы есть инструмент для автоматической массовой сборки; поэтому также невозможно просто разделить функции на отдельный файл и изменить параметры оптимизации, поскольку файлы в проекте могут автоматически объединяться для увеличения скорости компиляции и связывания. Мне нужно было бы создать отдельную библиотеку только для этих функций и сделать так, чтобы она была подключена, чтобы сделать метод отщепления. Это может быть немного более болезненным, чем стоило бы - особенно если есть более простой способ сделать это.

Ответы [ 2 ]

4 голосов
/ 08 мая 2009

Похоже, __attribute__((optimize(...))) является единственным средством управления оптимизацией для каждой функции в GCC. Таким образом, в GCC 4.1.1 разделение отдельной библиотеки функций для оптимизации - действительно единственный вариант.

2 голосов
/ 08 июля 2013

С GCC 4.4 и выше, вы можете использовать оптимизационные прагмы, как описано в http://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html#Function-Specific-Option-Pragmas

#pragma GCC push_options
#pragma GCC optimize ("-O0")
int foo() {
  return bar;
}
#pragma GCC pop_options
...