45. Отказ от универсальности
45. Отказ от универсальности
Для операции умножения и деления необходимы значительные усилия от почти любого центрального процессора, так как они должны быть осуществлены (аппаратно или программно) через сдвиги и сложения или сдвиги и вычитания соответственно. Традиционные 4-разрядные и 8-разрядные процессоры не имели машинных команд для умножения или деления, так что данные операции приходилось осуществлять при помощи длинных подпрограмм, где явно осуществляются сдвиги и сложения или вычитания. Первые 16-разрядные процессоры, среди которых 8086, 8088 и 68000, действительно дают возможность осуществить операции умножения и деления аппаратными средствами, но соответствующие процедуры были очень медленными: в процессорах 8086 и 8088, например, для деления 32-разрядного числа на 16-разрядное было необходимо около 150 тактов.
Поэтому небольшие хитрости для увеличения скорости или устранения операций умножения и деления были и остаются одними из первых приемов, которые рассматривает каждый программист, который стремится к совершенству. Большинство из данных хитростей относится к категории, которую именуют «отказ от универсальности». Это замена рассчитанных на общий случай команд умножения и деления (или вызов соответствующих подпрограмм) рядом сдвигов и сложений или вычитаний для конкретных операндов.
Рассмотрим одну из простых процедур оптимизации умножения. Для умножения числа на степень двойки его следует просто сдвинуть влево на необходимое число двоичных (битовых) позиций. Вот такой, например, имеет вид некоторая общая, но медленная последовательность команд для умножения значения переменной MyVar на 8:
mov ax,MyVar mov bx,8 mul bx
mov MyVar,ax
Применение отказа от универсальности при выполнении деления несколько более ограничено. Деление на степень двойки, безусловно, очень просто. Для этого следует сдвинуть число вправо, следя только за выбором соответствующей команды сдвига для желаемого типа деления (со знаком или без знака). Определение остатка от деления на степень двойки для чисел без знака еще проще. Для этого следует осуществить просто одну команду операции логического И над операндом и непосредственным значением, которое должно быть записано в виде уменьшенного на единицу значения делителя. Деление чисел со знаком не так просто, так как знак остатка от деления должен соответствовать знаку делителя и не зависит от знака делимого. Реализация данных операций потребует непременного присутствия условных переходов, а это уже плохо.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Отказ от участия
Отказ от участия Вы не обязаны посещать каждую встречу, на которую вас приглашают. Более того, посещать слишком много встреч непрофессионально. Время нужно расходовать разумно. Будьте очень осмотрительны с выбором встреч, которые нужно посетить или от которых нужно
Атака типа «отказ в обслуживании»
Атака типа «отказ в обслуживании» К сожалению, функционирование только что описанного сервера вызывает проблемы. Посмотрим, что произойдет, если некий клиент-злоумышленник соединится с сервером, отправит 1 байт данных (отличный от разделителя строк) и войдет в состояние
8.4.7. Отказ от обслуживания
8.4.7. Отказ от обслуживания Почтовые серверы довольно часто подвергаются атакам типа DoS, потому что они должны принимать соединения для обслуживаемых почтовых ящиков от любых пользователей. Таким образом, подключение на 25 и 110 порты, чаще всего, общедоступны.Для защиты
15.6. Отказ от рекламы. Баннерный фильтр
15.6. Отказ от рекламы. Баннерный фильтр Вам не хочется тратить лишнее время на загрузку рекламных баннеров? Мне тоже. К счастью, SQUID позволяет достаточно просто решить эту проблему. Просто вставьте следующие строки в свой файл /usr/local /etc/squid/squid.conf:acl good_url url_regex
18.7. Отказ от рекламы. Баннерный фильтр
18.7. Отказ от рекламы. Баннерный фильтр Вам не хочется тратить лишнее время на загрузку рекламных баннеров? Мне тоже. К счастью, SQUID позволяет достаточно просто решить эту проблему. Просто вставьте следующие строки в свой файл squid.conf:acl good_url url_regex "/usr/local/etc/sguid/acl/good_url"acl bad_urlpath
Атака типа «отказ в обслуживании»
Атака типа «отказ в обслуживании» Один из недостатков последовательных серверов был уже отмечен выше — некоторым клиентам приходится ждать дольше чем нужно, потому что их запросы приходят после запросов других клиентов, запрашивающих большие файлы. Существует и другая
12.1. Отказ от оптимизации
12.1. Отказ от оптимизации Наиболее мощная методика оптимизации, входящая в инструментарий любого программиста, заключается в том, чтобы ничего не делать.Этот весьма выдержанный в духе Дзэн совет верен по нескольким причинам. Одной из них является экспоненциальный эффект
12.1. Отказ от оптимизации
12.1. Отказ от оптимизации Наиболее мощная методика оптимизации, входящая в инструментарий любого программиста, заключается в том, чтобы ничего не делать.Этот весьма выдержанный в духе Дзэн совет верен по нескольким причинам. Одной из них является экспоненциальный эффект
14.8. Отказ от многозадачности
14.8. Отказ от многозадачности Постановка задачи Требуется исключить использование в вашем приложении
23.3.3. Отказ видеокарты
23.3.3. Отказ видеокарты При отказе видеокарты звуковой сигнал BIOS (фирмы AWARD) будет таким — один длинный и два коротких. Если у вас BIOS другой фирмы, то самое время прочитать о его звуковых сигналах в руководстве к материнской плате. Полный отказ видеокарты встречается редко и
23.3.4. Отказ материнской платы и процессора
23.3.4. Отказ материнской платы и процессора Обычно отказ одного из этих компонентов влечет повреждение второго, но бывают исключения, поэтому нужно отнести компьютер в мастерскую для диагностики. Конечно, если у вас есть подобная материнская плата и такой же процессор,
Атаки типа «отказ в обслуживании» (DoS) и «распределенный отказ в обслуживании» (DDoS)
Атаки типа «отказ в обслуживании» (DoS) и «распределенный отказ в обслуживании» (DDoS) На сегодняшний день DDoS-атаки являются одними из самых опасных с точки зрения последствий. Посудите сами: крупный обслуживающий банковский сервер, который на некоторое время (пусть даже на
Отказ программы устанавливаться на компьютер
Отказ программы устанавливаться на компьютер Операционная система Windows Vista обладает очень мощными механизмами защиты, которые позволяют обезопасить ее работу от вмешательства сторонних программ. Как следствие, система может заблокировать установку приложения. В этом
Отказ от ответственности
Отказ от ответственности Эта книга не претендует на звание «единственно правильного» учебного пособия по Scrum! Она всего лишь предлагает вам пример удачного опыта, полученного на протяжении года в результате постоянной оптимизации процесса. Кстати, у вас запросто может
Дмитрий Шабанов: Отказ от экспансии?
Дмитрий Шабанов: Отказ от экспансии? Автор: Дмитрий ШабановОпубликовано 11 января 2012 годаЖизнь - это экспансия. - А.Д. СахаровВот и прошли новогодне-рождественские праздники. К счастью, в них нашлось даже время для чтения. Я вот читал и специальную литературу, и