реклама на сайте
подробности

 
 
> Проверка уровня оптимизации
juvf
сообщение May 27 2014, 04:08
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Есть проект. в нем один файл должен быть только с оптимизацией -О0, а другой только с оптимизацией -Ohs. Иначе прога не будет правильно работать. Как во время компиляции проверить, что к этим файлам применён нужный уровень компиляции?

есть проверки типа
Код
#ifndef configUSE_TICK_HOOK
    #error Missing definition:  configUSE_TICK_HOOK should be defined in FreeRTOSConfig.h as either 1 or 0.  See the Configuration section of the FreeRTOS API documentation for details.
#endif
Хотелось бы что-то подобное. если уровень оптимизации не тот, то выдать еррор и завершить компиляцию/сборку.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
ViKo
сообщение May 27 2014, 04:24
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Задайте принудительно для фрагмента:
#pragma push
#pragma O0
...
#pragma pop
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 27 2014, 06:18
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(juvf @ May 27 2014, 12:18) *
Есть проект. в нем один файл должен быть только с оптимизацией -О0
Это не очень хороший проект!
При желании всегда можно избавиться от такого поведения.
Могу помочь.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Евгений100
сообщение May 28 2014, 10:45
Сообщение #4





Группа: Новичок
Сообщений: 2
Регистрация: 23-05-14
Пользователь №: 81 748



?

Сообщение отредактировал Евгений100 - May 28 2014, 10:45
Go to the top of the page
 
+Quote Post
juvf
сообщение May 28 2014, 11:54
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(ViKo @ May 27 2014, 14:34) *
Задайте принудительно для фрагмента:
#pragma push
#pragma O0
...
#pragma pop

Спасибо, то что нужно!!! Только у меня в компиляторе так
#pragma optimize=none

Цитата
Это не очень хороший проект!
А что в нём не хорошего? Для таких случаев придумали #pragma optimize, а не предлагают помощь в избавлении от такого поведения laughing.gif
Go to the top of the page
 
+Quote Post
msalov
сообщение May 28 2014, 17:09
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Если поведение программы зависит от уровня оптимизации, значит программа написана неверно. Стоит решать проблему а не следствие.
Go to the top of the page
 
+Quote Post
adnega
сообщение May 28 2014, 23:13
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(juvf @ May 28 2014, 20:04) *
А что в нём не хорошего? Для таких случаев придумали #pragma optimize, а не предлагают помощь в избавлении от такого поведения laughing.gif

Эти опции придумали, не для того, чтобы проект работал или не работал, а для оптимизации по памяти.
В некоторый задачах важна скорость, а памяти свободной много. В других задачах каждый байт на счету.
Go to the top of the page
 
+Quote Post
juvf
сообщение May 29 2014, 23:17
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Есть место в программе, например обработчик прерывания.... без оптимизации один си-оператор есть 6 асм команд. без оптимизации почти 90% времени уходит на обработчик. прога не работает. с макс ур оптимизации по скорости этого обработчика си-оператор есть 4, а то и 2 асм команды. в итоге в прерывании 40-50% времени. прога работает без сбоев.

а то место, где optimize=none.... там используются дефайны регитров, библиотечные. можно канечно свои определить, обставить всё валатайлами.... в итоге асм получится 1в1 как с optimize=none. смысыл перелопачиать библиотечные дефайны и тратить время на "красивый код", если optimize=none решает проблему?

Цитата
Стоит решать проблему а не следствие.
Проблема в том, что оптимизатор оптимизирует этот код. Отключить оптимизацию можно волотайлами или optimize=none. кому что милее
Go to the top of the page
 
+Quote Post
adnega
сообщение May 30 2014, 00:07
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(juvf @ May 30 2014, 07:27) *
Есть место в программе, например обработчик прерывания.... без оптимизации один си-оператор есть 6 асм команд. без оптимизации почти 90% времени уходит на обработчик. прога не работает. с макс ур оптимизации по скорости этого обработчика си-оператор есть 4, а то и 2 асм команды. в итоге в прерывании 40-50% времени. прога работает без сбоев.

Еще в деле увеличения производительности очень помогает выравнивание данных. Все 8-ми и 16-ти битные данные нужно заменить на 32-битные.
Массивы копировать или очищать сразу по 32 бита. Ну и главный козырь - попробовать перенести рутину на аппаратные блоки (DMA, таймеры, SPI и т.п.)
Как правило, чем жирнее обработчик (а это на самом деле должно насторожить), тем больше возможностей для оптимизации. Крошечный обработчик можно
и ручками (читай на asm) написать. Вообще архитектура проекта должна быть заточена под эти "критические" обработчики.
Если не считать выключенную оптимизацию, то разница между результатом для разных уровней оптимизации (при оптимальном на C-уровне коде) не значительна. Точне не 2 раза.
Цитата(juvf @ May 30 2014, 07:27) *
а то место, где optimize=none.... там используются дефайны регитров, библиотечные. можно канечно свои определить, обставить всё валатайлами.... в итоге асм получится 1в1 как с optimize=none. смысыл перелопачиать библиотечные дефайны и тратить время на "красивый код", если optimize=none решает проблему?
Проблема в том, что оптимизатор оптимизирует этот код. Отключить оптимизацию можно волотайлами или optimize=none. кому что милее

В данном случае отсутствие volatile у регистров преступление. Нужно править библиотеку. Насчет 1в1 не полностью верно, ведь кроме доступа к регистрам есть и другой код. Выключение оптимизации не решение, т.к. при обращении из разных кусков программы (в том числе и с включенной оптимизацией) поведение будет разным. Может, вместо "optimize=none"/"optimize=yes" при каждом обращении к переменной в критичном к скорости модуле легче в одном месте написать volatile и иметь рабочий код при любом уровне оптимизации?
Go to the top of the page
 
+Quote Post
juvf
сообщение May 30 2014, 00:27
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(adnega @ May 30 2014, 10:17) *
Ну и главный козырь - попробовать перенести рутину на аппаратные блоки (DMA, таймеры, SPI и т.п.)
Естественно. Но задач столько впихнули в этот проект и попытались его седать не на intel i7, а на проце попроще. экономика должна быть экономной. аппаратные блоки и без этого нагружены по максимуму.
Go to the top of the page
 
+Quote Post
adnega
сообщение May 30 2014, 03:40
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(juvf @ May 30 2014, 08:37) *
Естественно. Но задач столько впихнули в этот проект и попытались его седать не на intel i7, а на проце попроще. экономика должна быть экономной. аппаратные блоки и без этого нагружены по максимуму.

А что за процессор Вы используете, если не секрет?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 30 2014, 04:07
Сообщение #12


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(juvf @ May 28 2014, 20:04) *

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




--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 30 2014, 04:33
Сообщение #13


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(adnega @ May 30 2014, 13:50) *
А что за процессор Вы используете, если не секрет?

Присоединяюсь к вопросу. Мне тоже очень интересно, производитель какого контроллера не озаботился словом volatile в описании регистров.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
juvf
сообщение May 31 2014, 00:30
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



stm32 cm3. про библы от производителя речи не было.

2demiurg_spb, вы со своим подходом смотрите не упритесь.

Прочему прогеры такой народ? Если кто-то что-то делает не по их евангелию, то он не прав. Да ещё и не скупятся потролить. Почему именно ВАШ системный подход тру? Почему вы решаете, что иссус правильный бог. Почему не ЛММ? Когда такие ковбои-идеалисты сталкиваются с любым кодом, они сразу же начинают истерить и пытаться переписать всё с нуля по своим лекалам.

Вы же не знаете и толики того ТЗ, что у меня. Не имеете представления об объеме, задачах, капризах заказчика, какие либы можно юзать, а какие нет.

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

Цитата
Если поведение программы зависит от уровня оптимизации, значит программа написана неверно.

Ну ваша вера. Уважаю. Перевербовывать вас не собираюсь. Оскорблять "выёжывающимся студентом" и назвать ваш продукт гавном не намерен. Моя вера иная. Есть места в программе, где каждый тик на счету, жёсткий реал тайм. Грубо говоря тиком больше, тиком меньше - в итоге фронт импульса не в том месте. Улетели....
Go to the top of the page
 
+Quote Post
adnega
сообщение May 31 2014, 02:01
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(demiurg_spb @ May 30 2014, 12:17) *
Вы рано или поздно с таким не системным подходом упрётесь в стену. Тем более, что проект с ваших слов - большой.
Вы ведь себя программистом называете, не так-ли?
А выёживаетесь как студент с несчастливым билетом на экзамене. Простите за прямоту.
В конечном итоге вольному - воля, но я не хотел бы быть в числе тех кому достанется радость работать с вашим конечным продуктом.

Полностью согласен. Успех программиста МК, я считаю, заключается в многократном использовании кода. Когда одно отлаженное решение можно использовать в разных проектах (и даже на разных архитектурах). Скорость и качество разработки возрастает, функциональность тоже, т.к. часть отведенного на разработку времени отсвобождается за счет применения готовых решений, и можно уделить время доп. плюшкам. Поэтому я в лучших традициях "русские долго запрягают, зато потом быстро едут", очень скурпулезно делаю библиотеки. В рамках большого проекта остутствие библиотек или их кривизна смерти подобна.

На форуме ТС реально помогает и неплохо ориентируется в вопосах RTOS, поэтому ярлык "студент" тут не подходит. Если есть такая возможность, то нужно посадить за выпрямление библиотек "настоящего студента", четко сформулировав для него задачу, - тот и полезное дело сделает и опыту поднаберется. Реальные разработчики должны думать над архитектурой)

То, что в рамках STM32 на Cortex-M4 можно сделать очень сложные проекты полностью согласен. Хорошо, когда функционал известен заранее, хуже - когда
добавляется в процессе разработки. Тогда и вылезают всякие "костыльные решения".

Да, и не забываем про сопровождаемость кода. Сами откроете через год или другой разработкик возьмется за поддержку для галочки написанного приложения - времени и нервов будет потеряно немало.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 00:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01525 секунд с 7
ELECTRONIX ©2004-2016