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

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

23 minutes ago, inventor said:

то и наблюдаемое поведение будет разным

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

Значит надо сейчас скомпилить этот проблемный код в библиотеку и посмотреть что будет в этом случае.   
 

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


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

39 минут назад, inventor сказал:

если при оптимизации пишешь local_time как volatile - то она работает как задержка

Время выполнения и размер программы не входят в понятие "наблюдаемое поведение".

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


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

а что входит?

 

не является ли этот волатайл

такой же ненужной штукой

как auto в C?

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


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

Inventor, почитайте на досуге:

https://habr.com/sandbox/114114/

http://www.pic24.ru/doku.php/osa/articles/volatile_for_chainiks

https://tproger.ru/problems/what-is-the-purpose-of-the-keyword-volatile-in-c/

Хочу подчеркнуть, что второй ссылкой я не хочу косвенно намекнуть о Вашем непонимании в отношении названия статьи - не я ее автор. Но эти ссылки реально полезно прошерстить. Иначе все эти 7 страниц будут впустую, а понимание так и не придет...:scratch_one-s_head:

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

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


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

6 часов назад, Arlleex сказал:

А Вы не находите, что наличие asm("nop")...

Вопрос, почему оно с непустым телом работает - тоже вопрос

Читайте документацию!

asm volatile("" ::: "memory");

creates a compiler level memory barrier forcing optimizer to not re-order memory accesses across the barrier.

Сомнения в работе оптимизирующего компилятора большей частью от безграмотности.

 

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

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


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

4 минуты назад, _3m сказал:

Читайте документацию!


asm volatile("" ::: "memory");

creates a compiler level memory barrier forcing optimizer to not re-order memory accesses across the barrier.

Сомнения в работе оптимизирующего компилятора большей частью от безграмотности.

Во-первых, при чем тут я?

Во-вторых, у автора asm(...), а не asm volatile(...). Исходя из этого, а также отсутствия информации о располагаемом компиляторе у автора топика (да это и не суть, а может я не досмотрел где-то в толще этой темы), было логично сформировать такой риторический вопрос о том, почему эта конструкция работает. Не зря я написал, что ее работа также подвергается сомнению, поскольку без volatile гарантировать правильность работы указанной функции не представляется возможным.

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


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

2 часа назад, inventor сказал:

а что входит?

Открываете Стандарт, ищите там "behavior of an abstract machine", читаете.

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


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

1 hour ago, Arlleex said:

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

но она работает

кстате. lwip 1.3.2 volatile переменная объявлена всего один раз

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


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

40 минут назад, inventor сказал:

кстате. lwip 1.3.2 volatile переменная объявлена всего один раз

КстатИ. И о чем это нам должно говорить?

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


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

1 hour ago, inventor said:

но она работает

кстате. lwip 1.3.2 volatile переменная объявлена всего один раз

В mbed, который включает lwip переменные volatile встречаются более 1400 раз! 
 

 

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


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

3 часа назад, inventor сказал:

а что входит?

 

не является ли этот волатайл

такой же ненужной штукой

как auto в C?

 

В 03.12.2018 в 10:25, inventor сказал:

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

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

По определению:

"Volatile - ключевое слово языков C/C++, которое информирует компилятор о том, что значение переменной может меняться из вне и что компилятор не будет оптимизировать эту переменную."

Как следствие, он не выкинет бесполезный while block с "активным ожиданием". 

https://en.wikipedia.org/wiki/Busy_waiting

"Активное ожидание" в SMP среде само по себе затратно и обычно используется скорее как userspace оптимизация, до входа в kernel mode waiting.

Хотя в мире однопоточных МК, я часто вижу использование активного ожидания.

Вопросы могут быть к оптимизатору / компилятору, насколько он строго следует стандартам языка.

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


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

51 minutes ago, Сергей Борщ said:

КстатИ. И о чем это нам должно говорить?

Это должно говорить, что lwip легко перенесет любую оптимизацию. 

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


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

12 минут назад, AlexandrY сказал:

Это должно говорить, что lwip легко перенесет любую оптимизацию. 

Не вижу связи. Но хотел услышать ответ от автора вброса.

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


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

19 minutes ago, psyhologic said:

"Volatile - ключевое слово языков C/C++, которое информирует компилятор о том, что значение переменной может меняться из вне и что компилятор не будет оптимизировать эту переменную."

Это все познавательно, но по прежнему не раскрыта интрига: так что это за оптимизации над переменной? 
Оптимизируется не переменная, а наверно все таки код вокруг нее.
Так вот как далеко заходят пределы этой  консервации оптимизации при встрече с volatile? 
Может в этом скрытый смысл поднятой темы? 

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


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

хорошо. Такой вопрос'

когда использование volatile

нежелательно и может испортить

работу программы?

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


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

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

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

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

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

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

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

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

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

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