Расширение традиционной архитектуры Intel
Если вы можете измерить и выразить числами то, о чем говорите, – кое-что вы об этом знаете, если же вы не можете этого измерить и выразить числами – тание ваше ограничено и неудовлетворительно: возможно, что это начало знания, но едва ли вы в мыслях продвинулись до уровня научной теории.
Лорд Кельвин
(конец XIX века)
…наука начинается с тех пор, как начинают измерять.
Д. И. Менделеев
В этой главе мы рассмотрим проблему измерения скорости работы программ. Интерес к данной теме у программистов всегда повышен и подобен интересу рыболовов к размерам выловленной рыбы. Когда программист разрабатывает алгоритм реализации некоторой задачи, то он обязательно пытается оценить скорость, с которой будет работать программа по этому алгоритму. В процессе изложения материала мы уже не раз предлагали для решения одной задачи несколько способов, но при этом оставляли открытым вопрос об оценке их эффективности.
В этом разделе попытаемся ликвидировать этот пробел, при этом попутно рассмотрим несколько общих вопросов, связанных с микропроцессорами архитектуры Intel (Intel и AMD). Основное внимание мы уделим некоторым средствам микропроцессора Intel, предназначенным для оценки эффективности функционирующих на них программ. В значительной степени рассматриваемый ниже материал также применим и к микропроцессорам AMD, так как эти микропроцессоры имеют подобные средства.
С появлением микропроцессоров пятого поколения (Pentium, Pentium MMX…) программисту следует различать два слоя микропроцессоров архитектуры Intel: базовый и модельно-зависимый.
Слой базовой архитектуры включает в себя элементы архитектуры, поддержку неизменность которых производитель (Intel) гарантирует. Это набор и структура системных регистров и регистров общего назначения, архитектура памяти и т. д.
Модельно-зависимый слой архитектуры включает в себя средства, поддержка которых зависит от конкретной модели процессора (как правило, снизу вверх). Для того чтобы программа, исполняемая процессором, могла получить сведения о возможностях этого процессора, в систему команд включена команда CPUID Данная команда позволяет программе в любой момент времени получить сведения о классе, модели и архитектурных особенностях текущего процессора. Подробное описание данной команды приведено ниже.
Физически модельно-зависимые средства представляют собой набор модель-но-зависимых регистров – MSR (Model Specific Registers). Наличие и назначение этих регистров по определению зависит от конкретной модели процессора, что, в свою очередь, не гарантирует их поддержку будущими процессорами архитектуры Intel. MSR-регистры обеспечивают управление различными аппаратно-и программно-зависимыми средствами, включая следующие:
- счетчики мониторинга производительности;
- расширения отладки;
- поддержка исключения машинной ошибки и архитектуры машинного контроля (МСА);
- регистры MTRR для поддержки расширенных средств кэширования.
Чтение и запись в MSR-регистры осуществляются командами RDMSR и WRMSR. Большинство MSR-регистров инициализируются при программной инициализации процессора, многие из них можно впоследствии установить в соответствии с конкретными потребностями программы. Приведем краткое описание команд RDMSR, WRMSR и CPUID.