Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
Ассемблер
(Модератор:
Tuborg
) > Тема:
Замена деления на умножение.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Замена деления на умножение. (Прочитано 22228 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aether
Специалист
Offline
Пол:
Замена деления на умножение.
«
:
24-01-2018 16:49 »
Доброго вечера.
Хочу поинтересоваться: насколько развилась современная архитектура у x86/64 - всё ещё имеет смысл заменить одну операцию целочисленного деления на две операции целочисленного умножения? Или это уже не важно? И если важно, то каково хотя бы примерное соотношение скоростей этих операций, разумеется в варианте внутри регистров?
PS: регистров по 32 бита и по 64 бита в отдельных случаях.
Записан
RXL
Технический
Администратор
Offline
Пол:
Re: Замена деления на умножение.
«
Ответ #1 :
24-01-2018 21:28 »
Алгоритм целочисленного деления требует N вычитаний и N сдвигов, где N — разрядность числа. Умножение — обратный процесс: N сдвигов и N сложений. Т.е. в базе количество операций равное. Деление оптимизируется по приходу вычитаемого к нулю. Умножение оптимизируется пропуском сложений, если очередной бит множителя равен нулю. Как это реализовано схемотехнически, на столько быстрее от базового алгоритма и будет работать. При особом расточительстве можно и за 1 такт вычислить.
На мой взгляд быстрый делитель сделать сложнее, чем умножитель. Т.ч. логично будет предположить, что в большинстве реализаций ALU умножение быстрее деления. Значит да, умножение на обратную величину будет быстрее деления.
А вот если у нас плавающие значения, не уверен. Предположу, что примерно также + сложение мантис.
«
Последнее редактирование: 24-01-2018 21:31 от RXL
»
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор
Offline
Пол:
Re: Замена деления на умножение.
«
Ответ #2 :
24-01-2018 21:46 »
Но сперва задайся вопросом, зачем. Параллельно могут выполняться другие, более тормозные процессы. Караван идет со скоростью самого медленного верблюда.
http://ithare.com/infographics-operation-costs-in-cpu-clock-cycles/
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Aether
Специалист
Offline
Пол:
Re: Замена деления на умножение.
«
Ответ #3 :
25-01-2018 09:28 »
Хочется получить хорошую скорость в перспективе, поэтому есть идеи по реорганизации алгоритма. Сейчас нашёл данные только для PII, в нём умножение 32-х бит регистров выполняется за 3 такта, а деление 4 такта. Как бы при замене одного деления на два умножения идея терпит фиаско.
Записан
RXL
Технический
Администратор
Offline
Пол:
Re: Замена деления на умножение.
«
Ответ #4 :
25-01-2018 22:16 »
https://habrahabr.ru/company/intel/blog/346822/
Для интереса почитай. Они тоже заняты вопросами ускорения. Но, к примеру, многопоточность не всегда дает ускорение, хотя казалось бы, в два потока пережевать быстрее. Работа с памятью и кешов оказалась важнее.
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
Ассемблер
(Модератор:
Tuborg
) > Тема:
Замена деления на умножение.
Загружается...