Grizzly 0 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 1 час назад, inventor сказал: как то прочитал (не помню где) что крупные комерческие проекты делают с оптимизацией -o2 Да. Иногда -O3. Ровно как и сборка дистрибутивов идет с -O2, куда можно еще добавить march=native (или архитектура МК при работе с ними). Я бы работу с периферией, а особенно из сторонних библиотек, вообще бы собирал без оптимизации. Максимум -02. Какая-нибудь обработка данных может быть и с -O3. Алгоритмы обычно отлаживаются на моделях, зачастую даже на другом языке, ошибки искать проще, сравнивая выходы при подаче эталонных данных. При Ofast и fast (в ICC) происходит отклонение от стандарта при работе с float. За счет этого увеличивается быстродействие. Нужно проверять, удовлетворяют ли в этом случае полученные результаты в плане точности. Я сам за различные уровни оптимизации для разных частей программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 1 час назад, inventor сказал: оптимизация иногда раздувает размер кода подстановкой функций Если вам нужна компактность есть ключ -Os. Опять же для разных частей ПО можно и нужно использовать разные опции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 40 minutes ago, Kabdim said: Если вам нужна компактность есть ключ -Os. Опять же для разных частей ПО можно и нужно использовать разные опции. речь шла оптимизации как таковой предыдущие ораторы накинулись на меня, назвав лохом что мол прога должна работать при любой оптимизации Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба Приветствую! 3 minutes ago, inventor said: речь шла оптимизации как таковой предыдущие ораторы накинулись на меня, назвав лохом что мол прога должна работать при любой оптимизации IMHO - и они правы - как минимум в части корректной работы программы при разных опциях оптимизации. :) Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 183 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 8 минут назад, inventor сказал: что мол прога должна работать при любой оптимизации именно так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 51 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 2 hours ago, inventor said: оптимизация иногда раздувает размер кода подстановкой функций Только если инлайн прямо указан программистом в коде или такая подстановка соответствует стратегии оптимизации(к примеру, оптимизация по скорости и инлайн получается быстрее чем стандартный вызов). 2 hours ago, inventor said: без оптимизации я получаю такой же код как описан в самой программе Только если пишешь на Асме. В остальных случаях получаешь нечто зависящее от компилятора и аргументов компиляции. 33 minutes ago, inventor said: что мол прога должна работать при любой оптимизации Так и только так. Если не работает - ищи собственный косяк. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 1 hour ago, inventor said: править стек lwip или что то подобное? (как пример) Вам нужно запомнить одно - lwip, FatFS , FreeRTOS, mbed ... вылизаны от и до. Не пытайтесь там искать траблы с оптимизацией. Ищите в слое BSP на платформу. А это не так уж много файлов. Как правило за пару дней все баги находятся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 1 hour ago, AlexandrY said: Вам нужно запомнить одно - lwip, FatFS , FreeRTOS, mbed ... вылизаны от и до. Не пытайтесь там искать траблы с оптимизацией. мне нравица ваша убежденность. это не оптимизация, но все же... /** * Кто то из нас готов - разбираем. * таймаут ставим в ноль, иначе функция select не работает! * В это случае сразу будет выходить если нет готового дескриптора * а если передать NULL - то работает неправильно!!! * не стал исправлять lwip_select()! */ t0.tv_sec = 0; t0.tv_usec = 0; memcpy(&rfds, &readfds, sizeof(rfds)); n = -1; if (select(maxfd + 1, &rfds, NULL, NULL, &t0) > 0) { for (i = 0; i < MAX_ETH_NUM; i++) { if (FD_ISSET(sockfd[i], &rfds)) { n = i; break; } } } вот сразу пример из lwip с которым я провозился несколько дней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 4 hours ago, AlexandrY said: Не надо поднимать уровень токсичности форума. Я за нулевую толерантность к личным выпадам. Я тоже. Абсолютно согласен. Но следует отличать критику (и даже упрёк) от личного выпада. Здесь личность автора не ущемлялась. ИМХО, топик катится в офф-топ. Включать или не включать оптимизацию - свобода выбора программиста. Здесь не может быть общих рекомендаций. Не зря компиляторы предусматривают не только опцию оптимизации, но и различные её уровни. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 3 hours ago, inventor said: что мол прога должна работать при любой оптимизации Должна, но не всегда работает :( Помню, возился с коммерческим С компилятором (Sun Pro Compilers). Там было несколько модулей, которые собирались с О2 (остальные с О3). Общий размер этого всего составлял десятки миллионов строк, а модулей с О2 - десятки тысяч. Содержимое их было - аццкая жесть, авторов их никто не знал, и что там происходит - никто не понимал. В таком случае можно ставить разные уровни оптимизации. Если у вас не так - то нельзя :) В том же компиляторе выловили интересную багу (как пользователи сказали): В некоторой функции (небольшой) возвращающиеся результаты зависели от уровня оптимизации. Исследования показали, что в функции была ИНОГДА неинициализированная переменная, которая ИНОГДА попадала в вычисления. Реально, при использованных параметрах, неинициализированные данные в вычисления не попадали. Однако компилятор, найдя неинициализированную переменную, посчитал что результатом вычисления мусора будет мусор и выкинул тело функции ВООБЩЕ. Однако формально он (компилятор) был прав. Багу переквалифицировали в фичу :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 20 минут назад, xvr сказал: Должна, но не всегда работает :( Абсолютно согласен. Чем выше уровень оптимизации, тем больше вероятность получить ошибку компилятора. Понятно, что эта величина всё равно довольно малая, но про неё не стоит забывать. На поиск подобных ошибок дни могут уйти :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gerber 7 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба Интересный финт оптимизатора, приводящий к ошибке: предположим, что основная часть функций программы контроллера расположена во флэшке, а некоторым функциям предписано директивами размещение в RAM (такое бывает необходимо, если из функции выполняется запись во внутреннюю флэшь контроллера). При отсутствии оптимизации всё работает, а при включенной оптимизации зависает где-то внутри функции, которая должна быть в RAM. Оказалось, что оптимизатор заинлайнил функции, которые должны были быть в RAM, они слились с телом "обычных" функций и разместились во флэшке. А на первый взгляд и не придерешься - сначала отрабатывает компилятор со своей оптимизацией, потом в дело вступает линкер, которому предписано размещение в RAM функций, которых уже нет после прохода оптимизатора... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 2 hours ago, inventor said: мне нравица ваша убежденность. это не оптимизация, но все же... Вряд ли у вас выйдет запрячь тут кого-то искать ваши траблы. Но я с закрытыми глазами скажу что тут проблема с функциями таймеров из BSP либо неправильно портировали RTOS. lwip портировал еще на MSP430. Будьте уверены, там все чисто. 6 minutes ago, gerber said: Интересный финт оптимизатора, приводящий к ошибке: Финт в том, что это ваша ошибка. Но кто покажет такие ошибки в больших опенсорсных проектах? Боюсь никто, поскольку тестировать на максимальной оптимизации стандартная практика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 183 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 1 час назад, gerber сказал: Оказалось, что оптимизатор заинлайнил функции, которые должны были быть в RAM, они слились с телом "обычных" функций и разместились во флэшке. Т.е. - Вы включили оптимизацию (которая предполагает использование в том числе и инлайнинга функций), не удосужились запретить компилятору инлайнить данную функцию (или иным способом оставить её в виде автономной функции). И после этого виноват компилятор??? Где логика? Видимо Вы ожидали, что компилятор откроет даташит , разберётся в вашем творчестве , поймёт как оно должно работать и подкостылит его как надо . Нда... Повторюсь ещё раз: компилятор - это инструмент! А на инструменте надо уметь играть. Опять вспоминаем басню про мартышку и очки... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба Как минимум, пока существуют "программисты", которым оптимизация в компиляторах не нужна (читай - стремящиеся писать большие и медленные программы), без работы я точно не останусь. А пока существуют "программисты", у которых виноват компилятор - я имею возможность выбирать работы повкуснее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться