Jump to content

    

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

On 12/27/2018 at 10:56 AM, AlexandrY said:

Эт не ответ на главный вопрос. 
А вопрос в том почему компилятор C сразу все не оптимизирует по максимуму, как делается с современных языках? 
Почему ахинея без volatile РАБОТАЕТ хотя и не ДОЛЖНА? 
Какая логика в этом заложена? 

Стало быть, Вы утверждаете, что связь входа и выхода компилятора С не является детерминированной, я правильно Вас понял?

Share this post


Link to post
Share on other sites
6 hours ago, Stanislav said:

Стало быть, Вы утверждаете, что связь входа и выхода компилятора С не является детерминированной, я правильно Вас понял?

Хоть вопрос не ко мне, но нет, не правильно. Но выход при разных опциях компиляции будет разным. Но более того, связь входа и выхода компилируемой программы изменяется, при определённых опциях компиляции. Например, fastmath выдаёт результат, отличный от стандарта на float, например. Да и вообще, O3 может сломать ABI, потому, обычно программы собирают с O2.

Edited by one_eight_seven

Share this post


Link to post
Share on other sites

Ну если уж лезть в дебри, то стоит отметить что всегда есть способ добиться детерминированного вывода (с одним и тем же набором опций естественно).

То что вывод с разными опциями - разный самоочевидно, иначе какой бы в них был смысл. O3 не ломает ABI, кроме как багов и программистских ошибок.

Share this post


Link to post
Share on other sites
46 minutes ago, one_eight_seven said:

Да и вообще, O3 может сломать ABI

А где об этом пишут? (желательно, в более приличных местах, чем общие рекомендации по сборке генту). С указанием версий компилятора, конкретных исходников и мест, где оно, собственно, ломается.

Share this post


Link to post
Share on other sites
1 hour ago, esaulenka said:

А где об этом пишут? (желательно, в более приличных местах, чем общие рекомендации по сборке генту). С указанием версий компилятора, конкретных исходников и мест, где оно, собственно, ломается.

Пишут здесь. С остальными требованиями - направляйтесь в поиск, мейлгруппы, в общем, если интересно - копайте. Я предпочитаю пользовать -O2.

https://developers.redhat.com/blog/2018/03/21/compiler-and-linker-flags-gcc/

Edited by one_eight_seven

Share this post


Link to post
Share on other sites
8 hours ago, Stanislav said:

Стало быть, Вы утверждаете, что связь входа и выхода компилятора С не является детерминированной, я правильно Вас понял?

Чето тут утверждать, это неоспоримый факт, который все видят, но придумывают ему разные оправдания. 

52 minutes ago, one_eight_seven said:

Пишут здесь. С остальными требованиями - направляйтесь в поиск, мейлгруппы, в общем, если интересно - копайте. Я предпочитаю пользовать -O2.

Во-первых у нас EABI, во-вторых чего все время тыкать в этот линукс. Он здесь не авторитет. 
Вот если вы мне скажите чего такого ломает o3 в ThreadX - вот это будет новость.
А ThreadX, к сведению, всегда компилят под 03 и она сертифицирована для всего - от медицины до космоса.

Share this post


Link to post
Share on other sites

"Здесь" нашёл только, что "-O3 will change the way code reacts to ELF symbol interposition".

Этот самый interposition - какая-то хитрая магия, позволяющая сторонним объектникам подменять функции (или переменные). Не уверен, что большинство эмбеддеров это использует (я сам узнал об этой штуке 5 минут назад).

Объяснение: https://www.airs.com/blog/archives/307

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

 

Что-то ещё?

 

Share this post


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

Во-первых у нас EABI, во-вторых чего все время тыкать в этот линукс. Он здесь не авторитет. 

Ваше мнение вообще не важно. Линукс очень распространён и за пределами серверов.

 

Ветка про программирование а не про тредх.

Share this post


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

"В принципе, звучит логично - каким-то образом можно подменить только то, что не заинлайнено, а O3 может инлайнить всё подряд.

Не заилайнится то на что есть указатель (volatile естественно, что бы его самого не соптимизировали).

Share this post


Link to post
Share on other sites
51 minutes ago, one_eight_seven said:

Ваше мнение вообще не важно. Линукс очень распространён и за пределами серверов.

Да ну?! В мире много чего распространено. Это не значит, что все нужно поминать. 

IAR компилирует ThreadX, а линукс он не компилирует. :pardon:
Так что...  

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now