Команды enhanced 3dnow ( начиная с athlon )

Практическое применение SSE расширения.

Этой статьей я как обычно попытаюсь угодить обоим категориям читателей: начинающим, дав общее понимание SIMD принципов, лежащих в основе таких расширений как MMX, SSE, SSE2, 3DNOW! и Enhanced 3DNOW!,более опытным — поделившись некоторыми на мой взгляд интересными фактами и примерами с которыми я столкнулся в процессе работы над темой. Однако основной упор будет сделан именно на SSE расширение и его практическом применении. Как всегда, вполне допустимо пропускать те абзацы, которые содержат информацию, в которой читатель достаточно хорошо ориентируется. Статья содержит большое количество материала, поэтому рекомендуется разбирать ее постепенно, разбивая на отдельные шаги.

Не стоит рассматривать статью как достаточно обширный и всеобъемлющий материал — это только толчок к дальнейшему исследованию и применению темы, развиваемой в статье.

В статье могут встречаться недочеты и ошибки, от которых никто не застрахован. Но думаю, что вместе, мы сможем решить все возникшие недоразумения и найти правильное решение проблемы.

Знания и инструментарий

Статья предполагает, что у читателя есть знания базовых принципов программирования на языке ассемблера и Си. В остальном, я полагаю, что после внимательного изучения данной статьи и примера, читатель будет в состоянии самостоятельно писать процедуры, используя SSE расширение. Тем не менее, поскольку статья представляет из себя лишь вводный экскурс, для более полного понимания проблемы, желательно изучение документации и справочников (как минимум презентаций и CBT (computer based training)) которые можно получить с сайта Intel (http://developer.intel.com).

В качестве компилятора для примера был использован MS VC 6. Тем не менее, пример нормально компилируется в VC 7 (.Net). Да, именно – Си. Самое время удивиться, а лучше продолжим чтение статьи. В случае 6 версии на VC должны быть установлены SP 4 или 5 а также соответствующий для этого сервис пака процессор пак (Processor pack). Все это может быть получено с сайта Microsot (http://www.microsoft.com). Так как в примере использованы специфичные для Microsoft директивы, другие компиляторы без корректировки исходного кода примера использовать скорее всего не удастся. Компиляция примера выполнялась с использованием одного единственного ключа /O2 — оптимизация по скорости исполнения. Кстати, именно с ключем /O2 в MS VC 6+SP 5 связана одна из ошибок компилятора, обнаруженная в процессе создания примера.

Для отладки приложения использовался встроенный в Visual Studio отладчик. Конечно же, ему далеко по функциональности до небезызвестного Soft Ice от NuMega, тем не менее, это достаточно качественная программа, кроме того, интегрированная в Visual Studio. В качестве неплохого бесплатного отладчика/дизассемблера могу порекомендовать OllyDbg (http://home.t-online.de/home/Ollydbg), который так же позволяет отлаживать приложения, использующие SSE расширение (позволяет просматривать содержимое XMM регистров и дизассемблирует инструкции SSE). На момент начала написания статьи на сайте была доступна версия 1.08b.

SIMD расширения — что это?

SIMD (single instruction multiple data) — общий принцип лежащий в основе всех перечисленных до этого расширений — одной инструкцией выполняется действие сразу над некоторой группой однотипных операндов. Тем самым главные предметы изучения расширения — его архитектура, а именно представление данных и дополнительные наборы команд.
[tr=code]На заметку:

Все информация и определения справедливы для архитектуры IA-32 и совместимых с ней процессоров — то есть, грубо говоря, для «32-битных» процессоров Intel, AMD и некоторых других о которых уже никто наверное и не помнит.

Начиная с процессоров Pentium Pro (MMX) поддерживается MMX расширение от Intel. Включает в себя 8 (MM0-MM7) 64-битных регистров (Ты не знаешь что такое регистры? Ниже мы поговорим об этом освежив твою память, однако это ещё один знак того, что тебе следует поднять уровень знаний в рассматриваемой области если ты хочешь до конца понять статью) и позволяет производить целочисленные операции над парами нескольких новых типов данных:

— восемь упакованных байт
— четыре упакованных слова
— два двойных слова
— учетверенное слово

Другими словами, одной инструкцией MMX расширения программист может например сложить между собой два двойных слова. Физически никаких новый регистров не было добавлено. MM0-MM7 это мантиссы (младшие 64 бита) стека 80 битных FPU (floating point unit — сопроцессор) регистров.
[tr=code]На заметку:

В целом маркетинговый успех MMX расширения обошел в несколько раз его практическое применение — достаточно вспомнить те бури страстей и рекламного ажиотажа задолго до появления процессоров с поддержкой MMX.

Расширение от AMD впервые появилось в процессорах K6-2. По сути, являясь подмножеством того же MMX расширения (использует те MMX регистры), основным его достоинством являлось то, что расширение позволяло выполнять одновременные операции над двумя парами float чисел (32 битные операнды). При этом, как утверждало AMD, без дополнительных затрат могли выполняться одновременно две операции такого рода за такт, что выводит 3DNOW! на уровень сравнимый по производительности с SSE расширением от Intel. Само по себе расширение было достаточно революционным, хотя и не смогло вывести эту модель на конкурентоспособный уровень с процессорами-аналогами от Intel, что связанно не с самим расширением конечно, а лишь с недостатками самого процессора. Того количества игр, под которые были выпущены патчи или в которых уже была поддержка 3DNOW! было явно недостаточно для того, чтобы полностью доказать пользователям и программистам его преимущества. Начиная с процессоров Athlon (да здравствует здоровая конкуренция!) процессоры AMD поддерживают Enhanced 3DNOW! — более производительный блок и новый набор инструкций для 3DNOW! расширения. 3DNOW! (и его Enhanced реинкарнация) поддерживается лишь процессорами фирмы AMD.

Виновник появления этой статьи, SSE расширение от Intel поддерживается как процессорами от Intel так и c некоторых пор некоторыми моделями от AMD. Аппаратно расширение включает в себя 8 (XMM0-XMM7) 128 битных регистров.
[tr=code]На заметку:

Архитектурно пайплайн SSE очень схож с гибким пайплайном шейдеров на современных GPU(видеокартах), не так ли?

SSE расширение позволяет одновременно выполнять операции над 4 парами float чисел. Начиная с процессоров Pentium 4 нам доступно расширение SSE2 — выполнение операций над двумя парами double (числа с плавающей точкой двойной точности — 64 бита) чисел. Кроме того, SSE2 расширяет MMX влияние, позволяя оперировать над целыми числами размерностью до 128-и бит.
[tr=code]На заметку:

Возвращаясь к игроделью — многие драйверы современных видеокарт уже имеют поддержку расширенных инструкций на своем вооружении. Зачем тогда нам его изучать? А как же наш с вами программный код?

Работа и устройство процессоров

3DNow и Enhanced 3DNow

Технология 3DNow разработана компанией AMD в ответ на реализацию поддержки инструкций SSE в процессорах Intel. Впервые (май 1998 года) 3DNow реализована в процессорах AMD K6, а дальнейшее развитие — Enhanced 3DNow — эта технология получила в процессорах Athlon и Duron. Аналогично SSE, технологии 3DNow и Enhanced 3DNow предназначены для ускорения обработки трехм

ерной графики, мультимедиа и других интенсивных вычислений.3DNow представляет собой набор из 21 инструкции SIMD, которые оперируют массивом данных в виде единичного элемента. В Enhanced 3DNow к существующим добавлены еще 24 новых инструкции. Технологии обработки данных 3DNow и Enhanced 3DNow хотя и подобны SSE, но несовместимы на уровне инструкций, поэтому производителям программного обеспечения необходимо отдельно реализовать поддержку этих технологий. Технология 3DNow, как и SSE, поддерживает операции SIMD с плавающей запятой, а также позволяет выполнять до четырех операций с плавающей запятой за один цикл. Инструкции 3DNow для операций с плавающей запятой могут использоваться вместе с командами MMX без заметного снижения быстродействия. Поддерживается и упреждающая выборка данных — механизм предварительного считывания данных из кэшпамяти. Все технологии ускорения обработки данных компаний Intel и AMD реализованы на уровне операционных систем Windows 9x и Windows NT/2000. Кроме этого, все программные интерфейсы DirectX (с версии 6) компании Microsoft и Open GL компании SGI оптимизированы для технологии 3DNow, а практически все современные видеодрайверы 3Dfx, ATI, Matrox и nVidia поддерживают 3DNow и Enhanced 3DNow. Несмотря на то что технология 3DNow поддерживается многими компьютерными играми и драйверами видеоадаптеров, существует ряд профессиональных графических приложений, к числу которых относится и Adobe Photoshop, не поддерживающих 3DNow. AAAAAAAAAAAAAAAAAAAAAAAAAAA

SupplementalStreamingSIMDExtension 3 (SSSE3) — это обозначение, данное Intel’ом 4-му расширению системы команд. Предыдущее имело обозначение SSE3 и Intel добавил ещё один символ ‘S’ вместо того, чтобы увеличить номер расширения, возможно потому, что они посчитали SSSE3 простым дополнением к SSE3. Часто, до того как стало использоваться официальное обозначение SSSE3, эти новые команды назывались SSE4. Также их называли кодовыми именами Tejas New Instructions (TNI) и Merom New Instructions (MNI) по названию процессоров, где впервые Intel намеревалась поддержать эти новые команды. Появившись в Intel Core Microarchitecture, SSSE3 доступно в сериях процессоров Xeon 5100 (Server и Workstation версии), а также в процессорах Intel Core 2 (Notebook и Desktop версии).

EM64T (англ. Extended Memory 64 Technology) — реализация 64-битных расширений AMD64 процессорной архитектуры IA-32 (архитектуры x86-совместимых процессоров) фирмы Intel. Основное улучшение, обеспечиваемое EM64T — 64-битная адресация оперативной памяти, что позволяет снять присущее 32-битным процессорам ограничение в 4 гигабайта адресуемой напрямую памяти

Этот метод впервые использован в микросхемах P6 (процессорах шестого поколения) и позволяет процессору параллельно обрабатывать сразу несколько команд, что приводит к уменьшению времени, необходимого для выполнения той или иной задачи. Это технологическое новшество включает в себя следующие элементы.

-Предсказание множественного перехода (ветвления). Предсказание потока выполнения программы через несколько ветвлений.

-Анализ потока команд. Назначение выполнения команд по мере готовности, независимо от их порядка в оригинальной программе.

-Упреждающее выполнение. Увеличение скорости выполнения за счет опережающего просмотра счетчика команд и выполнения тех команд, к которым, вероятно, потребуется обратиться позже.

Функция предсказания перехода, ранее применявшаяся только в универсальных процессорах старших моделей, позволяет процессору при высокоскоростном выполнении команд сохранять конвейер заполненным. Специальный модуль выборки/декодирования, включенный в процессор, использует высоко оптимизированный алгоритм предсказания перехода, позволяющий предсказывать направление и результат команд, выполняемых через несколько уровней ветвлений, обращений и возвратов. Этот модуль напоминает шахматиста, разрабатывающего несколько различных стратегий перед началом шахматной партии, предсказывая ответные действия противника на несколько ходов вперед. Благодаря предсказанию результатов выполнения команды инструкции могут выполняться практически без задержек.

Анализ потока данных

Функция анализа потока команд используется для исследования потока данных, проходящих через процессор, и выявления любых возможностей выполнения команды с изменением заданной ранее последовательности. Специальный процессорный модуль отправки/выполнения контролирует команды и позволяет выполнять их в таком порядке, который оптимизирует использование модулей множественного суперскалярного выполнения. Возможность изменять последовательность выполнения команд позволяет сохранить занятость модулей выполнения даже в случае промаха кэш-памяти или обработки каких-либо информационно-зависимых команд.

Способность процессора выполнять команды с помощью опережающего просмотра существующего счетчика команд называется упреждающим выполнением. Модуль отправки/выполнения, включенный в процессор, анализирует поток данных для выполнения всех команд, существующих в буфере (накопителе) команд, и сохранения результатов их выполнения в буферных регистрах. После этого модуль изъятия анализирует содержимое пула команд на предмет наличия завершенных команд, не зависящих от данных, получаемых при выполнении других команд, или команд, имеющих неразрешенные предсказания перехода. Результаты выполнения обнаруженных завершенных команд передаются в память модулем изъятия или соответствующей стандартной архитектурой Intel в том порядке, в котором они были получены. Затем команды удаляются из буфера.В сущности, динамическое выполнение устраняет зависимость от линейной последовательности команд. Выполнение команд с изменением их последовательности позволяет максимально загрузить модуль выполнения и уменьшить время ожидания, необходимое для получения данных из памяти. Несмотря на то что порядок предсказания и выполнения команд может быть изменен, их результаты передаются в исходном порядке, для того чтобы не прерывать и не изменять течение программы. Это позволяет процессорам P6 выполнять существующее программное обеспечение архитектуры Intel точно так же, как это делали P5 (Pentium) или процессоры более ранних версий, но на целый порядок быстрее!

Архитектура двойной независимой шины

Эта архитектура (Dual Independent Bus — DIB) впервые была реализована в процессоре шестого поколения и предназначалась для увеличения пропускной способности шины процессора и повышения производительности. При наличии двух независимых шин данных для ввода-вывода процессор получает доступ к данным с любой из них одновременно и параллельно, а не последовательно, как в системе с одной шиной. Вторая, или фоновая (backside) входная шина процессора с DIB применяется кэш-памятью второго уровня, поэтому она может работать значительно быстрее, чем в том случае, если бы ей пришлось использовать (совместно с процессором) основную шину. В архитектуре DIB предусмотрено две шины: шина кэш-памяти второго уровня и шина, соединяющая процессор и основную память, или системная шина. Процессоры Pentium Pro, Celeron, Pentium II/III, Athlon и Duron могут использовать обе шины одновременно, благодаря чему снижается критичность такого параметра, как пропускная способность шины. Благодаря архитектуре двойной шины кэш-память второго уровня более современных процессоров может работать на полной скорости в ядре процессора на независимой шине, используя при этом основную шину центрального процессора (FSB) для обработки текущих данных, поступающих на микросхему и отправляемых ею. Шины работают с разной тактовой частотой. Шина FSB, или главная шина центрального процессора, соединена с системной платой, а шина кэш-памяти второго уровня — непосредственно с ядром процессора. При увеличении рабочей частоты процессора увеличивается тактовая частота кэш-памяти второго уровня. Для реализации архитектуры DIB кэш-память второго уровня перемещена с системной платы в один корпус с процессором, что позволило приблизить быстродействие кэш-памяти второго уровня к быстродействию встроенной кэш-памяти, которое значительно превосходит быстродействие памяти, помещаемой на системную плату. Чтобы поместить кэш в корпус процессора, понадобилось модифицировать гнездо процессора. DIB также позволяет системой шине выполнять одновременно несколько транзакций (а не одну последовательность транзакций), благодаря чему ускоряется поток информации внутри системы и повышается эффективность. Все средства архитектуры DIB повышают пропускную способность почти в три раза по сравнению с процессором, имеющим архитектуру одиночной шины

ПРОЦЕССОРЫ

История AMD в процессорах

K7/Athlon: убийца

В 1999 году AMD выпустила процессор седьмого поколения K7, позже переименованный в Athlon. У чипа были устранены недостатки предыдущих моделей, а FPU, наконец, стал очень достойным — фактически, он оказался даже лучше, чем у Intel. Athlon стал самым быстрым процессором x86 и отличался многими сильными моментами, включая быструю шину FSB — EV6, которая использовалась в первых процессорах Alpha — и высокую производительность. Единственная проблема появилась со стороны не процессоров, а чипсетов: ни модели AMD, ни VIA не могли конкурировать с чипсетами Intel (с тем же знаменитым 440BX). K7 использовал Slot A (конкурировал с Intel Slot 1) и поддерживает кэш L2 с разными делителями (1/2, 2/5 или 1/3).

AMD Athlon (K7, K75)
Кодовое название Argon (K7) Pluto, Orion (K75)
Дата выпуска 1999 1999
Архитектура 32 бита 32 бита
Шина данных 64 бита 64 бита
Шина адреса 32 бита 32 бита
Макс. объём памяти 4096 Мбайт 4096 Мбайт
Кэш L1 64 кбайт + 64 кбайт 64 кбайт + 64 кбайт
Кэш L2 Slot A (1/2 CPU) Slot A (1/2, 2/5 или 1/3 CPU)
Тактовая частота 500-700 МГц 550-1000 МГц
FSB 100 МГц (DDR) 100 МГц (DDR)
FPU Встроен Встроен
SIMD MMX, Enhanced 3DNow! MMX, Enhanced 3DNow!
Техпроцесс 250 нм 180 нм
Число транзисторов 22 млн. 22 млн.
Энергопотребление 42-50 Вт 31-65 Вт
Напряжение 1,6 В 1,6-1,8 В
Площадь кристалла 184 мм² 102 мм²
Число ножек Slot A Slot A

Кстати, отметим, что именно AMD первой объявила (и продавала) 1-ГГц процессор в линейке Athlon (на два дня раньше 1-ГГц Intel Pentium III).

AMD улучшает Athlon: Thunderbird, XP и далее

AMD знала, что вышла победителем с архитектурой K7, поэтому улучшала её шаг за шагом, повышая частоту и переходя на более тонкие техпроцессы. Ядро Thunderbird использует 180-нм техпроцесс и содержит 256 кбайт кэша на чипе. Дизайн Palomino добавил поддержку SSE. У Athlon XP изменилась упаковка, а рейтинг PR успешно вернулся. Thoroughbred стал первым Athlon XP на основе 130-нм техпроцесса (с 256 кбайт кэша). Barton получил 512 кбайт кэша, но по-прежнему производился по 130-нм техпроцессу. Athlon XP и последующие модели использовали рейтинг PR вместо значений тактовых частот.

AMD Athlon
Кодовое название Thunderbird Palomino/XP Thoroughbred Barton
Дата выпуска 2000 2001 2002 2003
Архитектура 32 бита 32 бита 32 бита 32 бита
Шина данных 64 бита 64 бита 64 бита 64 бита
Шина адреса 32 бита 32 бита 32 бита 32 бита
Макс. объём памяти 4096 Мбайт 4096 Мбайт 4096 Мбайт 4096 Мбайт
Кэш L1 64 кбайт + 64 кбайт 64 кбайт + 64 кбайт 64 кбайт + 64 кбайт 64 кбайт + 64 кбайт
Кэш L2 256 кбайт (на частоте CPU) 256 кбайт (на частоте CPU) 256 кбайт (на частоте CPU) 512 кбайт (на частоте CPU)
Тактовая частота 650-1400 МГц 1000-1733 МГц 1200-2250 МГц 1400-2200 МГц
FSB 100/133 МГц (DDR) 133 МГц (DDR) 133/166 МГц (DDR) 166/200 МГц (DDR)
FPU Встроен Встроен Встроен Встроен
SIMD MMX, Enhanced 3DNow! MMX, Enhanced 3DNow!, SSE MMX, Enhanced 3DNow!, SSE MMX, Enhanced 3DNow!, SSE
Техпроцесс 180 нм 180 нм 130 нм 130 нм
Число транзисторов 37 млн. 37,5 млн. 37,2 млн. 54,3 млн.
Энергопотребление 38-72 Вт 46-72 Вт 49-68 Вт 60-76 Вт
Напряжение 1,7-1,75 В 1,75 В 1,5-1,65 В 1,65 В
Площадь кристалла 120 мм² 129,26 мм² 84,66 мм² 100,99 мм²
Число ножек Socket A Socket A Socket A Socket A

Следует отметить, что AMD также производила версии для серверов (Athlon MP) и ноутбуков (Athlon 4, Athlon XP Mobile), а также Geode NX (130 нм с кэшем 256 кбайт). AMD продавала Thorton (130 нм, 512 кбайт , 256 кбайт из которого было выключено) и планировала Trinidad, Athlon на основе 90-нм техпроцесса. Были и странности, связанные с PR: Athlon XP 2600+ работал на частотах 1900, 1917, 2000, 2083 или 2133 МГц, в зависимости от версии, например.

Duron и Sempron: Celeron от AMD

Производителям CPU, похоже, нравятся названия, заканчивающиеся на «-on». Чтобы конкурировать с Celeron и дистанцироваться от Athlon, AMD представила Duron, который позднее был заменён Sempron. Два «бюджетных» процессора были, как правило, медленнее Athlon и использовали меньший объём кэш-памяти. Исключающий (эксклюзивный) дизайн кэша AMD позволил создавать процессоры с кэшем L2 меньше, чем у L1, поскольку последний не копировался в кэше L2 (в отличие от инклюзивной архитектуры кэша у Intel). Sempron является просто переименованным Athlon XP, некоторые версии оснащены меньшим объёмом кэш-памяти (в Thorton отключено 256 или 512 кбайт).

Оптимизация BIOS. Полный справочник по всем параметрам BIOS и их настройкам (14 стр.)

Так как для завершения каждой операции ISA требуется от двух до восьми циклов, максимальная пропускная способность шины составляет от 4.77 Мб/с для карт 8-бит до 8.33 Мб/с для карт 16-бит.

Максимальная пропускная способность шины ISA 8-бит = 8.33 МГц х 1 байт (8-бит) / 2 цикла = 4.77 Мб/с.

Максимальная пропускная способность шины ISA 16-бит = 8.33 МГц х 2 байта (16-бит) / 2 цикла = 8.33 Мб/с.

Эта функция BIOS позволяет выбрать скорость таймера для шины ISA. Обычно значение для шины ISA определяется путем деления значения для шины PCI. Отсюда происходят такие значения, как CLK/2, CLK/3, CLK/4, CLK/5, и CLK/6. Если предположить, что частота шины PCI задана как 33 МГц, частота и пропускная способность шины ISA 16-бит будут такими, как показано в табл. 4.2.

Фиксированное значение 7.16MHz определяется путем деления стандартной скорости таймера (14.318 МГц) на 2.

Как видите, значение CLK/4 настраивает скорость шины ISA на 8.33 МГц (максимально допустимое значение в официальных спецификациях ISA). Но вы можете и разогнать шину ISA: выберите значение CLK/3 или CLK/2, чтобы повысить скорость до 11.11 или 16.67 МГц соответственно.

Разгонка шины ISA намного повышает ее производительность. Поэтому рекомендуем использовать максимально допустимое значение. Следует отметить, что, хотя новые карты ISA и могут работать на повышенных скоростях, это не относится к устаревшим картам.

Если ваши карты ISA не работают, выберите установку CLK /4 (или 7.16 МГц). Это позволяет удержать частоту шины ISA в пределах спецификации.

Обратите внимание на то, что расчеты в нашем примере основаны на использовании шины PCI 33 МГц. Если вы разгоняете шину PCI, учитывайте новое значение!

Например, если вы разогнали шину PCI до 37.5 МГц, частота и пропускная способность шины ISA 16-бит (при использовании настроек CLK/2, CLK/3, CLK/4, CLK/5 и CLK/6) будут такими, как показано в табл. 4.3.

При работе с шиной PCI 37.5 МГц все настройки частоты шины ISA приводят к увеличению скорости. Только значения CLK/5, CLK/6 и 7.16MHz позволяют удержать частоту шины ISA в пределах спецификации. При разгонке шины PCI правильно выберите делитель для частоты шины ISA.

Если вы хотите избежать проблем, выберите стандартную установку 7.16MHz. Это абсолютно безопасно, так как данная опция настраивает шину ISA на фиксированную скорость 7.16 МГц, которая не зависит от скорости шины PCI.

ATA100RAID IDE Controller (IDE-контроллер ATA100RAID)

Обычные опции: Enabled, Disabled.

Эта функция BIOS поставляется только с теми материнскими платами, которые оснащены дополнительным UtraDMA/100 IDE-контроллером с поддержкой RAID. Она позволяет включать или выключать данный IDE-контроллер.

Обратите внимание, что дополнительный IDE-контроллер, с которым работает данная функция, – это не то же самое, что встроенный IDE-контроллер материнской платы. Дополнительный контроллер UltraDMA/100 IDE устанавливается для поддержки UltraDMA/100 или RAID на те материнские платы, которые не предлагают подобную поддержку. Даже если встроенный IDE-контроллер материнской платы поддерживает как UltraDMA/100, так и RAID, он не управляется этой опцией. Она используется только для дополнительного IDE-контроллера.

Чтобы избежать неправильного понимания, я буду называть IDE-контроллер материнской платы встроенным IDE-контроллером, а дополнительный IDE-контроллер – внешним IDE-контроллером.

Если вы хотите подключить одно или несколько IDE-устройств к внешнему контроллеру UltraDMA/100 RAID, вы должны включить данную функцию. Выключить эту опцию можно только в одном из следующих случаев:

• если вы не подключали IDE-устройства к внешнему контроллеру UltraDMA/100;

• с целью проведения технического обслуживания.

При отключении внешнего IDE-контроллера будут освобождены два адреса IRQ, которые можно использовать для других устройств в системе. Это позволит ускорить процесс загрузки, так как BIOS внешнего IDE-контроллера больше не будет загружаться. Ваша система пропустит этапы загрузки и инициализации внешнего контроллера. Если вы не пользуетесь внешним IDE-контроллером, рекомендуем выключить эту функцию, чтобы ускорить процесс загрузки.

Athlon 4 SSED Instruction (Инструкция для Athlon 4 SSED)

Обычные опции: Enabled, Disabled.

Изначально процессоры AMD Athlon поставлялись с технологией Enhanced 3Dnow! которая представляет собой набор из 19 новых инструкций SIMD. Эти инструкции аналогичны инструкциям SSE (Streaming SIMD Extensions) компании Intel, которые впервые появились в процессоре Intel Pentium III. Тем не менее, набор SSE Intel состоит не из 19, а из 70 инструкций SIMD.

Компании AMD пришлось признать, что инструкции Intel SSE намного более популярны у разработчиков программного обеспечения. Поэтому, начиная с серии Palomino процессоров Athlon XP (и MP), компания AMD начала использовать набор инструкций Intel SSE.

Так как первые 18 инструкций набора Enhanced 3Dnow! были идентичны инструкциям Intel SSE, компании AMD понадобилось только добавить 52 инструкции, чтобы создать полную копию набора Intel SSE. Конечно, AMD переименовала новый набор инструкций в 3DNow! Professional (даже несмотря на то, что этот набор представляет собой копию набора Intel SSE).

Также AMD добавила бит состояния, который по запросу сообщает любой программе о том, что процессор Athlon XP/MP поддерживает набор инструкций SSE. Правда, бит состояния может конфликтовать с операционной системой BeOS и некоторыми видеокартами.

Больше всего от этого пострадала операционная система BeOS. Бит состояния SSE заставляет данную операционную систему «думать», что процессор Athlon XP/MP – это процессор Intel. Поэтому система отправляет на процессор Athlon XP/MP инструкции, предназначенные для процессора Intel. Это ведет к сбою системы.

Бит состояния SSE вызывал проблемы совместимости и с другими программами. Например, некоторые видеокарты (скажем, Matrox G450) не могут запустить игру Quake III в среде Windows NT 4.0, если был активирован бит состояния SSE.

Если вы столкнулись с подобной проблемой, вам поможет функция Athlon 4 SSED. Она используется в качестве переключателя для бита состояния AMD Athlon XP/MP.

При включении данная функция активирует бит состояния SSE. Программа, которая делает запрос, получит информацию о том, что процессор совместим с SSE. Благодаря этому процессор получит все преимущества программ, оптимизированных для SSE.

При выключении данная функция отключает бит состояния SSE. Программа, которая делает запрос, не получит информацию о том, что процессор совместим с SSE. Процессор сможет использовать только возможности программ, оптимизированных для Enhanced 3DNow!

По умолчанию данная функция включается, что позволяет обеспечить оптимальную производительность с программами, оптимизированными для SSE. Рекомендуем не изменять эту установку.

Отключите данную функцию только в том случае, если у вас возникли проблемы совместимости с битом состояния SSE.

Auto Detect DIMM/PCI Clk (Автоматическое определение DIMM/PCI Clk)

Обычные опции: Enabled, Disabled.

Когда таймер материнской платы дает импульс, пики сигналов создают EMI (Electromagnetic Interference – Электромагнитные помехи). В результате возникают помехи в работе других электронных устройств. Чтобы уменьшить воздействие помех, BIOS может модулировать импульсы или отключить неиспользуемые слоты AGP, PCI, а также слоты памяти.

Эта функция BIOS является аналогом опции Smart Clock функции Spread Spectrum, которая использует второй метод. При включении функции BIOS выполняет мониторинг PCI слотов и отключает сигналы ко всем свободным слотам. Сигналы к используемым слотам AGP, PCI и памяти отключаются в случае отсутствия активности.

Теоретически, EMI можно уменьшить таким образом и не подвергать систему риску. Это позволит системе снизить потребление электроэнергии, так как питание потребляется только работающими компонентами.

Выбор настройки для этой функции полностью зависит от ваших предпочтений. Рекомендуем включить данную опцию, чтобы сэкономить электроэнергию и уменьшить EMI.

Auto Turn Off PCI Clock Pin (Автоматическое отключение таймера PCI)

Обычные опции: Enabled, Disabled.

Когда таймер материнской платы дает импульс, пики сигналов создают EMI (Electromagnetic Interference – Электромагнитные помехи). В результате возникают помехи в работе других электронных устройств. Чтобы уменьшить воздействие помех, BIOS может модулировать импульсы или отключить неиспользуемые слоты AGP, PCI, а также слоты памяти.

Эта функция BIOS является заменой функции Auto Detect DIMM/PCI Clk. При включении функции BIOS выполняет мониторинг PCI слотов и отключает сигналы ко всем свободным слотам. Сигналы к используемым слотам AGP, PCI и памяти отключаются в случае отсутствия активности.

Теоретически, EMI можно уменьшить таким образом и не подвергать систему риску. Это позволит системе снизить потребление электроэнергии, так как питание потребляется только работающими компонентами.

Команды enhanced 3dnow ( начиная с athlon )

Athlon (Thunderbird) содержит 3 узла вычислений с плавающей точкой (fpu), любой из которых способен принимать на вход инструкции каждый такт работы процессора. При этом один узел предназначен исключительно для выполнения команды FSTORE! Назначение этого узла — обеспечивать обмен между регистрами и памятью в то время, как процессор выполняет другие инструкции. Такой подход, хотя и не повышает пиковую производительность, позволяет достичь более высокой средней производительности, что во многих случаях важнее. Остальные два fpu состоят из блока сложения (adder) и блока умножения (multiplier). Оба блока используют конвейеры (fully pipelined). Архитектура каждого fpu такова, что он может принимать на вход каждый такт одну инструкцию сложения и одну умножения, что дает пиковую производительность 1000MFLOPS при 500МГц. Ближайшим аналогом с точки зрения архитектуры является Pentium II, у которого также присутствуют adder и multiplier. Однако существуют два основных отличия. Во-первых, у PII только adder является полностью конвейеризованным (fully pipelined), multiplier же может принимать инструкцию на вход только каждый второй такт. Во-вторых, каждый узел fpu PII может принимать только одну инструкцию за такт, таким образом, пиковая производительность составляет 500MFLOPS при 500МГц. В результате возможности для вычислений с плавающей точкой у Athlon (Thunderbird) процессора выросли настолько, что ставят его в один ряд с RISC-процессорами, которыми оснащают мощные рабочие станции и серверы.

Расширенные возможности технологии 3DNow!™

Блока 3DNow! в AMD Athlon коснулись сильные изменения. Хотя его архитектура и осталась неизменной — два конвейера обрабатывают инструкции, работающие с 64-битными регистрами, в которых лежат пары вещественных чисел одинарной точности, в сам набор команд было добавлено 24 новинки. Новые операции должны не только позволить увеличить скорость обработки данных, но и позволить задействовать технологию 3DNow! в таких областях, как распознавание звука и видео, а также интернет :) Кроме этого, по аналогии с SSE были добавлены и инструкции для работы с данными, находящимися в кеше. Поддержка обновленного набора 3DNow! уже встроена в Windows 98 SE и в DirectX 6.2.

Таким образом, в набор 3DNow! входит теперь 45 команд, против 71 инструкции в SSE от Intel. Причем, судя по всему, использование новых команд должно дать еще больший эффект от 3DNow! В доказательство этого факта AMD распространила дополнительный DLL для известного теста 3DMark 99 MAX, задействующий новые возможности процессора.

Для того, чтобы усилить возможности процессоров AMD Athlon™ как в обработке трехмерной графики, так и в исполнении других мультимедийных задач, разработанный AMD пакет из 21 инструкции, улучшающий возможности набора команд x86 по использованию суперскалярной техники SIMD и известный как технология 3DNow!™, был значительно расширен. В 3DNow!™ было добавлено 24 новых инструкции — 19 для того, чтобы улучшить возможности процессора в целочисленных расчетах, в том числе и в технологии MMX и ускорения передачи данных для Internet-приложений использующих потоки данных, а так же 5 DSP-расширений для программных модемов, ADSL, Dolby Digital и приложений, использующих MP3.

Технология Enhanced 3DNow!™ против SSE — сравнение наборов команд

Выполнение SIMD-вычислений с плавающей точкой (впервые предложено AMD)

21 (число инструкций в первоначальном варианте технологии 3DNow!)

Сравнение функциональности: Обе технологии поддерживают 4 операции за такт и выполняют вплоть до 2.4 Gflops на частоте 600 MHz. Но инструкции 3DNow! проще для исполнения. SSE включает в себя намного больше инструкций, поскольку архитектура Intel’s требует дублирования управляющих функций MMX, для чего необходимо исполнять две инструкции, управляющие операциями с плавающей точкой — одну для SIMD-операций и другую для скалярных операций.

MMX (целочисленные вычисления),сложение и перемещение данных

19 (Новые инструкции)

Сравнимое функциональное назначение: обе технологии имеют инструкции для работы с кэшем и потоковыми данными.

DSP-расширения для коммуникаций

5 (новые инструкции)

Оригинальная методика AMD: Компания AMD приспосабливает SIMD-операции для решения задач DSP — программных модемов, программной реализации ADSL, MP3 и Dolby Digital.

Общее число инструкций

Преимущество AMD: Расширенный набор 3DNow! имеет больше функциональных возможностей, нежели SSE. Усовершенствованная технология 3DNow! плюс превосходный блок для операций с плавающей точкой процессора AMD Athlon дают наивысшую производительность в операциях с плавающей точкой среди x86-совместимых процессоров!

Архитектура кэша

Что касается кеша L1 в AMD Athlon, то его размер 128 Кбайт превосходит размер L1 кеша в Intel Pentium III аж в 4 раза, не только подкрепляя высокую производительность Athlon, но и обеспечивая его эффективную работу на высоких частотах. В частности, одна из проблем используемой Intel архитектуры Katmai, которая, похоже, уже не позволяет наращивать быстродействие простым увеличением тактовой частоты, как раз заключается в малом объеме L1 кеша, который начинает захлебываться при частотах, приближающихся к гигагерцу. AMD Athlon лишен этого недостатка.

Что же касается кеша L2, то и тут AMD оказалось на высоте. Во-первых, интегрированный в ядро tag для L2-кеша поддерживает его размеры от 512 Кбайт до 16 Мбайт. Pentium III, как известно, имеет внешнюю Tag-RAM, подерживающую только 512-килобайтный кеш второго уровня. К тому же, Athlon может использовать различные делители для скорости L2-кеша: 1:1, 1:2, 2:3 и 1:3. Такое разнообразие делителей позволяет AMD не зависеть от поставщиков SRAM определенной скорости, особенно при выпуске более быстрых моделей.

AMD Athlon (Thunderbird) располагает самым большим среди x86-совместимых процессоров объемом кэша первого уровня (128КB). Кроме того, AMD Athlon (Thunderbird) оснащен высокоскоростным 64-разрядным кэш-контроллером для управления кэш-памятью второго уровня, объем которой может составлять от стандартных 256KB до почти фантастических 8MB. Эта разработка позволяет эффективно управлять системной шиной, а так же позволяет обходить узкие места в полосе пропускания.

DDR память

Эта память является естественным развитием PC100/PC133 SDRAM памяти. Память DDR позволяет поднять производительность x86-платформы при сохранении конкурентноспособной цены. В то время, как другие типы SDRAM могут выполнять только один цикл чтения и записи за такт, технология DDR позволяет выполнить два цикла чтения и записи за то же время. DDR память доступна от основных производителей DRAM во всем мире.

Команды enhanced 3dnow ( начиная с athlon )

Окончание. Начало в N№ 30

AMD-K6-2 содержит новый конвейеризированный функциональный узел для выполнения операций над числами в формате с плавающей запятой, реализующий технологию 3DNow!. 3DNow! содержит 21 дополнительную команду, новые типы данных и регистры для поддержки высокопроизводительной обработки 3D графики и звука. Повышение скорости вычислений с плавающей запятой осуществляется за счет параллельного (одновременного) исполнения нескольких операций, а также ряде быстрых команд вещественной арифметики (деление, обратное значение квадратного корня). При этом используется техника векторных команд — SIMD (Single Instruction, Multiple Data — одиночный поток команд, множественный поток данных). Векторные команды выполняют одну операцию над несколькими парами операндов одновременно. Векторный параллелизм в достаточной степени (ускорение порядка нескольких десятков раз и более) находится в мультимедийных и научных алгоритмах. Векторные команды 3DNow! параллельно обрабатывают две пары 32-битных вещественных операндов одинарной точности, в то время как скалярные команды 3DNow! работают лишь с одной парой 32-битных операндов (из младших частей 64-битных операндов).

Технология 3DNow! использует упакованный формат данных. Два вещественных числа упаковываются в один 64-битный MMX/3DNow! регистр или 64-битную ячейку памяти. Формат вещественных чисел одинарной точности, используемый в 3DNow! технологии, совместим с форматом вещественных чисел одинарного формата IEEE-754, включающий 1 знаковый бит, 8 бит смещенной экспоненты и 23-битную мантиссу числа с одним спрятанным битом (в итоге 24 бита точности). На рисунке ниже представлен упакованный вещественный тип данных технологии 3DNow!, в который входят два вещественных числа одинарной точности (старшие 32 бита D0 и младшие 32 бита D1).

D 0 (63..32) D 1 (31..0)

Процессор AMD-K6-2 содержит восемь 64-битных MMX/3DNow! регистров. Как показано на рисунке ниже, 3DNow! и MMX обращаются к данным регистрам, используя мнемонику mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7. Эти регистры используют общую аппаратуру со стандартными x87 регистрами для чисел с плавающей запятой двойной точности. Такой подход к отображению 3DNow! регистров на стек регистров x87 позволяет сохранить совместимость аппаратуры с существующим программным обеспечением (если бы для этих регистров использовалась отдельная аппаратура, то потребовалось бы добавить код в ОС для сохранении новых MMX/3DNow! регистров при переключении задач).

mm0 D0 (63..32) D1 (31..0)
mm1 D0 (63..32) D1 (31..0)
mm2 D0 (63..32) D1 (31..0)
mm3 D0 (63..32) D1 (31..0)
mm4 D0 (63..32) D1 (31..0)
mm5 D0 (63..32) D1 (31..0)
mm6 D0 (63..32) D1 (31..0)
mm7 D0 (63..32) D1 (31..0)

Процессор AMD-K6-2 может выполнять две 3DNow! команды за такт и, следовательно, 4 операции над числами с плавающей запятой одновременно. Технология 3DNow! предлагает для выполнения векторных MMX и 3DNow! операций несколько устройств (пара умножителей, сумматоров и т.д.). Все команды 3DNow! имеют длительность исполнения 2 такта и полностью конвейеризированы.

Оптимизированный 3DNow! код представляет собой спланированные команды 3DNow! с учетом доступных вычислительных ресурсов, времени исполнения команд и существующих зависимостей по данным в программе. Для удобства проведения оптимизации при программировании операции 3DNow! объединены в две группы, формирование которых основывалось на объеме и природе доступных вычислительных ресурсов. Если две смежные 3DNow! команды находятся в разных группах, то они могут начинать исполнение одновременно без задержек. Первая группа 3DNow! команд: PFADD, PFSUB, PFSUBR, PFACC, PFCMPx, PFMIN, PFMAX, PI2FD, PF2ID, PFRCP и PFRSQRT; вторая: PFMUL, PFRCPIT1, PFRSQIT1 и PFRCPIT2.

Команды 3DNow!

Технология 3DNow! предоставляет программисту команды, которые поддерживают векторные операции над числами с плавающей запятой, целочисленными данными (PAVGUSB, PMULHRW), а также предвыборку данных (PREFETCH) и быстрое переключение между MMX и вычислениями с плавающей запятой (FEMMS). Для улучшения декодирования MPEG в расширение набора команд включена специальная команда PAVGUSB для упрощения расчета компенсации движения пикселов (pixel-motion compensation). Из-за того, что media-приложения оперируют большими наборами данных, процессор вынужден часто обращаться в оперативную память. От нежелательных простоев, вызванных задержками обращения в память (отсутствием данных в КЭШ), позволяет избавиться команда PREFETCH. Ее функционирование сводится к проверке наличия данных в КЭШе первого уровня L1. Для обеспечения быстрого переключения между кодом MMX и FPU (x87) предлагается использовать 3DNow! команду FEMMS, которая быстрее, чем EMMS. Специальное переключение между MMX и 3DNow! не требуется, и, следовательно, возможна одновременная или совместная обработка как целочисленных (MMX), так и вещественных (3DNow!) данных.

Формат команд 3DNow! :

3DNow!mnemonic mmreg1, mmreg2/mem64

Операнд-приемник должен быть MMX регистром (mm0-mm7). Операнд-источник может быть как MMX регистром (mm0-mm7), так и операндом в памяти. Используемые сокращения в мнемонике команд: P — Packed (упакованный), F — Float (вещественный), I — Integer (целочисленный).

Команды вещественной арифметики

PF2ID mmreg1, mmreg2/mem64

Векторная PF2ID команда преобразует два упакованных вещественных операнда из mmreg2/mem64 в упакованные 32-битные целые значения в регистр mmreg1, усекая результат при необходимости.

PFACC mmreg1, mmreg2/mem64

Векторная операция PFACC складывает два вещественных числа из операнда-приемника mmreg1 и записывает результат в младшие 32 бита mmreg1, а также складывает два вещественных числа операнда-источника mmreg2/mem64 и записывает результат в старшие 32 бита mmreg1.

mmreg1[31:0] = mmreg1[31:0] + mmreg1[63:32]
mmreg1[63:32] = mmreg2/mem64[31:0] + mmreg2/mem64[63:32]

PFADD mmreg1, mmreg2/mem64

Векторная операция PFADD выполняет сложение упакованных вещественных чисел операнда-источника mmreg2/mem64 и операнда-приемника mmreg1.

mmreg1[31:0] = mmreg1[31:0] + mmreg2/mem64[31:0]
mmreg1[63:32] = mmreg1[63:32] + mmreg2/mem64[63:32]

PFCMPEQ mmreg1, mmreg2/mem64

Векторная операция PFCMPEQ выполняет сравнение пар упакованных вещественных чисел операнда-источника и операнда-приемника и генерирует все единицы, если соответствующие пары равны, или все нули, если пары не равны.

IF (mmreg1[31:0] = mmreg2/mem64[31:0])
THEN mmreg1[31:0] = FFFF_FFFFh
ELSE mmreg1[31:0] = 0000_0000h
IF (mmreg1[63:32] = mmreg2/mem64[63:32]
THEN mmreg1[63:32] = FFFF_FFFFh
ELSE mmreg1[63:32] = 0000_0000h

PFCMPGE mmreg1, mmreg2/mem64

Векторная операция PFCMPGE выполняет сравнение пар упакованных вещественных чисел операнда-источника и операнда-приемника и генерирует все единицы, если вещественное число в mmreg1 больше или равно соответствующему числу в mmreg2/mem64, или все нули в противном случае.

IF (mmreg1[31:0] >= mmreg2/mem64[31:0])
THEN mmreg1[31:0] = FFFF_FFFFh
ELSE mmreg1[31:0] = 0000_0000h
IF (mmreg1[63:32] >= mmreg2/mem64[63:32]
THEN mmreg1[63:32] = FFFF_FFFFh
ELSE mmreg1[63:32] = 0000_0000h

PFCMPGT mmreg1, mmreg2/mem64

Векторная операция PFCMPGT выполняет сравнение пар упакованных вещественных чисел операнда-источника и операнда-приемника и генерирует все единицы, если вещественное число в mmreg1 больше соответствующего числа в mmreg2/mem64, или все нули в противном случае.

IF (mmreg1[31:0] > mmreg2/mem64[31:0])
THEN mmreg1[31:0] = FFFF_FFFFh
ELSE mmreg1[31:0] = 0000_0000h
IF (mmreg1[63:32] > mmreg2/mem64[63:32]
THEN mmreg1[63:32] = FFFF_FFFFh
ELSE mmreg1[63:32] = 0000_0000h

PFMAX mmreg1, mmreg2/mem64

Векторная операция PFMAX возвращает большее из двух упакованных вещественных чисел. Если один операнд меньше нуля, а второй равен нулю, то результат равен +0. Если два операнда равны нулю, будет возвращен +0.

IF (mmreg1[31:0] > mmreg2/mem64[31:0])
THEN mmreg1[31:0] = mmreg1[31:0]
ELSE mmreg1[31:0] = mmreg2/mem64[31:0]
IF (mmreg1[63:32] > mmreg2/mem64[63:32])
THEN mmreg1[63:32] = mmreg1[63:32]
ELSE mmreg1[63:32] = mmreg2/mem64[63:32]

PFMIN mmreg1, mmreg2/mem64

Векторная операция PFMIN возвращает меньшее из двух упакованных вещественных чисел. Если один операнд равен нулю, а второй — положительное число, то результатом будет +0. Если оба операнда равны нулю, то результат будет +0.

IF (mmreg1[31:0] =

PFCMPGT Упакованное вещественное сравнение. > PFCMPEQ Упакованное вещественное сравнение. = PFMIN Упакованный вещественный минимум PFMAX Упакованный вещественный максимум PI2FD Преобразование 32-битных целых в вещественные числа PF2ID Преобразование вещественных чисел в 32-битные целые числа PFRCP Приближенное обратное значение PFRSQRT Приближенное обратное значение квадратного корня PFMUL Упакованное вещественное умножение PFRCPIT1 Первый шаг нахождения обратного значения PFRSQIT1 Первый шаг нахождения обратного значения квадратного корня PFRCPIT2 Второй шаг нахождения обратного значения или обратного значения квадратного корня PMULHRW Упакованное умножение целочисленных слов с округлением FEMMS Быстрая смена MMX состояния и FPU x87 PREFETCH Предвыборка как минимум 32 байт в КЭШ данных L1

К сожалению, команда MADD (умножение с последующим сложением вещественных чисел), активно использующаяся при геометрических вычислениях в 3D конвейере, и команда MAC (умножение с накопление), присутствующая во многих DSP, не вошли в расширение команд процессора AMD-K6-2. Появление подобных инструкций в последующих моделях МП от AMD могло бы существенно повысить скорость вычислений, задействованных в 3D-визуализации.

Вычисление обратной величиныи квадратного корня

3DNow! команды могут использоваться для быстрого вычисления с высокой точностью обратного значения вещественного числа. Рассмотрим отношение q=a/b. При помощи таблицы ROM, расположенной на кристалле, осуществляется приблизительная оценка значения обратной величины 1/b с точностью 14-15 знаков мантиссы (команда PFRCP). Используя полученное приближенное значение, 24 бита точности можно получить в первой же итерации алгоритма Ньютона-Рафсона.

Рекуррентное соотношение данного алгоритма следующее:

Используя в качестве X 0 приближенное значение с точностью 14 бит, на первой же итерации алгоритма мы получаем требуемую точность в 24 бита. Для вычисления отношения следует воспользоваться следующим кодом:

(точность 14 бит)

MOVD MM0, [mem] ; 0 | w
PFRCP MM0, MM0 ; 1/w | 1/w (approx.)
MOVQ MM2, [mem] ; y | x
PFMUL MM2, MM0 ; y/w | x/w

(точность 24 бита)

MOVD MM0, [mem] ; 0 | w
PFRCP MM1, MM0 ; 1/w | 1/w (approx.)
PFRPIT1 MM0, MM1 ; 1/w | 1/w (intermed.)
MOVQ MM2, [mem] ; y | x
PFRCPIT2 MM0, MM1 ; 1/w | 1/w (full prec.)
PFMUL MM2, MM0 ; y/w | x/w

Вычисление квадратного корня вещественного числа также может быть существенно ускорено при помощи команд 3DNow!. Рекуррентная формула алгоритма Ньютона-Рафсона в данном случае будет следующей:

X i+1=1/2X i(3-bX 2 i)

Для уменьшения числа итераций X0 выбирается из таблицы ROM командой PFRSQRT (точность 15 бит). Для достижения точности в 24 бита при вычислении квадратного корня следует воспользоваться следующим кодом:

(точность 15 бит)

MOVD MM0, [mem] ; 0 | a
PFRSQRT MM1, MM0 ; 1/(sqrt a) | 1/(sqrt a) (approx.)
PFMUL MM0, MM1 ; (sqrt a) | (sqrt a)

(точность 24 бита)

MOVD MM0, [mem] ; 0 | a
PFRSQRT MM1, MM0 ; 1/(sqrt a) | 1/(sqrt a) (approx.)
MOVQ MM2, MM1 ; 1/(sqrt a) | 1/(sqrt a) (approx.)
PFMUL MM1, MM1 ; (sqrt a) | (sqrt a) step 1
PFRSQIT1 MM1, MM0 ; (sqrt) (intermed.) step 2
PFRCPIT2 MM1, MM2 ; (sqrt) (full prec.) step 3
PFMUL MM0, MM1 ; (sqrt a) | (sqrt a)

Архитектура AMD Кб

Процессор Кб начал жизнь как Nx686, будучи переименованным после приобретения NextGen фирмой AMD весной 1996 г. Серия MMX-совместимых процессоров Кб была запущена в середине 1997 г., за несколько недель до Cyrix 6х86МХ, и сразу была одобрена пользователями.

Изготовленный по 5-слойной технологии 0,35 мкм, Кб был почти на 20 % меньше, чем Pentium Pro, и при этом содержал на 3,3 млн транзисторов больше (8,8 против 5,5 млн). Большинство этих дополнительных транзисторов находилось в кэше первого уровня на 64 Кбайт (32 Кбайт кэш команд и 32 Кбайт кэш данных). Это равносильно четырем Pentium Pro или двум Pentium MMX и Pentium II.

ЦП Кб поддерживал технологию MMX Intel, включая 57 новых х86 команд, разработанных для развития мультимедийного программного обеспечения. Как и Pentium Pro, Кб был многим обязан классическим технологиям RISC. Используя суперскалярную микроархитектуру AMD RISC86, чип декодировал каждую х86-инструкцию в ряд более простых команд, которые могли быть обработаны, используя типичные принципы RISC — такие, как выполнение команд вне естественного порядка, переименование регистров, предсказание переходов, спекулятивное исполнение, опережающая выборка данных.

ЦП Кб начинал с версий 166, 200 и 233 МГц. Уровень его производительности был очень схож с Pentium Pro соответствующих частот с его максимальным кэшем второго уровня на 512 Кбайт. Общая черта с чипом Cyrix MX — работа с плавающей запятой — была областью относительной слабости (но в несколько меньшей степени) по сравнению с Pentium Pro или Pentium II.

AMD K6-II. Процессоры AMD K6-II с 9,3 млн транзисторов производились по 0,25-микронной технологии AMD. Процессор был упакован в 100 МГц 5ирег7-совместимую, 321-контактную керамическую плату (ceramic pin grid array package — CPGA).

K6-II включает инновационную эффективную микроархитектуру RISC86, большой (64 Кбайт) кэш первого уровня (двухпортовый кэш данных на 32 Кбайт, кэш команд на 32 Кбайт с дополнительным предрасшифровывающим кэшем на 20 Кбайт), в также улучшенный модуль работы с плавающей запятой. Эффективная производительность при его запуске в середине 1998 г. была оценена в 300 МГц, к началу 1999 г. самым быстрым из доступных процессоров была версия 450 МГц.

Трехмерные возможности Кб-II представляли другое важное достижение. Они были воплощены в AMD технологии 3DNow!, как новый набор из 21 команды, который дополнял стандартные команды ММХ, уже включенные в архитектуру Кб, что ускоряло обработку трехмерных приложений.

AMD K6-III. В феврале 1999 г. AMD объявила о начале выпуска процессора K6-III на 400 МГц, под кодовым названием «Sharptooth» и опробовала версию на 450 МГц. Ключевой особенностью этого нового процессора была инновационная разработка — тр е хур о в н е в ы й кэш (рис. 3.21).

Традиционно процессоры ПК использовали два уровня кэша:

  • • кэш первого уровня (L1), который обычно помещался в кристалле (on-die);
  • • кэш второго уровня (L2), который мог располагаться либо вне ЦП, на материнской плате или слоте, либо непосредственно на чипе ЦП (on-chip).

Общее эмпирическое правило при проектировании подсистемы кэша — чем больше и быстрее кэш, тем выше производительность (ядро центрального процессора может быстрее получить доступ к инструкциям и данным).

Признавая выгоды большого и быстрого кэша в удовлетворении потребностей приложений, все более требовательных к производительности ПК, «трехуровневый кэш» компании AMD вводил архитектурные новшества кэша, разработанные для увеличения производительности ПК на основе платформы Super7:

Рис. 3.21. Процессор Кб

цессоров х86 7-го поколения, в котором присутствуют конструктивные решения, до сих пор не применявшиеся в процессорах архитектуры х86 и сулящие выигрыш в быстродействии даже при одинаковых тактовых частотах (рис. 3.20, в, рис. 3.22):

  • • многократные декодеры. Если Pentium II (Katmai) разбивает CISC х86-команды на более мелкие и быстрые RISC-коман-ды, которые затем можно параллельно исполнять, то К7 оперирует блоками х86-инструкций, которые AMD называет «макрооперации» (МакОП, mOPs, macOPs). Некоторые такие блоки могут содержать одну х86-инструкцию, а большинство содержит две. Например, «прочитать данные в регистр и инвертировать их». Конвейер декодирования инструкций может обрабатывать до 3 МакОП за цикл, после чего они идут в модуль контроля инструкций (ICU). Всего в обороте одновременно могут находиться до 72 х86-команд. С одной стороны, такие блоки, несомненно, больше небольших RISC-команд, с другой стороны, за счет такого подхода ядро может непосредственно работать с х86-инструкциями вместо того, чтобы эмулировать их через RISC-команды;
  • • блок контроля команд. Как только МакОП расшифрована, за цикл до трех МакОП посылаются блоку управления ин-

Рис. 3.22. Архитектура AMD К7 (Athlon)

струкциями (Instruction Control — Unit ICU). Это буфер, который управляет выполнением каждой МакОП в целом, осуществляет переименование регистра для операндов, управляет любыми условиями исключения и действиями команды, посылает МакОП планировщику исполнения. ICU рассчитан на 72 инструкции против 20 у Pentium III, увеличивая этот буфер, удалось добиться того, чтобы дешифратор команд не простаивал из-за его переполнения;

  • • благодаря наличию трех конвейерных блоков исполнения целочисленных команд (АЛУО—АЛУ2) К7 может выполнять три целочисленные инструкции параллельно;
  • • новая архитектура узла вычислений с плавающей точкой (FPU). К7 содержит три блока вычислений с плавающей точкой, из которых любой способен принимать на вход инструкции каждый такт работы процессора. При этом один блок служит исключительно для выполнения команды FSTORE (запись в память числа с ПЗ) и назначение этого блока — обеспечивать обмен между регистрами и памятью в то время как процессор выполняет другие инструкции. Остальные два — блок сложения (adder) и блок умножения (multiplier). Оба блока полностью конвейеризованы (fully pipelined);
  • • 200-мегагерцовая системная шина;
  • • кэш L1 увеличился в 2 раза — до 128 Кбайт;
  • • модернизируемый кэш L2 размещен по примеру Pentium II в картридже, а не интегрирован в кристалл, как для К6-3. К7 может включать кэш L2 размером от 512 Кбайт в дешевых моделях до 8 Мбайт в серверах;
  • • расширенный набор команд 3DNow! — модернизирован добавлением 24 новых команд к исходным 21 инструкциям 3DNow! (19 команд, чтобы улучшить целочисленные математические вычисления ММХ и передачу данных в Internet-приложениях, и 5 команд DSP-расширения для обычных модемов, модемов ADSL, систем Dolby Digital и MP3).

AMD Athlon. Выпуск процессора Athlon летом 1999 г. был наиболее удачным ходом AMD. Это позволило им гордиться тем, что они произвели первый процессор седьмого поколения (у него было достаточно много радикальных архитектурных отличий от Pentium I I/I II и Кб-III, чтобы заслужить название процессора следующего поколения), и это означало также, что они вырвали технологическое лидерство у Intel.

Древнегреческое слово Athlon означает «трофей» или «игры». Athlon — процессор, с помощью которого AMD надеялась увеличить реальное конкурентоспособное присутствие в корпоративном секторе, помимо ее традиционного преимущества на потребительском рынке и рынке трехмерных игр. Ядро размещается на кристалле в 102 мм 2 и содержит приблизительно 22 млн транзисторов.

Atlon использует разъем Slot А компании AMD, который является механически совместимым с системными платами с разъемом Slot 1, но использует другой электрический интерфейс — подразумевая, что центральные процессоры Athlon не будут работать с обычной Slot 1 системной платой. Slot А разработан, чтобы электрически соединяться с системной шиной на 200 МГц, основанной на шинном протоколе Alpha EV6, предоставляя, таким образом, существенное преимущество в производительности перед инфраструктурой Slot 1. Так же как обеспечение ее собственного оптимизированного чипсет-решения (чипсет AMD-8000, см. рис. 3.55), компания работает над тем, чтобы вынуждать сторонних поставщиков чипов способствовать поставке ее собственных Athlon-оптимизированных решений.

Athlon первоначально выпускался в диапазонах частоты 500, 550 и 600 МГц и немного позднее — 650 МГц (все изготовлены по технологии 0,25 мкм). К концу 1999 г. AMD еще более повысил частоту — его ядро К75 (750 МГц) является первым процессором, построенным с использованием алюминиевой 6-слойной технологии 0,18 мкм компании AMD.

Утверждение о том, что это был самый быстрый х86-совмес-тимый ЦП тысячелетия, спорно, поскольку Intel быстро ответила объявлением Pentium III (800 МГц). Однако AMD вскоре вернула лидерство 2000 г. выпуском версий на 800 и 850 МГц и даже преуспела в опережении Intel в преодолении барьера 1 ГГц буквально на несколько недель.

Thunderbird. В середине 2000 г. была выпущена улучшенная версия Athlon с кодовым названием «Thunderbird».

Технология 0,18 мкм, кэш-память 2-го уровня (L2) размером в 256 Кбайт расположена на плате процессора и работает на полной частоте процессора (первые процессоры Athlon имели кэш L2, работавшую на меньших частотах, например при частоте в 1 ГГЦ память L2 работала на 330 МГц).

Интерфейсы — 462-контактный Socket А и Slot А. Частоты от 0,75 до 1 ГГц. Размещение 256 кбайт памяти на кристалле привело к увеличению его размера до 120 мм 2 (102 мм 2 для ядра). Однако, он меньше исходного (0,25-micron) К7 Athlon, который занимает 184 мм 2 . Добавление 256 Кбайт к Ь2-кэшу на кристалле весьма увеличивает число транзисторов. ЦП Thunderbird включает 37 млн транзисторов, т. е. 15 млн добавились для размещения кэша L2.

Осенью 2000 г. был выпущен чипсет AMD760 (см. далее), обеспечивающий поддержку для памяти DDR SDRAM PC 1600 (200 МГц FSB) и РС2100 (266 МГц FSB). Другие особенности — AGP 4-х, 4 порта USB, адресация памяти 8 Гбайт на 4 DIMM и поддержка АТА-100. С этого момента процессоры Athlon выпускались только для разъемов Socket А. Последние из процессоров Athlon/Thunderbird были выпущены летом 2001 г., достигнув частоты 1,4 ГГц.

Duron. В середине 2000 г. был выпущен процессор Duron, предназначенный для дома и офиса (вариант Athlon, ядро — Spitfire). Название происходит от латинского «durare» — «вечный», «длительный». Кэш-память L1 (128 Кбайт, по 64 Кбайта на код и на данные) и L2 (64 Кбайт) размещается на плате. Первичная системная шина работает на частоте 200 МГц. Поддерживается улучшенная технология 3DNow! Технология 0,18 мкм, частоты 600, 650, 1000, 1200 МГц. Интерфейс — 462-контактный разъем Socket А.

Содержит 25 млн транзисторов и имеет площадь 100 мм 2 , использует высокопроизводительную 100 МГц DDR (Double Data Rate, фактически данные передаются на частоте 200 МГц) системную шину EV6, все подсистемы работают на полной частоте ядра, напряжение питания —1,5 В.

Palomino (серия Athlon ХР, «ХР» — «Extra Performance», сверхпроизводительность). Процессор выполнен по технологии 0,18 мкм с использованием медных проводников на плате (вместо алюминия), содержит 37,5 млн транзисторов на кристалле в 128 мм 2 (рис. 3.23). Достигнуто понижение на20 % энергопотребления сравнительно с Thunderbird. Введен ряд новшеств, в совокупности именуемых AMD как «QuantiSpeed Architecture»:

• введение дополнительного буфера — буфера быстрого преобразования адреса (БПА, TLB — Transition Lookaside Buffer). Это дополнительная кэш-память, расположенная между L1 и L2. В частности, TLB содержит данные, которые используются для перевода виртуальных адресов в физические и наоборот. Вероятность того, что процес-

(Само)идентификация процессоров. Часть вторая. Волосатый CPUID

В первой части я рассказал о необходимости идентификации расширений, присутствующих на конкретном процессоре. Это нужно для того, чтобы исполняющийся код (операционная система, компилятор или пользовательское приложение) смог надёжно определить, какие возможности аппаратуры он может задействовать. Также в предыдущей статье я сравнил несколько популярных архитектур центральных процессоров общего назначения. Возможности по идентификации между ними сильно разнятся: некоторые предоставляют полную информацию о расширениях ISA, тогда как другие ограничиваются парой чисел для различения вендора и ревизии.
В этой части я расскажу об одной инструкции архитектуры Intel IA-32 — CPUID, введённой специально для перечисления декларируемых процессором расширений. Немного о том, что было до её появления, что она умеет сообщать, какие неожиданности могут поджидать и какой софт позволяет интерпретировать её вывод.

Источник изображения: [1]

История

Как я уже утверждал в первой части, присутствует следующая тенденция: чем более «встраиваемая» природа у процессора, тем меньше возможностей для идентификации заложено в его архитектуру. Создатели встраиваемых систем почему-то не волнуются о переносимости двоичного кода.

Не являлся исключением и Intel 8086 — микропроцессор 1970-х годов, выросший из «калькуляторной» серии 8008, 8080, 8085. Изначально в него не было заложено никаких средств идентификации.
Начиная с 808386 сведения о модели, степпинге и семействе стали сообщаться в регистре EDX сразу после перезагрузки (получения сигнала RESET). Инструкция CPUID, кодируемая байтами 0x0f 0xa2, была введена в процессорах 80486. Наличие CPUID можно было распознать по возможности записи в бит 21 регистра флагов. Для поддержки работы на более старых ЦПУ приходилось идти на очень изощрённые методы для того, чтобы различать процессоры серий от 8086 до 80386.

CPU >В статье [2] от 1996 года Роберт Коллинс предложил алгоритм для различения всех существовавших на тот момент продуктов IA-32 от Intel. Его не устраивал официальный метод идентификации от Intel, основанный только на различии в поведении инструкции PUSH SP (об этом чуть ниже), так как он не был универсальным. В своих работах Роберт предлагал задействовать следующие дополнительные трюки.

  • Исполнять инструкции, не присутствующие на всех процессорах, перехватывая исключение #UD. Зная, какие инструкции не сгенерировали исключение, можно определить семейство процессора. Однако, для 8086/8088 такой подход не сработал бы, так как в них не было определено поведение для неподдерживаемых команд.
  • Инструкция PUSH SP работает по-разному на 8086 и 80286. На первом ЦПУ на стек попадает значение регистра SP до изменения его значения. На 80286 эта ошибка была исправлена:
    «The iAPX 286 will push a different value on the stack for PUSH SP than the iAPX 86/88.»
  • 80186 также кладёт неправильное значение SP на стек, но при этом поддерживает CPUID.
  • Запись слова (16 бит) в сегмент по смещению 0xffff (т.е. начиная с последнего адресуемого байта) на 8086 процессоре приведёт к тому, что второй байт этого слова попадёт в память по смещению 0, тогда как на 80186 этот байт пойдёт за границу сегмента по смещению 0x10000.
  • Некоторые клоны Intel Pentium поддерживали CPUID, но не сообщали об этом в помощью бита 21 регистра флагов, противореча документации, или же позволяли динамически включать поддержку этой инструкции после загрузки.
  • Различение моделей процессоров с одной и той же «цифрой» (например, между 80386 DX и 808386 SX, CX, EX, SL или Intel Pentium P5, P54C, OverDrive) также требовало аккуратного учёта различий в поддерживаемых расширениях.
  • 80386 DX и SX можно различить по разнице в количестве модифицируемых бит регистра CR0.
  • Некоторая информация об идентификации могла быть получена с помощью документированной серии операций на портах ввода-вывода (инструкции IN/OUT).
  • Различия между моделями 80486 могли быть получены с помощью проверки наличия математического сопроцессора 80487.

Для получения информации о степпинге на 80386 необходимо прочитать значение EDX сразу после RESET’а. Но в этот момент начинает работать BIOS, который наверняка перезапишет этот регистр задолго до того, как управление будет передано пользовательскому коду! Однако и тут Роберт придумывает и описывает хитрую схему с манипуляцией печально известной линией A20 для того, чтобы обмануть процесс перезагрузки и получить управление.

Перечисленные в оригинальной статье техники были опробованы преимущественно на ЦПУ от Intel. В статье автор признаёт, что они не позволяют надёжно классифицировать клоны x86 других производителей.

Интерфейс

Для системного программиста работа по идентификации некоторого расширения обычно заключается в установке входных значений в регистрах EAX (лист, англ. leaf) и ECX (подлист, англ. subleaf), исполнению CPUID и прочтению результата в четырёх регистрах: EAX, EBX, ECX, EDX. Отдельные битовые поля выходных регистров будут содержать информацию о значениях связанных с ними архитектурных параметров конкретного ядра процессора.

Все валидные сочетания входных листов-подлистов и четвёрок регистров на выходе формируют таблицу CPUID. Для современных процессоров она содержит около двух десятков строк по четыре 32-битных столбца.
Я не буду расписывать детально все официально описанные поля этой таблицы. Интересующиеся всегда могут найти их в Intel SDM [1] (рекомендую запастись терпением — около 40 страниц текста только про CPU >

Регионы листов

Неподдерживаемые значения входных EAX и ECX не приводят к возникновению исключений, а вместо этого возвращают нули во всех четырёх регистрах, либо «мусор» (значения другого листа согласно спецификации). Допустимые же сочетания листов и подлистов образуют три непрерывных региона.

  • Обычный регион — все листы с номерами, начиная с нулевого и до максимального значения, равного CPUID.0.EAX[31:0]. Номер максимального листа постоянно растёт и уже давно перевалил за десятку.
  • Расширенный регион — все листы, начиная с 0x80000000 и до максимального значения, равного CPUID.0x80000000.EAX[31:0]. Довольно долгое время это максимальное значение остаётся равным 0x80000008. Я не нашёл документальных доказательств, но у меня есть чувство, что само появление диапазона расширенных листов связанно с введением компанией AMD 64-битного расширения архитектуры IA-32.
  • Диапазон листов 0x40000000-0x4fffffff считается зарезервированным; обещается, что возвращаемые для него CPUID значения всегда будут равны нулю. Однако это не мешает некоторым использовать его для своих нужд. Например, виртуальные машины KVM возвращают в листе 0x40000000 четвёрку чисел [0, 0x4b4d564b, 0x564b4d56, 0x4d].
Brand String

Конечно же, ни один вендор не упустит возможности увековечить своё имя в идентификационных данных своего продукта. Причём желательно сделать это не просто в виде числа, а впечатать ASCII-строку (хорошо хоть, что не Unicode).
В IA-32 CPUID текст можно найти минимум в двух группах листов. CPUID.0.EBX, ECX, EDX содержат 12 байт ASCII-строки, специфичной для каждого вендора. Для Intel это, конечно же, «GenuineIntel». А три листа CPUID.0x80000002–0x80000004 предоставляют аж 48 байт для кодирования в ASCII так называемой Brand String. Именно её видно при распечатке cat /proc/cpuinfo в Linux. И, хотя формат её более-менее стандартизован: «вендор марка серия CPU @ частота», я настоятельно не рекомендую по её содержимому принимать решения в программном коде. Слишком значительно её содержимое может варьироваться: частота может быть указана в МГц или в ГГц (а в реальности быть совсем иной из-за динамической подстройки), пробелы могут менять положение, а симулятор или виртуальная машина могут подставить туда вообще что угодно. Вся информация из brand string может быть найдена программно более надёжными способами.

Информация о кэшах, такая как их тип, количество, ёмкость, геометрия, разделяемость между ядрами полезна для тюнинга высокопроизводительного математического софта, например, библиотек BLAS (basic linear algebra system).
Изначально конфигурацию кэшей описывал лист 2. Спроектировали его не очень дальновидно. Формат кодирования информации в нём был выбран не самый гибкий, он не смог в будущем поддержать постоянные изменения в объёме и конфигурации нескольких уровней кэшей. В настоящее время использование информации из листа 2 не рекомендуется, там могут стоять 0xFF-ки.
Судя по тому, что лист 0x80000006 входит в расширенный диапазон (хотя я не уверен, документальных доказательств пока что не нашёл), он был добавлен не Intel. С помощью него была сделана попытка информацию листа 2 дополнить данными о строении кэшей, которые потребовались разработчикам софта. При этом опять же не было намерения предоставить пространство для роста.
Лист 4 — последнее и пока что наиболее гибкое представление данных о кэшах. Цена этому — добавление концепции подлистов, кодируемых в ECX. Каждый подлист описывает один кэш: данных, кода или совмещённый, определяет его уровень, ёмкость и т.д. Хватит ли четвёртого листа надолго — поживём, увидим.

Топология

Под «топологией» здесь подразумевается, конечно, не раздел математики, а информация о взаимном расположении отдельных ядер и гипер-потоков (если поддерживается Intel HyperThreading) в составе текущего процессора. Для современных серверных процессоров Intel выделяются следующие уровни иерархии.

  • SMT — уровень гипер-потока, сущности, содержащей индивидуальное архитектурное состояние (регистры), но потенциально разделяющей исполнительные устройства с другими потоками (в составе одного ядра).
  • Ядро (core) — сущность, содержащая индивидуальный набор вычислительных устройств (сумматоров, умножителей и т.д.). Одно ядро может иметь в себе один, два (у ЦПУ с HyperThreading) или четыре (у Xeon Phi) гипер-потока.
  • Пакет (пэкадж, package) — собственно железка целиком, покупаемая в магазине и вставляемая в разъём (сокет) на матплате. Имеет на себе как минимум одно ядро. В многопроцессорных серверных системах может быть несколько пэкаджей.

Понятие «логический процессор» соответствует самому нижнему из присутствующих в системе уровней. Именно их видит операционная система. От того, являются ли два логических процессора родственниками (т.е. входят в состав одного ядра или пакета), зависит стоимость миграции процессов между ними, задержки при передаче данных, эффекты кэшей, конфигурация NUMA-памяти и т.п. Именно поэтому данные о топологии содержатся в CPUID листе 0xB и его подлистах.
Кроме того, для задач адресации для доставки прерываний от периферийных устройств и других процессоров, каждый логический процессор имеет т.н. APIC ID — уникальное в составе системы число. Топология влияет на то, по какому закону выдаются эти числа множеству активных ядер. Они не всегда последовательны; например, в системе с выключенным HyperThreading все APIC ID будут чётными.
Классический APIC ID хранится в поле CPUID.1.EBX[31:24]. Это всего 8 бит, что ограничивает число логических процессоров 256, что, конечно, недостаточно в современных реалиях. Поэтому существует его расширение — X2APIC ID, хранимое в CPUID.0xB.EDX[31:0]. Думаю, что этих 32 бит хватит на более длительный период.
«Координаты» каждого логического процессора в топологии его пэкажда уникальны. По этой причине неплохо бы озаботиться обеспечением affinity для потока, читающего несколько листов CPUID подряд, иначе он рискует получить значения с разных ядер.

Изменяемые поля

Если проблем с топологией кажется мало, то спешу сообщить, что само содержимое таблицы CPUID может меняться динамически во время работы системы. Не все поля, конечно, можно изменить; и всё же из настроек BIOS можно напрямую влиять на то, увидит ли ОС некоторые возможности используемого ЦПУ. Приведу лишь некоторые из них.

  • Бит 18 регистра CR4 влияет на CPUID.1:ECX.OSXSAVE[27], обозначающий поддержку инструкции XSAVE.
  • Поля регистра IA32_MISC_ENABLE влияют сразу на несколько полей CPUID: бит 3 — на поля TM1 и TM2, бит 16 — на поле EIST, бит 34 — на поле XD (execution disable) и т.д.
  • Включение бита 22 регистра IA32_MISC_ENABLE вообще «отрезает» все листы таблиц CPUID старше третьего (видимо, это было сделано для совместимости с Windows NT4, не зря этот бит так и называется — NT4).
Разное

В этой секции я собрал прочие интересные моменты, связанные с историей и работой команды CPUID.

Processor Serial Number

Во времена Pentium III каждый процессор получил уникальный серийный номер, содержавшийся в CPUID.3.ECX и CPUID.3.EDX [7]. Легко представить, насколько такая фича была бы удобна для нужд защиты ПО от копирования. Однако в 1999 году Европейское сообщество запротестовало, разумно опасаясь, что подобная функциональность повредит приватности пользователей таких систем. Уже в Intel Pentium IV серийный номер был убран, сейчас лист 3 возвращает нули.

Вендоры и CPUID

Очень интересная таблица [5] повествует о том, что хранят (или в прошлом хранили) в разных листах CPUID разные вендоры. Например, описывается некий mystery level 0x8fffffff, в котором процессоры AMD K8 возвращали строку IT’S HAMMER TIME.

Agner Fog о войнах ISA

История появления расширений набора инструкций IA-32 в условиях конкурентной борьбы нескольких компаний [4]. Добавление новых инструкций всегда влияло на CPUID, и не всегда все могли договориться о том, как это сделать правильно.

Они испортили CPUID! IA32_BIOS_SIGN_ID

Инструкция CPUID всегда нравилась мне лаконичностью своего интерфейса и отсутствием неожиданностей в работе: один регистр на входе и четыре на выходе. В её работе нет генерации исключений, нет обращений к памяти, нет чтения/модификации регистра флагов, на неё не влияют префиксы, она работает во всех режимах процессора. По сравнению с зоопарком CISC-команд IA-32 это был почти идеал.
… пока не оказалось, что иногда на вход необходимо подать два регистра для кодирования листа и подлиста. Окей, не так всё хорошо. Ну хотя бы выходные регистры заранее известны и всегда изменяются…
И тут оказалось, что иногда CPUID изменяет ещё один регистр — а именно IA32_BIOS_SIGN_ID, — и сохраняет в нём сигнатуру текущей программы микрокода процессора. Происходит это, если до этого было произведено обновление прошивки процессора. По каким-то причинам информация об этой процедуре была раскидана по мануалу [1] на тысячу страниц, и потому она ускользала от меня очень долго.

3DNow!

3DNow! — расширение MMX, предназначенное для AMD-процессоров. Введено в использование, начиная с AMD K6 3D. Созданием данного расширения занимались инженеры компании AMD. Цель разработки 3DNow! — получение технического превосходства над процессорами Intel по части обработки мультимедийных данных.

Расширение 3DNow! добавило 21 новую команду в работу процессора. Также, данной технологией предусмотрена возможность оперировать 32-битными вещественными типами в стандартных MMX-регистрах. Кроме того, были введены новые инструкции, оптимизирующие переключение в режим MMX/3DNow!, а также контролирующие взаимодействие с кэшем процессора.

Так, технология 3DNow! существенно дополнила возможности технологии MMX, при это минуя необходимость введения новых режимов работы процессора и регистров.

Процессора AMD, произведенные после августа 2010 года, обладают двух-функциональной поддержкой данной технологии.

Проверка поддержки

Перед тем как начать пользоваться расширением 3DNow!, необходимо убедиться в возможности поддержки данной технологии установленным центральным процессором. Для этого применяется инструкция CPUID.

Так выглядит общий порядок действий при проверке:

  1. Необходимо удостовериться, что процессор поддерживает инструкцию CPU > или =);
  2. PFCMPGT — сравнение вещественных чисел (>);
  3. PFCMPEQ — сравнение вещественных чисел (=);
  4. PFACC — накопление суммы вещественных чисел;
  5. PFADD — сложение вещественных чисел;
  6. PFSUB — вычитание вещественных чисел;
  7. PFSUBR — обратное вычитание вещественных чисел;
  8. PFMIN — нахождение минимума вещественных чисел;
  9. PFMAX — нахождение максимума вещественных чисел;
  10. PFMUL — умножение вещественных чисел;
  11. PFRCP — установление приближенного значения обратного (1/x) вещественных чисел;
  12. PFRSQRT — установление приближенного значения обратного от квадратного корня (1/sqrt(x)) вещественных чисел;
  13. PFRCPIT1 — первый шаг вычисления значения обратного (1/x) вещественных чисел;
  14. PFRSQIT1 — первый шаг вычисления значения обратного от квадратного корня (1/sqrt(x)) вещественных чисел;
  15. PFRCPIT2 — второй шаr вычисления значения обратного или обратного от квадратного корня вещественных чисел;
  16. PMULHRW — умножение 16-битных целых чисел с округлением
  17. FEMMS — быстрое переключение состояния FPU/MMX;
  18. PREFETCH/PREFETCHW — предвыборка строки кэша процессора из памяти.

Битва гигантов и Chaintech СТ-7AJA (AMD vs Intel)

Сегодня мы начинаем цикл статей, посвященный системным платам под платформу Socket-A. В то время, как на буржуйском западе степень принятия рынком процессоров AMD и систем на их основе все растет, в нашей стране по-прежнему бытует досадное предубеждение о второсортности систем на Athlon и Duron. А ведь в той же Германии доля проданных через розничную сеть компьютеров с процессорами AMD составила в этом году рекордные 65%. Целью данного обзора не ставится задача «столкнуть лбами» процессоры Intel и AMD. Мы лишь хотели документально продемонстрировать достоинства и доступность платформы Socket-A, попутно делясь впечатлениями о новой материнской плате — Chaintech CT-7AJA.

Теперь после небольшого вступления перейдем непосредственно к рассмотрению материнской платы Chaintech CT-7AJA ($99):

Спецификация

  • Форм-фактор ATX (30,5х22см), 4-х слойный дизайн, Socket-A
  • Поддержка процессоров AMD Duron, AMD Athlon
  • Чипсет VIA KT 133 (VT8363/686A)
  • Память 3 разъема DIMM, поддерживающих установку до 1,5Гб памяти типа DRAM PC100/133
  • Слоты расширения: 1 AGP (2x/4x), 5 PCI, 1 ISA, 1 AMR слот
  • Порты ввода-вывода
    — Порт дисковода FDD, два последовательных, один параллельный порты, порты для PS/2 мыши и клавиатуры
    — 4 USB порта (2 коннектора на плате)
    — 1 IrDA коннектор
  • Интегрированный IDE контроллер: 2 канала IDE, поддерживающие протоколы ATA33/66 (с поддержкой до 4 ATAPI-устройств)
  • Вcтроенное звуковое решение с внешним AC’97 кодеком. Разъемы Audio/Line out, Line-in, Mic-in, Game/MIDI port.
  • Аппаратный мониторинг: температура процессора и платы, контроль скорости вращения вентиляторов, контроль рабочих напряжений
  • BIOS
    — 2-Мбитный Flash ROM
    — Award BIOS
    — Фирменная технология BIOS Wonder, включающая в себя Trend ChipAway Virus, Flash BIOS Write Protect, Embedded Flash Utility, HDD Instant Recovery utility (См. ниже)
    — Опционально TwinBIOS
  • Разное
    — Пробуждение от модема, мыши, клавиатуры, сети (WOL) и таймера

Комплектация

Кроме самой платы, в большой коробке фиолетового цвета с надписью Chaintech мы нашли шлейф U/DMA 66, шлейф FDD, руководство пользователя и еще одну очень полезную вещь — памятку с описанием коннекторов платы, выполненную в виде наклейки. Ее вполне уместно наклеить на внутреннюю сторону крышки корпуса, чтобы не искать мануаль.

В работе

Одна из самых необычных и замечательных возможностей, что предлагает Chaintech в своем продукте, — это встроенная в биос утилита HDD Instant Recovery Utility v.1.0 (HIRU). Данная программа позволяет творить со своим диском много чего интересного:

  • Делать резервную копию (backup) на указанном разделе. Поддерживаются файловые системы FAT16/32, NTFS;
  • Дефрагментировать жесткий диск (только в файловых системах FAT 16/32);
  • Клонировать диски (копирование всего содержимого).

Как видим, программа умеет многое, даже удивительно, как все это поместилось в менее чем 2Мbit Flash-биос теперь, когда большинство программ имеют просто огромные размеры. Вот во времена нашей бурной молодости в 48-и килобайтах ZX Spectrum умещалось такое. Впрочем, не будем отклоняться от темы.

Работая с HIRU, следует помнить о том, что она инсталлируется на жесткий диск и «привязана» к конкретной материнской плате Chaintech. Если вы собираетесь переставить жесткий диск на другую машину, то утилиту следует удалить.

Следующая интересная «фичка» платы — это утилита Flash memory writer v.7.7, также встроенная в многострадальный теремок-биос. Назначение программы следует из названия — она предназначена для перепрошивкм биос. Удобство в работе гарантируется: все что нужно, — это вставить дискету с образом биос в дисковод и нажать при загрузке комбинацию Alt+F2. Просто и удобно!

Расположение коннекторов и элементов на материнской плате CT-7AJA не вызвало у нас особых нареканий. Вот только место для разъема ATX-питания выбрали откровенно неудачно — ниже и левее гнезда процессора. В результате, если вы пользуетесь большим и мощным кулером, скажем, таким, как SuperOrb, то шнур питания может помешать. Расположение остальных узлов оказалось вполне логичным и удобным: разъемы контроллеров IDE и FDC находятся на краю платы и ничему не мешают. Также легко доступны DIP-переключатели, ответственные за выставление множителя процессора.

Теперь, когда мы разобрались с внешним видом платы, перейдем к ее тестированию и сравнению с платформой от Intel.

Как мы тестировали:

На испытательных стендах была установлена новая операционная система Windows Millenium, пришедшая на смену старушке Windows98SE. На обеих тестовых машинах все узлы были одинаковыми, естественно за исключением процессоров и материнских плат.

Компьютер №1

  • Процессоры AMD Duron 700 ($69), AMD Athlon 800 ($150);
  • Материнская плата Chaintech CT-7AJA ($99);
  • DIMM 128Mb SDRAM PC-133;
  • Жесткий диск Fujitsu MPF3102AT — 10Гб
  • CD-ROM Asus 40x

Компьютер №2

  • Процессоры Celeron 700 ($95), Intel Pentium III-800E ($194), Intel Pentium III-800EB ($194);
  • Материнская плата Asus CUSL2 ($146);
  • DIMM 128Mb SDRAM PC-133;
  • Жесткий диск Fujitsu MPF3102AT — 10Гб
  • CD-ROM Asus 40x

По конфигурации второго компьютера следует напомнить, что варианты процессора Pentium III с ядром Coppermine отличаются друг от друга частотой системной шины: 100Мгц для E, 133Мгц для EB.

Прежде чем углубиться в изучение цифр и графиков, стоит сказать о возможностях оверклокинга, предоставляемых платой. Разгон на CT-7AJA возможен благодаря модулю DIP-переключателей SW4, который позволяет задать на процессор множитель от 5х до 12.5х. Конечно, это справедливо лишь для процессоров с незаблокированным множителем. О том, как это делается, в интернете написано довольно много.

Примите к сведению, а не для руководства к действию ;-) следующую информацию. Процессор Duron 650 с разблокированным множителем частоты стабильно заработал у нас на 900 Мгц. Дальнейший разгон с сохранением стабильности был невозможен, так как на плате не предусмотрен ручной регулятор напряжения на ядро процессора (подобный регулятор есть на Asus A7V).

Рассмотрим, какую скорость демонстрирует платформа Socket-A в сравнении с машиной на процесcоре от Intel. Воспользуемся для этого:

1) Тестовым пакетом ZD Winbench 99 v.1.1. В таблице большее значение означает лучший результат. Параметр CPU Mark 32 демонстрирует «чистое» процессорное быстродействие на целочисленных операциях, FPU Mark — на операциях с плавающей запятой, Business Disk и High-End Disk Winmark — скорость работы дисковой подсистемы на типичных офисных приложениях.

CPU Mark 32 FPU Mark Business Disk Winmark 99 High-End Disk Winmark 99
AMD Athlon 800 73.9 4340 3030 10300
Intel Pentium III 800E 72 4300 3000 11300
Intel Pentium III 800EB 73.6 4270 3000 11400
AMD Duron 700 59,8 3800 2720 10200
Intel Celeron 700 44,8 3620 2480 8130

2) Синтетическим бенчмарком Sisoft Sandra 2000 (memory benchmark), показывающим скорость обмена данными на отрезке процессор-память для разных типов операций. Лидерство процессоров AMD в этом тесте обьясняется использованием системной шины Alpha EV6. Ее эффективная скорость передачи данных составляет 200 Мгц (Double Data Rate 100*2), в отличие от 100/133 Мгц у Intel.

3) Игрой Heavy Metal: F.A.K.K.2 (v.1.02) на графическом движке Quake3. Здесь бесспорный лидер Pentium III, его отрыв от Athlon достигает 14%, причем этот результат будет справедлив для большинства игр на данном движке, начиная с самого Quake3 ;-). На последнем почетном месте, как и следовало ожидать, оказался Celeron, с доисторической системной шиной 66Мгц.

640*480-32bit, fps 1024*768-32bit, fps AMD Athlon 800 71,7 60.3 Intel Pentium III 800E 74.4 67.4 Intel Pentium III 800EB 84 69.2 AMD Duron 700 67.9 63 Intel Celeron 700 54.2 53.9

4) Тестовым пакетом 3D Mark 2000 (v1.1), который использует тот же графический движок, что и находящаяся в разработке игра Max Payne. В этом плане тест не является абсолютной синтетикой и его результаты отражают поведение системы в реальных Direct3D играх. Мы приводим результаты с использованием различных версий рендерящего движка программы:

  • Оптимизация под расширенные наборы команд (Enhanced 3DNOW! для Athlon и Duron; SSE для Pentium III и Celeron).
  • Оптимизация под аппаратный T&L. Данный способ работы пакета возможен при наличии видеокарты на соответствующем графическом чипе (Nv >Результатам 3D Mark 2000 по последнему пункту мы склонны доверять более всего, так как он наиболее точно показывает работу системы применительно к большинству игр. Этот тезис связан с тем, что большинство игр имеет очень слабую оптимизацию под 3DNOW! и SSE, либо не имеет ее вовсе. То же самое справедливо в отношении аппаратного T&L. Иными словами, результаты 3D Mark 2000 с оптимизацией под расширенные наборы команд и T&L говорят, скорее, об уровне оптимизации графического ядра программы и драйверов видеокарты, а не о скорости процессора.

5) И, наконец, в жадном до ресурсов Unreal Tournament — игре очень распространенной и весьма любимой.

640*480-32bit, fps 1024*480-32bit, fps
AMD Athlon 800 64.7 60.5
Intel Pentium III 800E 64.7 60.1
Intel Pentium III 800EB 69.6 62.8
AMD Duron 700 55,5 52,2
Intel Celeron 700 38,3 35,3

Итоги:

Системная плата Chaintech CT-7AJA, как представитель современных решений под платформу Socket-A, демонстрирует отличное быстродействие и является хорошей альтернативой системе на процессоре Intel. За все время тестирования мы ни разу не столкнулись с нестабильной работой или случаями несовместимости. Как показала практика, процессор Athlon в большинстве приложений уступает по скорости Pentium III-EB, пусть и совсем незначительно, но при этом гораздо более доступен по цене.
В нише же систем начального уровня процессоры AMD вне конкуренции: AMD Duron демонстрирует значительно более высокое быстродействие, чем его более дорогой конкурент Intel Celeron. На наш взгляд, Duron — лучший выбор для построения недорогой, но шустрой системы, которой будут по зубам даже серьезные вычислительные задачи .

Илон Маск рекомендует:  Шаблон сайта курорт HTML, CSS, 1 страница
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL