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

 
 
 
Reply to this topicStart new topic
> Опримизация switch case, ускорение работы
mantech
сообщение Mar 9 2016, 14:56
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Собственно заинтересовал такой вопрос, навеянный темой в ветке gcc:
http://electronix.ru/forum/index.php?showt...=61802&st=0

Так получилось, что есть программа с 50ю кейсами, переменная от 1 до 50 и выбор соотв. кейса. Хотелось бы ускорить переход на каждый кейс, путем индексирования. Предложенный вариант с функциями и массивом их адресов особо не катит, т.к. нужна передача параметров и глобально задавать переменые - не вариант. Подход с метками считаю более лучшим, но как получить адрес метки, чтоб закинуть его потом в массив - без понятия.
Может есть какие мысли??
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 9 2016, 15:08
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(mantech @ Mar 9 2016, 16:56) *
Хотелось бы ускорить переход на каждый кейс, путем индексирования.
ИАР достаточно умный компилятор, такую оптимизацию он делал автоматически еще лет 15 назад, посмотрите листинг.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 9 2016, 15:24
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(mantech @ Mar 9 2016, 17:56) *
Хотелось бы ускорить переход на каждый кейс, путем индексирования.
...
Может есть какие мысли??

Мысли есть. А оно надо? В смысле из-за неоптимальности именно в этом месте что-то не работает?
И присоединюсь к Сергею: многие компиляторы это сами умеют. А если не умеет, или ему в этом конкретном случае что-то мешает, то и фиг с ним. Делать закат солнца вручную - такой моветон...

Цитата(mantech @ Mar 9 2016, 17:56) *
Подход с метками считаю более лучшим, но как получить адрес метки, чтоб закинуть его потом в массив - без понятия.

Переходите на GCC.
Go to the top of the page
 
+Quote Post
Baser
сообщение Mar 9 2016, 16:31
Сообщение #4


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(mantech @ Mar 9 2016, 16:56) *
Собственно заинтересовал такой вопрос, навеянный темой в ветке gcc:
...
Может есть какие мысли??

А какая платформа у вас?
Если тот же MSP430, что в ссылке, так чем не устраивает _even_in_range_(range) ?

А если что другое, то в ИАРе делал такое:
Код
__task void main(void)
  {
  StartUp_C();
  asm ("MOV.W   SP,&Task_InitSP");
  asm ("MAIN_CYCLE: ");
  for(;;)
    {
    Main_Services();
    .......
    }
  }

void Foo(unsigned int qwerty)
  {
  ........
  asm ("BR      #MAIN_CYCLE");
  }

Так что, со встроенным ассемблером что нить можно придумать, но для switch-а я это делать крайне не советую...
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 9 2016, 18:28
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(scifi @ Mar 9 2016, 18:24) *
Мысли есть. А оно надо? В смысле из-за неоптимальности именно в этом месте что-то не работает?


В смысле просто была мысль ускорить интерпретацию команд...

Да, забыл, платформа АРМ кортекс А9.

Цитата(scifi @ Mar 9 2016, 18:24) *
Переходите на GCC.


Нее, уж лучше вы к нам biggrin.gif
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 9 2016, 20:42
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(mantech @ Mar 9 2016, 21:28) *
В смысле просто была мысль ускорить интерпретацию команд...

Ну так гэцэцэшная фича с метками-указателями для этого и придумана.

Цитата(mantech @ Mar 9 2016, 21:28) *
Нее, уж лучше вы к нам biggrin.gif

А я и там, и здесь. Что удобнее, то и использую. А вы можете продолжать колоться, плакать и кушать свой кактус biggrin.gif
Go to the top of the page
 
+Quote Post

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

 


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


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