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

May 04, 2006 6 Replies

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

Hi All,



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



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



VLV



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


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

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

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

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

Привет anton!

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

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

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

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

Sat May 06 2006 16:14, Alex Mogilnikov wrote to anton:

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

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

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

VLV

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required