![]() |
Кстати - лишнее доказательство тезиса Декарта:
сомнение есть способ познания. Сомневаться нельзя лишь в необходимости сомнений. Исходя из этого не стоит 100% доверять какой-либо теории. |
AsmLover, спасиба за столь подробное описания приимужества деления на 2 перед умножнием на 0.5!
бинарные операции считаются намного быстрее арифмитеческих действии. сдвиг рулит полюбе! |
Цитата:
Для тех, кто интенсивно использует вычисления (матрицы транспонирует всякие :) ), необходимо знать, что если в примере Код:
time4=MilliSecs() то время выполнения таких операций уменьшится в два раза и будет быстрее цикла умножения, а в случае b = j / 3.0 время, по сраснению с вариантом с b# возрастет процентов на 5 и сравняется с циклом умножения. Это связано с использованием неявного приведения типов в компиляторе. |
Вообще говоря, сдвиг не по-любому рулит. Как бы Impersonalisu снова слоган не поменять... Сдвиг рулит на языках, не имеющих нормальной возможности обработки битов, таких как Бейсик.
На ассемблере релизация, например, целочисленного умножения сдвигом и сложением уже не является самой быстрой, хоть и быстрее команды IMUL (14 тактов на P4). Быстрее выполняется команды LEA (4 такта), например вот как выглядит умножение на 9: lea eax, [eax+eax*8], и это выполняется быстрее, кстати, (в тактах) на P3, чем на P4. Также можно оптимизировать и одновременное выполнение (4 инструкций для АЛУ P4) RISC-подобное умножение командами MOV и ADD или, с интерливом, плюс LEA. Хотя из описания оптимизации кода под процессоры P4 уже интерлив не упоминается, однако он по-прежнему эффективен, как и для P3. А оптимальным алгоритмом целочисленного умножения ax на bx по-прежнему является: Для каждого бита слева направо, если бит =1 выполняется add ebx, eax add eax, eax, а если бит =0, то add eax, eax. Быстрее этого ничего нет ( разве оптимизация шитого кода, но это уже доступно только самим разработчикам процессоров). Конечно, это уже высший пилотаж системного программирования и вряд ли понадобится, если вы не занимаетесь оптимизацией кода на профессиональном уровне. Кстати, использование LEA эффективнее по тактам на AMD, чем на P4. Знание архитектуры процессоров рулит! :super: |
Re: Делить нельзя, умножить
Вложений: 2
Звиняюсь что поднимаю старую тему, но
Для вещественных переменных обе операции будут равны по скорости, ибо обе идентичны по коду, обе используют FPU (FDIVRP и FMULP) Для целочисленных переменных в умножении так же используется FPU, а в делении битовый сдвиг, поэтому быстрее выполняется он, но только для целочисленных. |
Re: Делить нельзя, умножить
при 30000000 повторах деление стабильно выигрывает у умножения :)
ПС у мну 64битный атлончег :) |
Часовой пояс GMT +4, время: 01:34. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot