Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Использование ассемблера для оптимизации программ на С++ - Магда Ю.С.

Магда Ю.С. Использование ассемблера для оптимизации программ на С++ — БХВ-Петербург , 2004. — 496 c.
ISBN 5-94157-414-2
Скачать (прямая ссылка): ispolzovaniyaassemblera2004.djvu
Предыдущая << 1 .. 7 8 9 10 11 12 < 13 > 14 15 16 17 18 19 .. 127 >> Следующая

Большие резервы для оптимизации приложений на C++ .NET связаны с оптимизацией математических операций. Дело в том, что при циклических вычислениях многократно повторяющийся фрагмент программного кода может быть реализован на ассемблере, причем несколькими способами. Операции с целыми числами обычно легко переводятся на язык ассемблера, намного сложнее это сделать для чисел с плавающей точкой. Существенную роль в оптимизации математических операций играет математический сопроцессор или FPU (Floating-Point Unit, устройство для выполнения операций с плавающей точкой).
Сопроцессор добавляет дополнительные арифметические возможности в систему, но не замещает ни одну команду основного процессора. Команды add, sub, mul и div выполняются центральным процессором, а математический сопроцессор выполняет дополнительные, более эффективные команды арифметической обработки. С точки зрения программиста, система с сопроцессором выглядит как единый процессор с большим набором команд.
Особую роль в процессе оптимизации приложений играют технологии SIMD (Single Instruction — Multiple Data, одна команда — много данных), реализованные в виде целочисленного расширения ММХ (MultiMedia extensions, расширенный набор команд для мультимедийных приложений) и расширения для вычислений с плавающей точкой SSE (Streaming SIMD Extensions), позволяющие параллельно обрабатывать несколько операндов. Эти технологии появились относительно недавно, в последних поколениях процессоров. Для их успешного использования программист должен знать архитектуру процессора, систему команд и понимать, как используются те или иные функциональные части процессора (регистры, кэц], конвейер ко-
28
Часть I. Основы эффективного программирования на ассемблере
манд, арифметико-логическое устройство, блок обработки данных с плавающей точкой и т. п.).
Следует отметить, что, поскольку язык ассемблера является наиболее близким к машинному языку, то и все преимущества новых поколений процессоров немедленно отражаются и в программировании с использованием ассемблера.
Ранние модели процессоров были не очень сложны в плане архитектуры, включали в свой состав небольшое количество команд ассемблера и оперировали с весьма ограниченным набором регистров. Эти обстоятельства не позволяли серьезно оптимизировать приложения, применяя ассемблер. Поэтому ассемблер в основном использовался для доступа к аппаратным ресурсам персональных компьютеров, написания драйверов устройств. Должен заметить, что и более ранние типы процессоров Intel включают дополнительные команды, которые редко применяются разработчиками, но позволяют сделать программный код более эффективным.
Оптимизация программ на языке высокого уровня с использованием ассемблера — довольно кропотливое занятие, однако с ее помощью, по разным оценкам, можно добиться повышения производительности программ от 3—4 до 14—17 процентов. Программы на языках высокого уровня могут быть улучшены как за счет применения ассемблерного кода в отдельных участках программы, так и за счет реализации вычислительных алгоритмов полностью на ассемблере.
На практике эффективность применения языка ассемблера достигается при:
? оптимизации циклических вычислений;
? оптимизации обработки больших объемов данных за счет применения специальных команд для манипуляций с символьными данными (команды строковых примитивов). На самом деле команды строковых примитивов.позволяют обрабатывать не только символьные, но и числовые данные;
? оптимизации математических вычислений. Здесь следует сказать о том, что повышение производительности приложений достигается как с помощью обычных команд арифметических операций, так и с помощью команд математического сопроцессора (FPU). Особое место занимает технология SIMD, позволяющая в несколько раз повысить производительность приложений.
Кроме перечисленных выше пунктов большое значение имеет правильное сочетание ассемблера и языка высокого уровня, которое зависит от опыта и знаний самого разработчика, хотя даже в такой сложной сфере, как разработка оптимальных программ с помощью ассемблера, существуют определенные эмпирические правила, позволяющие добиться больших или меньших успехов.
Гпава 1. Оптимизация ассемблерного кода для процессоров Pentium
29
Однако простая замена, к примеру, цикла while в программе на языке C++ на ее ассемблерный эквивалент может и не дать ожидаемого выигрыша в производительности. То же самое касается и других ассемблерных аналогов операторов языка высокого уровня. Во многих случаях выигрыш в производительности достигается лишь при тщательном анализе того или иного фрагмента программного кода. Тот же цикл while можно реализовать несколькими способами с помощью ассемблера. При этом реализация может даже отличаться от классических вычислительных схем, описанных в литературе по языку ассемблера. Для того чтобы оптимизировать тот или иной фрагмент программы на C++ с помощью ассемблера, мало знать команды ассемблера и их синтаксис. Необходимо понимать, как работают эти команды в тех или иных комбинациях, ведь можно применить ассемблер и. не получить никакого выигрыша!
Предыдущая << 1 .. 7 8 9 10 11 12 < 13 > 14 15 16 17 18 19 .. 127 >> Следующая