реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> IAR Inline, Как заставить ?
pokk
сообщение Jul 18 2017, 09:52
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028



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

Изначально у меня все функции было в одном модуле, и объявлены как static + inline, и компилятор их на самом деле инлайнил, но со временем модуль разросся, и теперь хочу некоторые выделить в отдельный модуль, но увы IAR 7.5 не хочит их инлайнить даже при "Multi-file Compilation"

Может не правильно их объявляю?

Код
#pragma inline=forced
inline float32_t Func1(float32_t Data1,float32_t Data2){
.........
}

и в хедере
Код
extern void Handler_adc(void);

При включенной галки "Multi-file Compilation" компилятор это все компилирует но вставление тела функции я не вижу =((

Сообщение отредактировал pokk - Jul 18 2017, 09:52
Go to the top of the page
 
+Quote Post
Obam
сообщение Jul 18 2017, 10:50
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



IAR C/C++ Development Guide
"Inlining is normally performed only on the High optimization level. Specifying
#pragma inline=forced will enable inlining of the function in question also on the
Medium optimization level."

Шикарный Index в этой DevGuide - много полезного и интересного (;

PS: о, прошу прощения, вы в курсе прагмы…

Сообщение отредактировал Obam - Jul 18 2017, 10:52


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 18 2017, 11:36
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(pokk @ Jul 18 2017, 12:52) *
Может не правильно их объявляю?
Код
#pragma inline=forced
inline float32_t Func1(float32_t Data1,float32_t Data2){
.........
}

Надеюсь это вынесено в хидер? И включена полная оптимизация? и галка с пункта "Function inlining" в свойствах проекта не снята? И нигде нет взятия адреса функции?

Цитата(pokk @ Jul 18 2017, 12:52) *
и в хедере
Код
extern void Handler_adc(void);

А это тут к чему???
Go to the top of the page
 
+Quote Post
pokk
сообщение Jul 19 2017, 02:47
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028



Цитата
Надеюсь это вынесено в хидер?

Размещение всей функции в хидере? Остальное все да.

Цитата
А это тут к чему???

Ой прошу прошение не то указал, в общем, прерывания от АЦП разместил в модуле АЦП, а обработку самих данных завернул в функцию и решил вынести от туда в отдельный модуль, и при этом не хочу что бы это как-то влияло на быстродействие. Там функция получилась
Код
void  Handler_adc(void){
...
}

Нету ни входных ни выходных параметров, само то что бы её инлайнить, но увы sad.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 19 2017, 08:43
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(pokk @ Jul 19 2017, 05:47) *
Размещение всей функции в хидере? Остальное все да.

Вызывается она из скольких мест? Попробуйте сделать её вызов только из одного места.

Цитата(pokk @ Jul 19 2017, 05:47) *
void Handler_adc(void)
Нету ни входных ни выходных параметров, само то что бы её инлайнить, но увы sad.gif

Это ISR что-ли? Если так, то естественно, что он не может быть заинлайнен.
Go to the top of the page
 
+Quote Post
pokk
сообщение Jul 19 2017, 08:51
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028



Да вызывается в одном месте.
Код
void SAI1_IRQHandler(void){   // Прерывание приема АЦП
    TEST_ON
    Handler_adc();  
    SAI1_Block_A->CLRFR|=SAI_xCLRFR_CFREQ;
    TEST_OFF
    NOP;
}


Код
void Handler_adc(void){
.....
}
Go to the top of the page
 
+Quote Post
x893
сообщение Jul 19 2017, 13:12
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Задайтесь вопросом - почему static inline ... функции размещают в .h файле.
Как ответите - сразу на свой вопрос ответ найдёте.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 19 2017, 16:46
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(x893 @ Jul 19 2017, 16:12) *
Задайтесь вопросом - почему static inline ... функции размещают в .h файле.
Как ответите - сразу на свой вопрос ответ найдёте.

Я бы другим вопросом тоже задался: а что вам эти инлайны, жизнь без них не мила что ли? Хотите "быстро-быстро" - дайте компилятору соответствующий ключик, чтобы оптимизировал. Ручками расставлять "инлайн" - это как помечать переменные "регистр", т.е. давно уже моветон.
Go to the top of the page
 
+Quote Post
Obam
сообщение Jul 19 2017, 17:14
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(scifi @ Jul 19 2017, 20:46) *
Я бы другим вопросом тоже задался: а что вам эти инлайны, жизнь без них не мила что ли? Хотите "быстро-быстро" - дайте компилятору соответствующий ключик, чтобы оптимизировал. Ручками расставлять "инлайн" - это как помечать переменные "регистр", т.е. давно уже моветон.

В том-то и прикол: инлайны реализуются в IARе на максимальном уровне оптимизации (;


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
x893
сообщение Jul 19 2017, 17:19
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Иногда бывает нужно.
На счет максимального уровня оптимизации - это правда (но есть ньюансы).
Но не только на максимальном уровне можно использовать inline.
Книжки написаны про это уже лет 40 - можно прочитать.
Go to the top of the page
 
+Quote Post
pokk
сообщение Jul 20 2017, 01:41
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028



Цитата(scifi @ Jul 19 2017, 20:46) *
Я бы другим вопросом тоже задался: а что вам эти инлайны, жизнь без них не мила что ли? Хотите "быстро-быстро" - дайте компилятору соответствующий ключик, чтобы оптимизировал. Ручками расставлять "инлайн" - это как помечать переменные "регистр", т.е. давно уже моветон.

Да хочу "быстро-быстро", оптимизация и так максимальная стоит и все галочки включены, какие ешё ключи ему давать ?

Go to the top of the page
 
+Quote Post
k155la3
сообщение Jul 20 2017, 06:42
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(pokk @ Jul 20 2017, 04:41) *
Да хочу "быстро-быстро", оптимизация и так максимальная стоит и все галочки включены, какие ешё ключи ему давать ?

Пардон что влез.
Может чевой наоборот, убрать ?
Не подерутся инлайновые галочки с галками оптимизации по размеру ? И кто победит ?

Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 20 2017, 07:20
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(pokk @ Jul 20 2017, 04:41) *
Да хочу "быстро-быстро", оптимизация и так максимальная стоит и все галочки включены, какие ешё ключи ему давать ?

И что, не успевает?
Go to the top of the page
 
+Quote Post
Obam
сообщение Jul 20 2017, 07:30
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(x893 @ Jul 19 2017, 21:19) *
Иногда бывает нужно.
На счет максимального уровня оптимизации - это правда (но есть ньюансы).
Но не только на максимальном уровне можно использовать inline.
Книжки написаны про это уже лет 40 - можно прочитать.

И это ТС знает (про прагму).

IAR несколько лет назад всего лишь 20 лет отмечал: "In Code we trust". (;

Цитата
Да хочу "быстро-быстро", оптимизация и так максимальная стоит и все галочки включены, какие ешё ключи ему давать ?

Дык галочки это и есть ключи.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 20 2017, 08:22
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(pokk @ Jul 20 2017, 04:41) *
Да хочу "быстро-быстро", оптимизация и так максимальная стоит и все галочки включены, какие ешё ключи ему давать ?

Если Вы действительно хотите "быстро-быстро", то во-первых - ассемблер.
Во-вторых: Всегда при оптимизации в первую очередь надо думать над алгоритмом. Наличие аргументов с плавающей точкой при обработке данных АЦП уже как бы даёт основания полагать, что у Вас там далеко не всё оптимально.
И когда избавитесь от float, увидите, что inline даёт сущие крохи по сравнению с float. И об inline надо думать уже в последнюю очередь (при оптимизации по скорости).

Цитата(x893 @ Jul 19 2017, 20:19) *
Иногда бывает нужно.

При оптимизации по скорости, об inline стоит думать в последнюю очередь. И то - если функция совсем простая - из пары действий.
inline, имхо, более полезен не для ускорения, а для например: уменьшения расхода стека на локальные переменные - вот это более важно. Вот в таком случае было бы очень полезно явно указывать компилятору, что функцию "обязательно inline-ить".
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 01:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01499 секунд с 7
ELECTRONIX ©2004-2016