Перейти к содержанию
    

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, Stanislav said:

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

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

Изменено пользователем one_eight_seven

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

46 minutes ago, one_eight_seven said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, esaulenka said:

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

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

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

Изменено пользователем one_eight_seven

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, Stanislav said:

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

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

52 minutes ago, one_eight_seven said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

 

Что-то ещё?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

39 minutes ago, AlexandrY said:

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 минут назад, esaulenka сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

51 minutes ago, one_eight_seven said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...