Запретить инлайнинг?

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Hi All,

Проект на C++ под BlackFin, собирается VDSP 4.0. C помощью #pragma section
быстрые функции кладутся в L1 память, а все прочие - во внешнюю память.
Все нормально, если бы не одно "но": если включить автоинлайнинг, то
компилер пытается инлайнить быстрые функции. В результате быстрые функции
инлайнятся в медленную внешнюю память, а образы их в L1 прибиваются линкером
как dead code.

Как запретить компилеру инлайнить данную конкретную функцию?

VLV

 "Клянусь всем тем, во что когда-либо верили дураки"  (с) Вальтер Скотт


Re: Запретить инлайнинг?
Hello Vladimir.

04 May 06 19:18, Vladimir Vassilevsky wrote to all:

 VV> Проект на C++ под BlackFin, собирается VDSP 4.0. C помощью #pragma
 VV> section быстрые функции кладутся в L1 память, а все прочие - во
 VV> внешнюю память. Все нормально, если бы не одно "но": если включить
 VV> автоинлайнинг, то компилер пытается инлайнить быстрые функции. В
 VV> результате быстрые функции инлайнятся в медленную внешнюю память, а
 VV> образы их в L1 прибиваются линкером как dead code.

 VV> Как запретить компилеру инлайнить данную конкретную функцию?

 Убрать спецификатор inline ;)

 Из грязных хаков: написать dummy код, который берет адрес этой функции. Тогда
она не заинлайнится.

Dmitry


Запретить инлайнинг?
Thu May 04 2006 19:54, Dmitry Lyokhin wrote to Vladimir Vassilevsky:

 
 VV>> Проект на C++ под BlackFin, собирается VDSP 4.0. C помощью #pragma
 VV>> section быстрые функции кладутся в L1 память, а все прочие - во
 VV>> внешнюю память. Все нормально, если бы не одно "но": если включить
 VV>> автоинлайнинг, то компилер пытается инлайнить быстрые функции. В
 VV>> результате быстрые функции инлайнятся в медленную внешнюю память, а
 VV>> образы их в L1 прибиваются линкером как dead code.

 VV>> Как запретить компилеру инлайнить данную конкретную функцию?

 DL>  Убрать спецификатор inline ;)

 Бесполезно. Инлайнинг автоматический.  Хочется нечто вроде
 спецификатора no_inline :)

 DL>  Из грязных хаков: написать dummy код, который берет адрес этой функции.
 DL> Тогда она не заинлайнится.

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

 VLV
 

 "Клянусь всем тем, во что когда-либо верили дураки"  (с) Вальтер Скотт


Re: Запретить инлайнинг?
Hello Vladimir.

05 May 06 05:30, Vladimir Vassilevsky wrote to me:

 VV>>> Как запретить компилеру инлайнить данную конкретную функцию?

 DL>>  Убрать спецификатор inline ;)

 VV>  Бесполезно. Инлайнинг автоматический.  Хочется нечто вроде
 VV>  спецификатора no_inline :)

 Хм, это как ?
 код:

 --- some.h ---
 class CMyClass
 {
   int Foo();
 };

 --- some.cpp ---
 int CMyClass::Foo()
 {
   return DoSomething();
 }


 Вообще-то не должен инлайнить...

 VV>  Бесполезно. Вызовы все равно инлайнятся, а специально для dummy кода
 VV>  создается еще один образ функции. Впрочем, понятно, что вопрос
 VV> решается
 VV>  с помощью разных позорных хаков, но хотелось бы поизящнее.

 #pragma force_inline

 Знаю, а в обратную сторону - нет :)

Dmitry


Re: Запретить инлайнинг?

Quoted text here. Click to load it

Вызывайте функцию по указателю на нее...

--
Best regards,
Anton Fedorov

Re: Запретить инлайнинг?
Привет anton!

06 May 06 12:55, Anton Fedorov писал Dmitry Lyokhin:

 >>  VV>>> Как запретить компилеру инлайнить данную конкретную функцию?

 AF> Вызывайте функцию по указателю на нее...

    Вполне достаточно просто "спрятать" ее в отдельном файле.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Завтрак съешь сам, обед оставь себе, а ужин - никому не отдавай!

Запретить инлайнинг?
Sat May 06 2006 16:14, Alex Mogilnikov wrote to anton:

 
 >>>  VV>>> Как запретить компилеру инлайнить данную конкретную функцию?
 AF>> Вызывайте функцию по указателю на нее...

 Да, так можно. Но весь смысл в том, чтобы быстрая функция лежала в быстрой
 памяти. Гемор при вызове через через указатель теряет смысл быстрой функции.


 AM> Вполне достаточно просто "спрятать" ее в отдельном файле.

 Недостаточно. У всех нормальных компилеров многофайловая оптимизация.

 VLV

 "Клянусь всем тем, во что когда-либо верили дураки"  (с) Вальтер Скотт


Site Timeline