Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2009, 12:46   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Скорость обработки операций

Насколько мне извество, что бы удвоить число, лучше пользоваться сложением:
A:=A+A, а не умножением: A:=A*2.
Где то я еще слышал про операцию переноса на один бит и не могу найти. Вопрос такой: можно ли получить выигрыш в скорости, используя какие-то конкретные операторы, вместо стандартных. Я не имею ввиду только удвоение.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 05.06.2009, 13:26   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Конечно, если операция повторяется в цикле достаточно большое количество раз.
пыщь
JTG вне форума Ответить с цитированием
Старый 05.06.2009, 13:28   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

учитывая нынешние частоты процессоров этот выигрыш ты не заметишь.. разве что ты програмируешь какой нибудь контроллер.. где тебе важно время выполнения кода..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 05.06.2009, 13:37   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Цитата:
про операцию переноса на один бит
Деление сдвигом http://www.wasm.ru/baixado.php?mode=tool&id=203
На сложении может много и не сэкономишь, но вот этот трюк заметно быстрее
пыщь

Последний раз редактировалось JTG; 05.06.2009 в 13:45.
JTG вне форума Ответить с цитированием
Старый 05.06.2009, 13:44   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Мммм... Не совсем понятен смысл этого приложения. Я в ассемблере не особо смыслю. Про сдвиг я имел ввиду операцию shl или как там она называется.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 05.06.2009, 13:47   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Кроме того, Inc(x) будет быстрее чем x:=x+1;
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 05.06.2009, 13:53   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Ну это вообще азы. INC(X), INC(X,N), DEC(X), DEC(X,N).
А вообще неплохо бы было выписать все такие операторы-оптимизаторы, что бы потом не искать.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 05.06.2009, 14:14   #8
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Мммм... Не совсем понятен смысл этого приложения. Я в ассемблере не особо смыслю. Про сдвиг я имел ввиду операцию shl или как там она называется.
Просто shr, если делитель = степень 2
x div 2 = x shr 1
x div 4 = x shr 2
x div 8 = x shr 3
...
иначе нужно комбинировать с умножением

У меня 100.000.000 операций A := A div 5 занимает ~2400 тиков, (~4 сек)
а такое же количество через mul/shr ~500 (меньше секунды)
Выигрыш в 5 раз

div


mul/shr


Однако нужно помнить, что компилятор делфи и сам по мере возможности пытается оптимизировать код, поэтому деление на 8, например, реализует так (эффективнее shr в 2 раза):


Всё уже, кстати, написано на wasm.ru, там куча статей по оптимизации кода под разные процессоры
пыщь

Последний раз редактировалось JTG; 05.06.2009 в 14:18.
JTG вне форума Ответить с цитированием
Старый 05.06.2009, 20:17   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Насколько мне извество, что бы удвоить число, лучше пользоваться сложением:
A:=A+A, а не умножением: A:=A*2.
Где то я еще слышал про операцию переноса на один бит и не могу найти. Вопрос такой: можно ли получить выигрыш в скорости, используя какие-то конкретные операторы, вместо стандартных. Я не имею ввиду только удвоение.
Постановка вопроса не совсем корректна. Вместо можно ли получить выигрыш в скорости, используя какие-то конкретные операторы, вместо стандартных. возможно вопрос должен звучать так можно ли получить выигрыш в скорости, используя стандартные операторы не по прямому назначению? поскольку как я понял речь об нестандартных операторах не идет.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с программированием операций обработки файлов(Pascal) Дима82 Помощь студентам 11 24.05.2008 18:02
Программирование операций обработки файлов Дима82 Фриланс 1 19.05.2008 13:57
Программирование операций обработки двумерных массивов Дима82 Помощь студентам 16 12.05.2008 21:33
Программирование операций обработки одномерных массивов Дима82 Помощь студентам 12 11.05.2008 15:24