- 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
Именно так. Вы просто феерический бред выдали.
суть в том что нужный и результат вычисляется там где многоточие
а остаток и умножение - вспомогательные операции
так думаю будет четко ясно где говнокод
если и так никому не будет ясно.
напишу в чем именно затуп
говнокод из проекта в ответ на упрек в №3177
судя по активности там и здесь - детские говно коды интереснее и смешнее, поскольку они понятные
напишу чуток позже в развернутом виде
итак
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ами,
но оно того по замерам скорости того не стоило потому заменил многоточиями, дабы не отвлекать читателя
У вас мышление С++ ника, беающего за копеечкой.
Вы особенный. Очень хотел бы увидеть ваш код (не говнокод) на Си из реального проекта.
Возможно, я полностью поменяю мнение об этом языке, хотя и так его уважаю.
Возможно пойму, что я просто говнокодер, и язык в этом не виноват.
Очень прошу привести пример. =)
И я бы взглянул на его использование, да и не такой уж велосипед. В Си ведь этого нет.
Первая же ссылка раскрывает копипастера
http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html
Покрайней мере для меня.
По мне, конечно, лучше использовать транслятор какого-нибудь языка в Си, если встроенное устройство ничего, кроме Си неподдерживает, чем костыли.
Всё-же писать нужно будет меньше.
Что-что??
facepalm.c
Язык написан? Да нет, его спеки написали другие люди. А вот компилятор уже ближе к истине.
>>а самому другой язык писать некогда
Тоже самое. Язык в смысле описать грамматику/семантику или же написать компилятор? Вещи принципиально разные.
Программист - это почти лингвист: лексика, семантика, контекстные условия - даже термины те же.
Противник преждевременной оптимизации того, что в этом не нуждается.
И вообще,
http://groups.google.com/group/sellme-dev/msg/cbbc6c83649aaf56
>Естественно, оптимизация должна быть разумной.
>Иначе схрена ли её на асме писать?
Ты знаешь, когда я только учился, то я писал на ассемблере даже просто так. Просто так посреди проги делал ассемблерную вставку, например что-бы инкрементировать значение. Сейчас даже самому смешно. Оптимизация, ухудшающая оптимизацию. :D
как это влево??
в коде четко прописано shR ebx,1 !
гость прав, биты анализируются с младших
А тогда получается, что от 32 умножений не избавиться. Если "основной код" не зависит от промежуточных результатов этих умножений (а это из кода неясно), то да, можно сделать два цикла. Будет ли это быстрее, не знаю. Если Key большое, то врядли.
Афтар, требуем больше кода.
согласен, ради точности это все и писалось
>>Будет ли это быстрее, не знаю. Если Key большое, то врядли.
key большое, но выигрыш в скорости есть всегда, поскольку всегда есть вероятность экономии пары итераций
+ ecx можно задействовать для других целей
Так что выигрыш от объединения циклов перевесит проигрыш от пары итераций.
// fixed
Вы имели ввиду cpu ebi, ebi?
>>заменять луп на !!что-то вроде!!
>>cmp ebx,0
cmp - это чтоб всем было ясно