- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
mov ebx, [sKey]
mov ecx, 31
l9:
;----------loop------------
fprem
shr ebx,1
jnc if9
.......
if9:
fmul st0,st0
;----------loop------------
loop l9
guest 07.05.2010 18:05 # −9
guest 07.05.2010 18:36 # +3
haskell 08.05.2010 18:06 # +2
Именно так. Вы просто феерический бред выдали.
3.14159265 07.05.2010 18:19 # 0
суть в том что нужный и результат вычисляется там где многоточие
а остаток и умножение - вспомогательные операции
так думаю будет четко ясно где говнокод
если и так никому не будет ясно.
напишу в чем именно затуп
guest 07.05.2010 18:27 # 0
3.14159265 07.05.2010 18:38 # 0
говнокод из проекта в ответ на упрек в №3177
судя по активности там и здесь - детские говно коды интереснее и смешнее, поскольку они понятные
напишу чуток позже в развернутом виде
TarasB 07.05.2010 23:25 # 0
guest 08.05.2010 16:05 # +2
cfdev 07.05.2010 18:49 # 0
guest 07.05.2010 18:52 # 0
guest 07.05.2010 19:17 # +1
guest 07.05.2010 19:18 # 0
guest 07.05.2010 19:24 # 0
This is obvious 07.05.2010 21:05 # 0
guest 07.05.2010 19:24 # 0
TarasB 07.05.2010 23:19 # +2
3.14159265 07.05.2010 19:27 # 0
итак
ebx сдвигается влево на 1, когда он станет 0 можно выйти из цикла
чтобы не выполнять крайне ресуркоемкие нахождения остатков и умножения
+ как я написал выше основной код там где многоточие
то есть выходить из цикла можно смело как только ebx=0
и заменять луп на что-то вроде
cmp ebx,0
jnz l9
такие как написавший первый пост скажут 2 операции - херня
но ускорение в 1.25-1.5 раза того стоит
в принципе даже и втаком как я запостил виде - это говно
допустим ebx=1 при таком коде выполнится 31 итерация умножения и 31 итерация деления
если же проверять ebx на 0 из цикла можно выйти досрочно на первой же итерации
потом возвести st0 в нужную степень и поделить на st1 в нужной степени и найти остаток
таким образом экономим кучу на умножении и делении (которые весьма емкие)
даже бы если б на месте делений стояли другие операции мы могли бы выйти из цикла
и зайти в другой цикл без условия, что также было бы быстрее
я там еще думал как избавится от бранчинга conditional movами,
но оно того по замерам скорости того не стоило потому заменил многоточиями, дабы не отвлекать читателя
guest 07.05.2010 19:29 # 0
guest 07.05.2010 19:31 # −4
У вас мышление С++ ника, беающего за копеечкой.
TarasB 07.05.2010 23:20 # 0
xaionaro 08.05.2010 09:36 # 0
UncleAli 08.05.2010 13:11 # 0
cfdev 08.05.2010 15:46 # 0
guest 08.05.2010 15:56 # 0
haskell 08.05.2010 17:23 # 0
Говногость 08.05.2010 17:46 # 0
Вы особенный. Очень хотел бы увидеть ваш код (не говнокод) на Си из реального проекта.
Возможно, я полностью поменяю мнение об этом языке, хотя и так его уважаю.
Возможно пойму, что я просто говнокодер, и язык в этом не виноват.
Очень прошу привести пример. =)
haskell 08.05.2010 17:50 # 0
Говногость 08.05.2010 18:02 # 0
И я бы взглянул на его использование, да и не такой уж велосипед. В Си ведь этого нет.
haskell 08.05.2010 18:10 # 0
Первая же ссылка раскрывает копипастера
http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html
Говногость 08.05.2010 18:16 # 0
Покрайней мере для меня.
По мне, конечно, лучше использовать транслятор какого-нибудь языка в Си, если встроенное устройство ничего, кроме Си неподдерживает, чем костыли.
Всё-же писать нужно будет меньше.
haskell 08.05.2010 18:28 # 0
Что-что??
facepalm.c
Говногость 08.05.2010 18:32 # 0
haskell 08.05.2010 18:41 # 0
Язык написан? Да нет, его спеки написали другие люди. А вот компилятор уже ближе к истине.
>>а самому другой язык писать некогда
Тоже самое. Язык в смысле описать грамматику/семантику или же написать компилятор? Вещи принципиально разные.
Говногость 08.05.2010 19:09 # 0
haskell 08.05.2010 19:13 # +1
Программист - это почти лингвист: лексика, семантика, контекстные условия - даже термины те же.
Говногость 08.05.2010 19:20 # 0
cfdev 09.05.2010 11:12 # 0
TarasB 08.05.2010 19:02 # +3
Говногость 08.05.2010 17:48 # 0
Противник преждевременной оптимизации того, что в этом не нуждается.
TarasB 08.05.2010 17:55 # −1
Говногость 08.05.2010 18:04 # +1
TarasB 08.05.2010 19:01 # 0
И вообще,
http://groups.google.com/group/sellme-dev/msg/cbbc6c83649aaf56
Говногость 08.05.2010 19:13 # 0
>Естественно, оптимизация должна быть разумной.
Говногость 08.05.2010 19:18 # 0
TarasB 08.05.2010 20:55 # +1
haskell 08.05.2010 20:58 # +1
TarasB 08.05.2010 21:15 # 0
Говногость 08.05.2010 22:42 # +1
>Иначе схрена ли её на асме писать?
Ты знаешь, когда я только учился, то я писал на ассемблере даже просто так. Просто так посреди проги делал ассемблерную вставку, например что-бы инкрементировать значение. Сейчас даже самому смешно. Оптимизация, ухудшающая оптимизацию. :D
guest 07.05.2010 19:52 # +2
как это влево??
в коде четко прописано shR ebx,1 !
3.14159265 12.05.2010 10:24 # 0
гость прав, биты анализируются с младших
TarasB 07.05.2010 23:34 # 0
А тогда получается, что от 32 умножений не избавиться. Если "основной код" не зависит от промежуточных результатов этих умножений (а это из кода неясно), то да, можно сделать два цикла. Будет ли это быстрее, не знаю. Если Key большое, то врядли.
guest 07.05.2010 23:39 # 0
Афтар, требуем больше кода.
3.14159265 11.05.2010 12:56 # 0
согласен, ради точности это все и писалось
>>Будет ли это быстрее, не знаю. Если Key большое, то врядли.
key большое, но выигрыш в скорости есть всегда, поскольку всегда есть вероятность экономии пары итераций
+ ecx можно задействовать для других целей
TarasB 11.05.2010 18:42 # 0
Так что выигрыш от объединения циклов перевесит проигрыш от пары итераций.
guest 08.05.2010 03:13 # +1
guest 08.05.2010 15:56 # −1
guest 08.05.2010 16:07 # −1
cfdev 08.05.2010 17:42 # −1
// fixed
Говногость 09.05.2010 15:56 # 0
Вы имели ввиду cpu ebi, ebi?
cfdev 09.05.2010 19:40 # 0
3.14159265 11.05.2010 12:53 # 0
>>заменять луп на !!что-то вроде!!
>>cmp ebx,0
cmp - это чтоб всем было ясно