Отговори на тема  [ 24 мнения ]  Отиди на страница 1, 2  Следваща
Оптимизация на програма 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4616
Местоположение: Новата земя на племето Мутум'ба
Мнение Оптимизация на програма
Значи имам един голям фрагмент от от примерния вид:
if(val == aa) { .... }
else if(val == bb) { ... }
else if(val == cc) { ... }
else if(val == dd) { ... }
.....
.....
else { ... }

Сравненията са с непоследователни стойности. Опитвам се да измисля начин за оптимизация на тоя пасаж за по-бързо изпълнение. Вече съм вкарал предварителни проверки дали изобщо да идвам на него, и съм подредил иф-вете според вероятността да се случат.

Някакви нестандартни идеи как още да го забързам?

PS. switch() върши точно същото, така че не е оптимизация

_________________
'просто' е технически синоним на 'красиво'


Нед Юли 19, 2020 9:28 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 3:11 pm
Мнения: 3742
Местоположение: София
Мнение Re: Оптимизация на програма
Ако компилаторът е умен, switch case е най-бързото, ифове няма, само табличен jump. Ако кейсовете са малко разхвърляни, това ще работи добре, въпреки, чи ще има много елементи, които сочат към default. Aко има огромни разлики, компилаторът генерира сортирана таблица и се ползва бинарно търсене. Дали ще е по-ефективно, зависи от броя на елементите. И в двата случая губиш от това, че не ползваш, че ти е известна вероятността за влизане в определен кейс. Опитай се да се сшретнеш някакъв реалистичен тест и виж кое е по-добро.


Нед Юли 19, 2020 9:51 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4616
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Оптимизация на програма
Вече го пробвах със switch() под GCC в прозорците, и под XC32 (с -О3 оптимизация).
Разликата в изпълнението е 0.059%

_________________
'просто' е технически синоним на 'красиво'


Нед Юли 19, 2020 10:08 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 8:39 pm
Мнения: 1971
Мнение Re: Оптимизация на програма
Таблица или мащабиране + таблица? Тогава няма да имаш никакви проверки :idea:

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!


Нед Юли 19, 2020 11:29 am
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Май 07, 2019 8:16 pm
Мнения: 278
Мнение Re: Оптимизация на програма
От чисто любопитство - две или повече различни условия 'aa' 'bb' в условната част могат ли да извикат един и същ код в частта с къдравите скоби ?

if(aa) then {ala bala}
if(bb) then {portokala}
if(cc) then {ala bala}

...или всяко условие извиква уникален код.

if(aa) then {ala}
if(bb) then {bala}
if(cc) then {portokala}


Нед Юли 19, 2020 1:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4616
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Оптимизация на програма
Jack написа:
От чисто любопитство - две или повече различни условия 'aa' 'bb' в условната част могат ли да извикат един и същ код в частта с къдравите скоби ?

if(aa) then {ala bala}
if(bb) then {portokala}
if(cc) then {ala bala}

...или всяко условие извиква уникален код.

if(aa) then {ala}
if(bb) then {bala}
if(cc) then {portokala}


Всяко е уникално

_________________
'просто' е технически синоним на 'красиво'


Нед Юли 19, 2020 1:31 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 06, 2018 4:18 pm
Мнения: 1220
Мнение Re: Оптимизация на програма
switch/case e по-бърз за изпълнение от if стейтмънта, разбъркай порядъка на if цикъла като започнеш от условието с най малка вероятност и завършиш с условието с най-голяма и провери отново производителността. Няма универсална рецепта за оптимизация, всичко е според кода, и понеже нямам код, няма как да ти дам съвет.


Нед Юли 19, 2020 2:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4715
Мнение Re: Оптимизация на програма
той така или иначе GCC ще оптимизира switch/case/if/else :)

_________________
main[-1u]={1};


Нед Юли 19, 2020 5:57 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8891
Местоположение: Разград
Мнение Re: Оптимизация на програма
Сега младоците ги учат, че в таква ситуация се взема по-мощен процесор. Иначе аз го виждам условията да се сведат до индекс и после с този индекс, таблично да си вика съответната функция. Което пак може да се окаже че отнема повече време в крайна сметка.


Нед Юли 19, 2020 6:43 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 10:31 pm
Мнения: 9645
Мнение Re: Оптимизация на програма
в общия случай, компилатора (gcc/clang) ще генерира еднакъв код и за двата случая с нещо по-голямо от -О2
нямам наблюдения за мокрочипското компилатор.


Нед Юли 19, 2020 7:08 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4616
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Оптимизация на програма
Cekins написа:
Сега младоците ги учат, че в таква ситуация се взема по-мощен процесор. Иначе аз го виждам условията да се сведат до индекс и после с този индекс, таблично да си вика съответната функция. Което пак може да се окаже че отнема повече време в крайна сметка.


Да, и мен ме изненада но е факт. Пробвах така и се оказа с почти 10% по-бавно. Явно индексирането си има цена...

_________________
'просто' е технически синоним на 'красиво'


Нед Юли 19, 2020 7:16 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8891
Местоположение: Разград
Мнение Re: Оптимизация на програма
Ами значи нещо концепцията куца :) Аз вече втора седмица се мъча да измисля нещо да стане ултра елегантно и не ми се получава.


Нед Юли 19, 2020 8:31 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 03, 2005 10:31 am
Мнения: 746
Местоположение: Пловдив
Мнение Re: Оптимизация на програма
Таблица със всички стойности с които сравняваш свързана с Call-ове към съответното действие , със сигурност победи винаги ще се изпълнява проверката за константно време като цяло при различни стойности винаги времето за изпълнение ще е едно и също .Другия вариант е да го напишеш на VHDL или Verilog ( шегичка).

_________________
"I really do like SOLDERING as my programming language." Bob Pease


Пон Юли 20, 2020 3:19 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8891
Местоположение: Разград
Мнение Re: Оптимизация на програма
То така ама ако сравняваш една и съща променлива. Бабане така го е написал, че сякаш е една и съща. Тогава въпросната променлива се прави като индекс на таблица с call-ове. Ще трябва обаче тези които няма как да се появят да присъстват в таблицата по някакъв начин - малко повече код. И щом компилатора не иска да го сдъвче по този начин - инлайн асм...


Пон Юли 20, 2020 3:28 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Яну 19, 2007 8:16 am
Мнения: 1063
Местоположение: путинофили: "иди н***й"
Мнение Re: Оптимизация на програма
когато е switch - компилатора прави jump по таблица (не е call)
а когато е с таблица прави call (със съответния овърхед)


Пон Юли 20, 2020 4:10 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 24 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 7 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни