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

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

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

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

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

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

Магда Ю.С. Использование ассемблера для оптимизации программ на С++ — БХВ-Петербург , 2004. — 496 c.
ISBN 5-94157-414-2
Скачать (прямая ссылка): ispolzovaniyaassemblera2004.djvu
Предыдущая << 1 .. 16 17 18 19 20 21 < 22 > 23 24 25 26 27 28 .. 127 >> Следующая

? арифметические (сложение, вычитание, умножение, деление, извлечение квадратного корня, нахождение минимума и максимума);
? сравнения;
? преобразования (связывают между собой целочисленные форматы ММХ и форматы с плавающей точкой ХММ);
? логические (включают операции "И", "ИЛИ",/’И-НЕ" и "Исключающее ИЛИ" над операндами в ХММ);
? перемещения данных и перераспределенйя (служат для обмена данными между блоком ХММ и памятью или целочисленными регистрами процессора, а также выполняют перестановку элементов упакованных операндов);
? управления состоянием (служат для сохранения и загрузки дополнительного регистра состояния ХММ. В эту группу входят и инструкции быстрого сохранения/восстановления состояния ММХ/FPU и SSE).
Дополнительно в SSE введены новые инструкции управления содержимым кэша: инструкции записи содержимого регистров ММХ и ХММ в память в обход кэша. Назначение этих инструкций — избежать излишнего загрязнения кэш-памяти. Кроме того, появилась возможность подгружать требуемые данные в кэш до вызова инструкций, использующих эти данные.
Приложению, рассчитывающему получить в распоряжение не только базовые ресурсы 32-разрядного процессора, приходится определять тип процес-
60
Часть I. Основы эффективного программирования на ассемблере
сора. К счастью, это делается просто, с помощью инструкции cpuid. В процессорах, поддерживающих SSE, по инструкции cpuid теперь можно получить и уникальный 64-битный идентификатор процессора.
SSE-расширение процессоров Pentium, как и ММХ, поддерживается с помощью собственных функций C++ .NET. Все определения собственных функций SSE-расширения находятся в файле xmmintrin.h. Для удобства работы со 128-битными переменными используется тип___ml28. Практические
примеры использования SSE-расширения для программирования приложений приведены в главе 10.
В этой главе мы рассмотрели различные варианты оптимизации ассемблерного кода программ применительно к особенностям функционирования процессоров Intel Pentium. Приведенные примеры программного кода позволяют наилучшим образом использовать аппаратные возможности этих процессоров.
Глава 2
Оптимизация вычислительных алгоритмов с помощью ассемблера
В этой главе будут рассмотрены аспекты программирования на ассемблере, которые делают его действительно полезным и эффективным языком для оптимизации приложений. Предполагается, что читатель знаком с системой команд языка. Материал главы раскрывает основы построения эффективных алгоритмов обработки данных на языке ассемблера.
Ассемблер чаще всего применяется для программирования математических алгоритмов, задач быстрой сортировки и поиска данных в массивах, для оптимизации циклически повторяющихся вычислений. При разработке программ на C++ очень часто решаются подобные задачи, и они занимают значительную часть времени.
В процессе анализа и построения алгоритмов используются команды ассемблера вплоть до процессоров Pentium 4. Последние модели процессоров включают команды, позволяющие выполнять быструю обработку массивов данных, а также комплексные команды, позволяющие оптимизировать сам алгоритм вычислений.
Прежде чем окунуться в программирование на ассемблере, необходимо определиться с инструментами разработки программ. Для демонстрации примеров вычислительных алгоритмов я буду использовать консольные приложения C++ .NET, а сами алгоритмы будут написаны на встроенном ассемблере C++ .NET 2003. Фрагменты программного кода на встроенном ассемблере построены таким образом, чтобы можно бь^ло анализировать вычислительные алгоритмы без изучения глубинных аспектов встроенного в C++ ассемблера (это мы сделаем в последующих главах).
Начнем с математических вычислений. Практически все приложения используют те или иные операции, связанные с математическими вычислениями, начиная от простейших (сложение и вычитание) и заканчивая решением систем уравнений. Математические действия могут использовать как обычные команды процессора, например, add, sub, mul, div, так и специальные команды математического сопроцессора.
3 Зак. 243
62
Часть I. Основы эффективного программирования на ассемблере
Арифметические команды любого микропроцессора привлекают к себе наибольшее внимание. Практически в каждой программе выполняются определенные арифметические вычисления с помощью таких команд. Хотя их немного, они выполняют большинство преобразований данных в процессоре. В реальных же условиях арифметические команды занимают лишь малую часть всех исполняемых команд, но имеют определенную специфику выполнения.
Среда Visual C++ .NET 2003 отличается многообразием и мощью своих математических функций. Однако в основе математических библиотек C++ лежит относительно простой набор команд процессора и сопроцессора. В языке ассемблера нет таких комплексных функций и библиотек, однако можно разработать свои, ничем не уступающие C++, а зачастую и превосходящие их по своим возможностям* функции.
Рассмотрим некоторые аспекты построения эффективных вычислительных алгоритмов с использованием языка ассемблера. Большие возможности для оптимизации математических вычислений кроются в правильном использовании операций с плавающей точкой. Часто программисты разрабатывают собственные функции на ассемблере, превосходящие по вычислительным возможностям и быстродействию аналогичные им библиотечные функции C++. Необходимость в написании таких функций возникает, как правило, при решении задач обработки данных в реальном масштабе времени, при написании драйверов устройств и системных служб.
Предыдущая << 1 .. 16 17 18 19 20 21 < 22 > 23 24 25 26 27 28 .. 127 >> Следующая