2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Замена целочисленного деления на умножение и сдвиг (теория)
Сообщение25.12.2015, 09:22 


07/02/13
21
Предлагаю обсудить следующую видео-лекцию, касающуюся замены целочисленного деления на умножение и сдвиг.

В этой беседе даётся теоретическое представление о том, как можно заменить процедуру деления целых неотрицательных чисел с округлением вниз на умножение с последующим сдвигом. Доказывается теорема, с помощью которой можно точно установить необходимый сдвиг, когда известен знаменатель и диапазон значений числителя. Выводятся формулы, с помощью которых вычисляется нужный множитель и сдвиг, даются примеры.

- Ссылка на архив с презентацией и программой для подбора параметров:
https://yadi.sk/d/5PLnPY0KmTaXz

Какие ещё моменты стоило упомянуть в лекции? С чем вы согласны или не согласны? Полезна ли была лекция?

 Профиль  
                  
 
 Re: Замена целочисленного деления на умножение и сдвиг (теория)
Сообщение25.12.2015, 09:51 


19/05/10

3940
Россия
А для чего эта замена нужна или может понадобиться?

 Профиль  
                  
 
 Re: Замена целочисленного деления на умножение и сдвиг (теория)
Сообщение25.12.2015, 10:16 
Заслуженный участник


27/04/09
28128
Делить на константу бывает дольше, чем проделать те манипуляции. В былые времена так нередко преобразовывали при оптимизации. Сейчас, кажется, распространённые компиляторы C/C++ (и чего-нибудь ещё) делают такое преобразование, если в нём есть смысл, автоматически; точно не скажу.

 Профиль  
                  
 
 Re: Замена целочисленного деления на умножение и сдвиг (теория)
Сообщение25.12.2015, 10:44 
Заслуженный участник


26/05/14
981
Можно добавить ссылки на "Алгоритмические трюки для программистов" Уоррена мл. Там рассматривается эта задача.

 Профиль  
                  
 
 Re: Замена целочисленного деления на умножение и сдвиг (теория)
Сообщение25.12.2015, 11:26 


07/02/13
21
Цитата:
А для чего эта замена нужна или может понадобиться?

На некоторых процессорах (Intel и AMD точно из их числа) такая замена может сильно ускорить деление.

На процессорах, которые не поддерживают умножение с расширением результата до 64 бит это вряд ли даст выигрыш, но тут надо проверять, а практики ещё не было.

 Профиль  
                  
 
 Re: Замена целочисленного деления на умножение и сдвиг (теория)
Сообщение25.12.2015, 17:19 
Заслуженный участник


20/08/14
11170
Россия, Москва
mihailm в сообщении #1085681 писал(а):
А для чего эта замена нужна или может понадобиться?
Добавлю, на некоторых процессорах (многие микроконтроллеры) команда умножения есть, а команды деления нет.

buti в сообщении #1085709 писал(а):
На некоторых процессорах (Intel и AMD точно из их числа) такая замена может сильно ускорить деление.
Да, а ещё тогда можно будет воспользоваться MMX/SSE/AVX расширениями и ещё более ускорить программу.

 Профиль  
                  
 
 Re: Замена целочисленного деления на умножение и сдвиг (теория)
Сообщение25.12.2015, 20:50 
Аватара пользователя


31/10/08
1244
buti
Ну что же. Четыре с минусом.

Лекцию всю переписать. Теорию можете взять отсюда
http://www.agner.org/optimize/optimizing_assembly.pdf
Во-вторых когда пишете статью в конце надо приводить источники информации.

 Профиль  
                  
 
 Re: Замена целочисленного деления на умножение и сдвиг (теория)
Сообщение30.12.2015, 05:55 
Аватара пользователя


07/02/12
1403
Питер
Dmitriy40 в сообщении #1085777 писал(а):
Добавлю, на некоторых процессорах (многие микроконтроллеры) команда умножения есть, а команды деления нет.

ARM-ы все старые (аля ARMv4) не умеют делить. и практически все компиляторы при делении на константу прибегают к такому трюку. программисты раньше также прибегали, когда делить приходилось на условную константу

 Профиль  
                  
 
 Re: Замена целочисленного деления на умножение и сдвиг (теория)
Сообщение30.12.2015, 09:20 
Заслуженный участник


04/03/09
906
Да и в программах, скомпиленных под x86, я встречал подобную фишку. Компилятору виднее. =)

 Профиль  
                  
 
 Re: Замена целочисленного деления на умножение и сдвиг (теория)
Сообщение07.01.2016, 05:09 
Аватара пользователя


07/02/12
1403
Питер
12d3 в сообщении #1086958 писал(а):
Компилятору виднее. =)

он не видит условные константы - т.е. делители, которые меняются редко, иногда при инициализации модуля. тут и приходит на помощь такой трюк, но уже в ручном исполнении

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group