Jump to content

    
Sign in to follow this  
inventor

Оптимизация в компиляторе. Нужна или нет?

Recommended Posts

вот , например, стандартный пример: 


static /*volatile*/ u32 LocalTime  @ ".fastdata" = 0;

void Delay(int timer)
{
   u32 Time = LocalTime;  
   while(LocalTime - Time < timer);
}
 

если компилируется в IAR с оптимизацией None или Low - то код работает

если оптимизация стоит medium и выше - перестает, нужно раскрыть комментарии и сделать LocalTime как volative

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

контроллере, где самого кода максимум десяток строк?

и есть ли смысл оптимизации в больших проектах, ведь очень часто код для этих проектов

берется из чужих исходников, которые непонятно кто писал и как все это работает.

 

 

Share this post


Link to post
Share on other sites

Правильно оптимизировал - если данные в LocalTime нигде не используются, то можно их и оптимизировать.

Впрочем, с чего вы взяли, что без оптимизации ваш код работает всегда правильно?

44 minutes ago, inventor said:

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

контроллере, где самого кода максимум десяток строк?

Помнится в старый добрый at90s2313(2КБ кода) влазила полноценная автомобильная сигнализация с честной криптографией... У вас на это, вероятно, нужен ARM с мегабайтом...

 

На самом деле чем меньше память контроллера, тем актуальнее оптимизация кода. А когда ограничений на память нет, тогда и оптимизация не нужна.

Share this post


Link to post
Share on other sites

Чужой исходник не работает с оптимизацией? Виновата конечно же оптимизация. :D

Если надо взять чужое, а оно кривое - всегда ему можно выставить отдельные опции компиляции, без поисков лазеек для себя.

Share this post


Link to post
Share on other sites
1 час назад, inventor сказал:

и есть ли смысл оптимизации в больших проектах, ведь очень часто код для этих проектов

Если не понимаете работы инструмента (оптимизирующего компилятора), то надо или изучать или не пользоваться им. А по Вашему сообщению видно, что не понимаете и не пытаетесь понять.

Share this post


Link to post
Share on other sites
22 minutes ago, jcxz said:

Если не понимаете работы инструмента (оптимизирующего компилятора), то надо или изучать или не пользоваться им. А по Вашему сообщению видно, что не понимаете и не пытаетесь понять.

А почему нужно свои эмоции выражать через личные наезды? 
Вопрос был нужна или нет оптимизация. Делимся мнениями об оптимизации, а не уровне автора вопроса. 

Я бы спросил, что это за исходники которые при максимальной оптимизации начинают сбоить.
Мне это представляется  исключительной редкостью, чем правилом. Где водятся такие исходники?   

Share this post


Link to post
Share on other sites
3 минуты назад, AlexandrY сказал:

А почему нужно свои эмоции выражать через личные наезды? 
Вопрос был нужна или нет оптимизация. Делимся мнениями об оптимизации, а не уровне автора вопроса. 

И где Вы увидели "наезды"?

Я вроде достаточно ясно выразил мнение по поводу оптимизации (как и любого инструмента): "Умеешь пользоваться - пользуйся, не умеешь - или изучай или не пользуйся". В чём именно "наезд" или какие-то "эмоции"?

А "где водятся такие исходники" - почитайте первый пост и увидите.

Share this post


Link to post
Share on other sites

Вот эту цитату прокомментируете: 

Quote

А по Вашему сообщению видно, что не понимаете и не пытаетесь понять.

Вопрос где автор нашел этот фрагмент кода.
А намек на то, что он сам его написал тоже кстати может задевать чувства.
Если автор выскажет претензии на такие подозрения, то будет прав и надо будет как-то реагировать. 

Share this post


Link to post
Share on other sites

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

Хочешь оптимизации есть масса способов сделать это надежно руками...

Share this post


Link to post
Share on other sites
16 минут назад, AlexandrY сказал:

Вот эту цитату прокомментируете: 

а) Из поста видно, что автор не понимает как работает и для чего нужен volatile -> значит автор не понимает как работает инструмент (компилятор).

б) Автор и не пытается понять, так как если бы пытался, то просто посмотрел бы на результат работы компилятора и подумал: "Почему из таких моих строк получается такой код?". Так как компилятор сам программу не пишет, он просто переводит си-строки в асм. Из этого следует, что автор и не пытается понять как работает инструмент. Он не пытается понять что он сам сделал не так, он сразу пытается взвалить вину на свой код на компилятор - "он плохой и его не надо использовать".

Цитата

Вопрос где автор нашел этот фрагмент кода.
А намек на то, что он сам его написал тоже кстати может задевать чувства.

Жесть просто... А мои чувства например задевает Ваша неадекватная реакция. Из которой я делаю вывод, что Вы имеете видимо какую-то личную обиду на меня и здесь пытаетесь её выместить...

14 минут назад, twix сказал:

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

Не согласен. Оптимизация - вещь безусловно полезная. Потому что во многих случаях находит скрытые баги в ПО. Это касается и кода из первого поста.

Только за одно это её стОит использовать. Не говоря уже об ускорении кода и уменьшении размера.

А если что-то "не переключается" или ещё чего - надо просто искать баги и исправлять.

Share this post


Link to post
Share on other sites
12 minutes ago, AlexandrY said:

А намек на то, что он сам его написал тоже кстати может задевать чувства.

Наши чувства всегда что-нибудь задевает, это нормально. Когда же выставляются претензии за "задевание чувств" или "оскорбление чувств", это уже абсурд. Мягко говоря.

Другое дело - оскорбления. Но автора здесь никто не оскорблял.

Share this post


Link to post
Share on other sites
25 минут назад, twix сказал:

На мой взгляд оптимизация компиляторов вред безусловный. Никогда не знаешь как он наоптимизирует, а потом ищи где флаг не переключается или не отслеживается. Для большого проекта это тем более актуально. Хочешь оптимизации есть масса способов сделать это надежно руками...

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

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

Share this post


Link to post
Share on other sites

Подобного рода "оптимизации" имеют ряд преимуществ и недостатков... язык предоставляет средство, инструмент.

Если подобного рода оптимизации вынесены в platform / hardware specific модуль у которого нет внешних зависимостей - окей.

Не окей - volatile имеет смысл только в многопоточной среде, а директива с указанием стартового адреса сужает выбор платформы.

Share this post


Link to post
Share on other sites
23 минуты назад, psyhologic сказал:

Не окей - volatile имеет смысл только в многопоточной среде,

Не обязательно. volatile также полезен в случае наличия нескольких bus-master в системе. Например: при использовании DMA-контроллера.

Ну и для ISR-ов volatile тоже очень нужен. А ISR - очень нужная вещь в embedded.

Также иногда полезен при использовании режимов энергосбережения (когда нужна гарантия, что завершены все записи в память, сохраняющую своё содержимое при уходе в сон).

Share this post


Link to post
Share on other sites
2 минуты назад, jcxz сказал:

Не обязательно. volatile также полезен в случае наличия нескольких bus-master в системе. Например: при использовании DMA-контроллера.

Да вы правы, про DMA как-то даже в голову не пришло.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this