Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > FAQ

FAQ Туториалы и часто задаваемые вопросы

Ответ
 
Опции темы
Старый 17.01.2006, 21:19   #16
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Кстати - лишнее доказательство тезиса Декарта:
сомнение есть способ познания.
Сомневаться нельзя лишь в необходимости сомнений.

Исходя из этого не стоит 100% доверять какой-либо теории.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 17.01.2006, 22:23   #17
alex-mad
Модератор
 
Регистрация: 13.09.2005
Сообщений: 1,835
Написано 6 полезных сообщений
(для 10 пользователей)
AsmLover, спасиба за столь подробное описания приимужества деления на 2 перед умножнием на 0.5!
бинарные операции считаются намного быстрее арифмитеческих действии.
сдвиг рулит полюбе!
(Offline)
 
Ответить с цитированием
Старый 17.01.2006, 22:57   #18
AsmLover
Оператор ЭВМ
 
Регистрация: 12.01.2006
Сообщений: 21
Написано 0 полезных сообщений
(для 0 пользователей)
Originally posted by impersonalis@Jan 17 2006, 08:17 PM
Не совсем правда понял - почему AsmLover сдивгает на 2 разряда (т.е. делит на 2^2=4, а не на один разряд )
Да какая разница для топика? Время выполнение SHR 1 и SHR $FFFFFFF одинаковое.

Для тех, кто интенсивно использует вычисления (матрицы транспонирует всякие ), необходимо знать, что если в примере

time4=MilliSecs()
For j=1 To 3000000
  b# = j / 3
Next
time4=MilliSecs()-time4
написать b# = j / 3.0,

то время выполнения таких операций уменьшится в два раза и будет быстрее цикла умножения, а в случае

b = j / 3.0

время, по сраснению с вариантом с b# возрастет процентов на 5 и сравняется с циклом умножения.
Это связано с использованием неявного приведения типов в компиляторе.
(Offline)
 
Ответить с цитированием
Старый 21.01.2006, 12:49   #19
AsmLover
Оператор ЭВМ
 
Регистрация: 12.01.2006
Сообщений: 21
Написано 0 полезных сообщений
(для 0 пользователей)
Вообще говоря, сдвиг не по-любому рулит. Как бы 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.

Знание архитектуры процессоров рулит!
(Offline)
 
Ответить с цитированием
Старый 26.12.2006, 11:01   #20
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: Делить нельзя, умножить

Звиняюсь что поднимаю старую тему, но
Для вещественных переменных обе операции будут равны по скорости, ибо обе идентичны по коду, обе используют FPU (FDIVRP и FMULP)
Для целочисленных переменных в умножении так же используется FPU, а в делении битовый сдвиг, поэтому быстрее выполняется он, но только для целочисленных.
(Offline)
 
Ответить с цитированием
Старый 26.01.2007, 22:18   #21
Errthou
Оператор ЭВМ
 
Регистрация: 22.01.2007
Сообщений: 32
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Делить нельзя, умножить

при 30000000 повторах деление стабильно выигрывает у умножения
ПС у мну 64битный атлончег
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разве нельзя поставить якорь по центру строки? О_о Phantom Программирование 4 22.03.2009 00:48


Часовой пояс GMT +4, время: 00:05.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com