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

 
 
> Проверка уровня оптимизации
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
 
Start new topic
Ответов
juvf
сообщение May 29 2014, 23:17
Сообщение #2


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

Группа: Свой
Сообщений: 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
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #4


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

Группа: Свой
Сообщений: 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
Сообщение #5


Гуру
******

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



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

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


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

Группа: Свой
Сообщений: 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 27 2014, 04:08
- - ViKo   Задайте принудительно для фрагмента: #pragma push ...   May 27 2014, 04:24
|- - Евгений100   ?   May 28 2014, 10:45
|- - juvf   Цитата(ViKo @ May 27 2014, 14:34) Задайте...   May 28 2014, 11:54
|- - adnega   Цитата(juvf @ May 28 2014, 20:04) А что в...   May 28 2014, 23:13
|- - demiurg_spb   Цитата(juvf @ May 28 2014, 20:04) Вы ран...   May 30 2014, 04:07
|- - adnega   Цитата(demiurg_spb @ May 30 2014, 12:17) ...   May 31 2014, 02:01
- - demiurg_spb   Цитата(juvf @ May 27 2014, 12:18) Есть пр...   May 27 2014, 06:18
- - msalov   Если поведение программы зависит от уровня оптимиз...   May 28 2014, 17:09
- - juvf   stm32 cm3. про библы от производителя речи не было...   May 31 2014, 00:30
- - juvf   ЦитатаТогда и вылезают всякие "костыльные реш...   May 31 2014, 02:24


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

 


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


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