Начиная с какого процессора процессоры имеют встроенный сопроцессор с плавающей точкой
Привет, дорогие друзья. Вы не задумывались, почему мы можем просто вставить несколько видеокарт и использовать их вместе, а вот с процессором такое проделать нельзя? Я знаю, что есть двухпроцессорные материнские платы, но если на плате всего один слот, то что же делать? Если у меня на плате один слот PCI-E, но я очень хочу две видеокарты, я все равно могу подцепить вторую через райзер. А вот процессор не могу. Или все же могу?
Содержание
Содержание
Сопроцессоры 101
Давайте вообще разберемся с тем, что из себя представляют сопроцессоры и почему же так мало информации о них. Вопрос это весьма и весьма сложный, хоть и кажется простым на первый взгляд. Но от того и интереснее в нем разобраться.
Я начал свои поиски, так как (каюсь) сам не был слишком знаком с сопроцессорами. При запросах в ру-сегменте интернета я получал примерно вот такие вещи:
Потому было принято идти в сегмент забугорный, так сказать ненашенский.
Согласно классическому определению, сопроцессором обозначается устройство делегирующее себе часть задач основного процессора (не равно центрального), например операций с плавающей точкой, графикой, строками, etc. В общем, помощник грубо говоря. Это было ясно с самого начала, как итог использования сопроцессора мы получаем большую производительность в каких-то конкретных задачах или широком круге задач. Ясно-понятно-хорошо.
А что дальше-то? Откуда брать? Куда это подключать? Как это выглядит? Как использовать?
Чтобы лучше в этом разобраться нужно немного окунуться в пучины истории. Первыми юзерами таких штук был конструкторы/инженеры, использующие IBM PC, и владельцы мейнфреймов. Тот же оригинальный IBM PC из бородатых годов имел отдельный сокет для установки сопроцессора для операций с плавающей точкой.
В современном мире изменилось немного. В потомках оригинальных IBM PC тоже имеется сокет для установки сопроцессора, но скорее формально — чаще всего туда ставят видеокарты, к слову, являющиеся графическими сопроцессорами. Но этим дело далеко не ограничивается, прошу обратить внимание на такую штуку как Xeon Phi.
Xeon Phi — x86 процессор, использующий в качестве интерфейса подключения PCI-E. Пожалуй, эти штуки ближе к видеокартам, чем к классическим CPU. Они имеют сумасшедшее количество ядер, используют тот же интерфейс, и не очень высокие частоты. Но работают на той же самой архитектуре, что и процессоры у большинства людей в домашних компах (не считая нюансов).
О Xeon Phi, к слову, информации уже гораздо больше. Известно, что на них не может быть запущена операционная система, и они могут выступать только в качестве помощника основному процессору. Также известно, что заведется сие чудо техники не в каждом компьютере. У этого парня например не получилось:
А вот у этого получилось:
Также известно, что данное устройство хорошо себя показывает лишь в узком спектре задач и для бытового пользования годится весьма не весьма. К сожалению, я такой вещицей не владею, но если она появится, то я обязательно найду способ тщательно её протестировать и попробовать её хоть как-то использовать. Говорят, что находятся индивиды, которые занимаются на этой штуке майнингом крипты, но мне, пожалуй, это применение не очень интересно.
Если выдумаете, что одними Xeon Phi все ограничивается, то спешу разочаровать (ну или обрадовать) — не ограничивается. Правда, речь пойдет о немного других штуках.
Есть такое понятие как кластер — это когда несколько компьютеров работают сообща. В рассматриваемом нами случае PCI/PCI-E шина используется лишь для запитки. По сути, это компьютер внутри компьютера, материнка подключенная к материнке, и чтобы суммировать мощность, нужно использовать отдельный коммутатор. Конечно, для бытовых нужд такое приспособить непросто, но все же можно, например, рендерить на таких кластерах или решать какие-то научные задачи. Очень удобно, я считаю. Так, один парень смог на кластере из нескольких PlayStation 3 заниматься расчетами активности черных дыр .
Как правило основными заказчиками таких кластеров являются серьезные промышленные предприятия.
Хотя согласитесь, было бы здорово, если бы цены на такие приспособы не были бы такими кусачими, а установка походила бы на установку второго зеона в двухпроцессорный хуанан со всеми вытекающими преимуществами в виде отвала чипсета . Поставил себе шесть Core2Duo и уже вроде как и райзен не нужен.
Математический сопроцессор — сопроцессор для расширения командного множества центрального процессора и обеспечивающий его функциональностью модуля операций с плавающей запятой, для процессоров, не имеющих интегрированного модуля.
Модуль операций с плавающей запятой (или с плавающей точкой; англ. floating point unit (FPU) ) — часть процессора для выполнения широкого спектра математических операций над вещественными числами.
Простым «целочисленным» процессорам для работы с вещественными числами и математическими операциями требуются соответствующие процедуры поддержки и время для их выполнения. Модуль операций с плавающей запятой поддерживает работу с ними на уровне примитивов — загрузка, выгрузка вещественного числа (в/из специализированных регистров) или математическая операция над ними выполняется одной командой, за счёт этого достигается значительное ускорение таких операций.
Сопроцессоры x86 от сторонних производителей
Широкое распространение в соответствующий период получили сопроцессоры для платформы x86, выпускавшиеся компанией Weitek — ею были выпущены 1167, 2167 в виде набора микросхем и микросхемы 3167, 4167, для процессоров 8086, 80286, 80386, 80486, соответственно. По сравнению с сопроцессорами от Intel они обеспечивали в 2—3 раза большую производительность, но обладали несовместимым программным интерфейсом, реализованным через технологию memory-mapping. Она сводилась к тому, что основной процессор должен был записывать информацию в те или иные области памяти, контролируемые Weitek-овским сопроцессором (собственно оперативной памяти там, конечно, не было). Конкретный адрес, куда производилась запись, интерпретировался в качестве той или иной команды. Несмотря на несовместимость, сопроцессоры от Weitek были широко поддержаны как разработчиками ПО, так и производителями материнских плат, предусматривавших на них гнёзда для установки такой микросхемы.
Ряд других компаний также выпускал различные несовместимые математические сопроцессоры, реализуя интерфейс к ним через порты ввода-вывода или прерывания BIOS, но они не получили такого широкого распространения.
Компании-производители клонов выпускали совместимые с 80287 80387 сопроцессоры, работавшие быстрее аналогичных интеловских. Среди этих компаний можно упомянуть Cyrix, AMD, Chips & Technologies (C&T). Иногда система команд этих сопроцессоров расширялась несколькими несовместимыми, например, аналог 80287 от C&T содержал команды для работы с вектором из четырёх значений с плавающей точкой. Серьёзной поддержки от производителей ПО эти расширенные команды не получили.
Процессоры EMC87 от фирмы Cyrix могли работать как в режиме программной совместимости с Intel 80387, так и в собственном несовместимом режиме программирования. Для них обеспечивалась аппаратная совместимость с разъёмом 80387-го сопроцессора.
В СССР выпускалась микросхема (КМ)1810ВМ87, которая являлась аналогом 8087.
Сопроцессоры
x87 — это специальный набор инструкций для работы с математическими вычислениями, являющийся подмножеством архитектуры процессоров x86. Такое название он получил, потому что первоначальные отдельные математические сопроцессорные чипы имели названия, заканчивающиеся на 87. Как и другие расширения базового набора инструкций процессора, эти инструкции не являются строго необходимыми для построения рабочей программы, но будучи аппаратно реализованными, общие математические задачи они позволяют выполнять гораздо быстрее. Например, в наборе инструкций x87 присутствуют команды для расчёта значений синуса или косинуса.
Форматы данных
Внутри FPU числа хранятся в 80-битном формате с плавающей запятой, для записи же или чтения из памяти могут использоваться:
- Вещественные числа в трёх форматах: коротком (32 бита), длинном (64 бита) и расширенном (80 бит).
- Двоичные целые числа в трёх форматах: 16, 32 и 64 бита.
- Упакованные целые десятичные числа (BCD) числа — длина максимального числа составляет 18 упакованных десятичных цифр (72 бита).
FPU также поддерживает специальные численные значения:
- Денормализованные вещественные числа — числа, которые меньше минимального нормализованного числа. При формировании такого значения в некотором регистре стека в соответствующем этому регистру теге регистра TWR формируется специальное значение (10).
- Бесконечность (положительная и отрицательная), возникает при делении на нуль ненулевого значения, а также при переполнениях. При формировании такого значения в некотором регистре стека в соответствующем этому регистру теге регистра TWR формируется специальное значение (10). (англ.not-a-number (NaN) ). Различают два вида нечисел:
- SNaN (Signaling Non a Number) — сигнальные нечисла. Сопроцессор реагирует на появление этого числа в регистре стека возбуждением исключения недействительной операции. Сопроцессор не формирует сигнальных чисел. Программисты формируют такие числа преднамеренно, чтобы возбудить в нужной ситуации исключение.
- QNaN (Quiet Non a Number) — спокойные (тихие) нечисла. Сопроцессор может формировать спокойные нечисла в качестве реакции на определённые исключения, например число вещественной неопределённости.
Другие платформы
Аналогично, материнские платы ПК, построенных на процессорах Motorola, до разработки этой фирмой процессора MC68040 (в который сопроцессор был встроен) содержали математический сопроцессор. Как правило, в качестве FPU использовался сопроцессор 68881 16 МГц или 68882 25 МГц. Практически любой современный процессор имеет встроенный сопроцессор.
Компания Weitek также выпускала математические сопроцессоры для платформ 68000 и MIPS.
Содержание
Устройство FPU
Все процессоры Intel и AMD, начиная с 486DX, имеют встроенный математический сопроцессор, и в отдельном сопроцессоре не нуждаются (за исключением Intel486SX). Тем не менее, термин x87 всё ещё используется для выделения той части инструкций процессора, которая занимается вычислениями с использованием плавающей запятой; компиляторы могут использовать эти инструкции для производства кода, который работает быстрее, нежели тот, что использует вызовы к библиотекам для выполнения операций с плавающей запятой.
Инструкции x87 совместимы со стандартом IEEE-754. Однако x87 выполняют операции не в строгом соответствии с форматами IEEE-754, из-за использования более широких регистров. Поэтому последовательность арифметических операций может выполняться несколько по-разному на наборе x87 и на процессоре, строго следующем формату IEEE-754.
x87 организует свои регистры не как массив, как большинство других архитектур, а как регистровый стек, работающий по принципу обратной польской записи. Это означает, что в один момент времени только два верхних регистра доступны для проведения операций, а доступ к другим регистрам требует манипуляций со стеком. Хотя такая организация получается и удобной для программистов, она делает трудоёмким построение эффективного кода x87 для компиляторов.
Начиная с Pentium III, вычисления с помощью инструкций SSE осуществляются с одинарной точностью, а в более поздних версиях — с двойной точностью форматов IEEE-754. После появления SSE2 использование x87 в значительной степени умаляется в 64-разрядных архитектурах x86-64 и связанных с ней 64-битных реализациях операционных систем, таких, как Microsoft Windows, Mac OS X, Solaris, FreeBSD и Linux, хотя он по-прежнему хорошо поддерживается для полной совместимости со старыми приложениями.
Модуль операций с плавающей запятой представляет собой стековый калькулятор, работающий по принципу обратной польской записи. Перед операцией аргументы помещаются в LIFO-стек, при выполнении операции необходимое количество аргументов снимается со стека. Результат операции помещается в стек, где может быть использован в дальнейших вычислениях или может быть снят со стека для записи в память. Также поддерживается и прямая адресация аргументов в стеке относительно вершины.
Другие платформы
Аналогично, материнские платы ПК, построенных на процессорах Motorola, до разработки этой фирмой процессора MC68040 (в который сопроцессор был встроен) содержали математический сопроцессор. Как правило, в качестве FPU использовался сопроцессор 68881 16 МГц или 68882 25 МГц. Практически любой современный процессор имеет встроенный сопроцессор.
Компания Weitek также выпускала математические сопроцессоры для платформ 68000 и MIPS.
Сопроцессоры
x87 — это специальный набор инструкций для работы с математическими вычислениями, являющийся подмножеством архитектуры процессоров x86. Такое название он получил, потому что первоначальные отдельные математические сопроцессорные чипы имели названия, заканчивающиеся на 87. Как и другие расширения базового набора инструкций процессора, эти инструкции не являются строго необходимыми для построения рабочей программы, но будучи аппаратно реализованными, общие математические задачи они позволяют выполнять гораздо быстрее. Например, в наборе инструкций x87 присутствуют команды для расчёта значений синуса или косинуса.
Форматы данных
Внутри FPU числа хранятся в 80-битном формате с плавающей запятой, для записи же или чтения из памяти могут использоваться:
Математический сопроцессор — сопроцессор для расширения командного множества центрального процессора и обеспечивающий его функциональностью модуля операций с плавающей запятой, для процессоров, не имеющих интегрированного модуля.
Модуль операций с плавающей запятой (или с плавающей точкой; англ. floating point unit (FPU) ) — часть процессора для выполнения широкого спектра математических операций над вещественными числами.
Простым «целочисленным» процессорам для работы с вещественными числами и математическими операциями требуются соответствующие процедуры поддержки и время для их выполнения. Модуль операций с плавающей запятой поддерживает работу с ними на уровне примитивов — загрузка, выгрузка вещественного числа (в/из специализированных регистров) или математическая операция над ними выполняется одной командой, за счёт этого достигается значительное ускорение таких операций.
Содержание
Смотреть что такое "Математический сопроцессор" в других словарях:
математический сопроцессор — — [Е.С.Алексеев, А.А.Мячев. Англо русский толковый словарь по системотехнике ЭВМ. Москва 1993] Тематики информационные технологии в целом EN match coprocessor … Справочник технического переводчика
Сопроцессор — Сопроцессор специализированный процессор, расширяющий возможности центрального процессора компьютерной системы, но оформленный как отдельный функциональный модуль. Физически сопроцессор может быть отдельной микросхемой или может быть… … Википедия
Блок операций с плавающей точкой — Математический сопроцессор 80x287 в колодке на базовой плате персонального компьютера. Сопроцессор Motorola 68881 Математический сопроцессор сопроцессор для расширения командного множества центрального процессора и обеспечивающий его… … Википедия
Периферийный процессор — Сопроцессор специализированный процессор, расширяющий возможности центрального процессора компьютерной системы, но оформленный как отдельный функциональный модуль. Физически сопроцессор может быть отдельной микросхемой или может быть встроен в… … Википедия
Intel 80486 — > Центральный процессор Микропроцессор Intel 80486 Производство: с 10 апреля … Википедия
80486 — > Центральный процессор … Википедия
80386 — В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете отредактировать эту статью … Википедия
Am486 — AMD Am486DX 40 Am486 семейство микропроцессоров архитектуры x86 компании AMD, предст … Википедия
Микропроцессорный комплект серии К1810 — Микропроцессорный комплект cерии К1810 набор микросхем, аналогичных набору микросхем для процессора Intel 8086, дальнейшее развитие микропроцессорного комплекта К580. Использовался в отечественных IBM PC совместимых компьютерах, таких как… … Википедия
Процессор — У этого термина существуют и другие значения, см. Процессор (значения). Запрос «ЦП» перенаправляется сюда; см. также другие значения. Intel Celeron 1100 Socket 370 в корпусе FC PGA2, вид снизу … Википедия
Математический сопроцессор — сопроцессор для расширения командного множества центрального процессора и обеспечивающий его функциональностью модуля операций с плавающей запятой, для процессоров, не имеющих интегрированного модуля.
Модуль операций с плавающей запятой (или с плавающей точкой; англ. floating point unit (FPU) ) — часть процессора для выполнения широкого спектра математических операций над вещественными числами.
Простым «целочисленным» процессорам для работы с вещественными числами и математическими операциями требуются соответствующие процедуры поддержки и время для их выполнения. Модуль операций с плавающей запятой поддерживает работу с ними на уровне примитивов — загрузка, выгрузка вещественного числа (в/из специализированных регистров) или математическая операция над ними выполняется одной командой, за счет этого достигается значительное ускорение таких операций.
Другие платформы
Аналогично, материнские платы ПК, построенных на процессорах
Компания Weitek также выпускала математические сопроцессоры для платформ 68000 и
Устройство FPU
Модуль операций с плавающей запятой представляет собой стековый калькулятор, работающий по принципу обратной польской записи. Перед операцией аргументы помещаются в LIFO-стек, при выполнении операции необходимое количество аргументов снимается со стека. Результат операции помещается в стек, где может быть использован в дальнейших вычислениях или может быть снят со стека для записи в память. Также поддерживается и прямая адресация аргументов в стеке относительно вершины.
Внутри FPU числа хранятся в 80-битном формате с плавающей запятой, для записи же или чтения из памяти могут использоваться:
- один из трёх форматов с плавающей точкой (32, 64 и 80 бит),
- целочисленные форматы (16, 32 и 64 бита),
- 80-битный BCD-формат.
Поддерживаемые математические операции: арифметические операции, сравнение, деление по модулю, округление, смена знака, модуль, квадратный корень, синус, косинус, частичный тангенс, частичный арктангенс, загрузка константы (0, 1, число пи, log2(10), log2(e), lg(2), ln(2)) и некоторые другие специфические операции.
FPU умеет обрабатывать пограничные состояния с помощью специальных значений, представимых форматом с плавающей запятой:
- денормализованное число (число, близкое к переполнению; при дальнейшем возрастании модуля денормализованное число становится бесконечностью),
- бесконечность (положительная и отрицательная), возникает при делении на нуль ненулевого значения а также при переполнениях,
- англ. not-a-number (NaN) ). Нечисла могут определять такие случаи, как:
- неопределённость (IND), возникает при комплексном результате (например, при вычислении квадратного корня из отрицательного числа) и в некоторых других случаях,
- недействительное значение (qNaN, sNaN) - может использоваться компилятором (для предотвращения использования неинициализированных переменных) или отладчиком,
В зависимости от флагов FPU, специальные значения могут инициировать обработку исключения операционной системой.
i8087 - арифметический со-процессор. Работает с х86 и х88 и не зависел от них. х87 - исполнял команды, а базовый процессор записывал.
Сопроцессоры Intel семейства x86
Для процессоров семейства x86 с 8086/8088 по 386, модуль операций с плавающей запятой был выделен в отдельную микросхему, называемую математическим сопроцессором. Для установки сопроцессора на плате компьютера предусматривался отдельный разъём.
Сопроцессор не является полноценным процессором, так как не умеет делать многих необходимых для этого операций (например, не умеет работать с программой и вычислять адреса памяти), являясь всего лишь придатком центрального процессора.
Одна из схем взаимодействия центрального процессора и сопроцессора, применяемая, в частности, в x86 сопроцессорах, реализуется следующим образом:
- Сопроцессор подключен к шинам центрального процессора, а также имеет несколько специальных сигналов для синхронизации процессоров между собой.
- Часть командных кодов центрального процессора зарезервирована для сопроцессора, он следит за потоком команд, игнорируя другие команды. Центральный процессор, наоборот, игнорирует команды сопроцессора, занимаясь только вычислением адреса в памяти, если команда предполагает к ней обращение. Центральный процессор делает цикл фиктивного считывания, позволяя сопроцессору считать адрес с адресной шины. Если сопроцессору необходимо дополнительное обращение к памяти (для чтения или записи результатов), он выполняет его через захват шины.
- После получения команды и необходимых данных сопроцессор начинает её выполнение. Пока сопроцессор выполняет команду, центральный процессор выполняет программу дальше, параллельно с вычислениями сопроцессора. Если следующая команда также является командой сопроцессора, процессор останавливается и ожидает завершения выполнения сопроцессором предыдущей команды.
- Также существует специальная команда ожидания (FWAIT), принудительно останавливающая процессор до завершения вычислений (если для продолжения программы необходимы их результаты).
Начиная с процессора 486SX модуль FPU отключался (в эту линейку попадали процессоры с бракованным FPU). Для процессоров 486SX также выпускался «сопроцессор» 487SX, но, фактически, он являлся процессором 486DX и при его установке процессор 486SX отключался.
Несмотря на интеграцию, FPU в процессорах i486 представляет собой неизменный сопроцессор, выполненный на том же кристалле, более того, схема FPU i486 полностью идентична сопроцессору предыдущего поколения 387DX вплоть до тактовой частоты (в два раза меньшей, чем частота центрального процессора). Настоящая интеграция FPU c центральным процессором началась только в процессорах Pentium модели MMX.
Полезное
Математический сопроцессор 8087
Аппаратный интерфейс и расположение выводов практически повторяет процессор 8086/8088, работающий в максимальном режиме (рис. 1). Одноименные выводы (кроме RQ/GT1) сопроцессора и основного процессора соединяются между собой. Для обеспечения синхронизации вывод BUSY, сигнализирующий о занятости сопроцессора выполнением инструкции, соединяют со входом ТЕSТ СРU. Выход INT (Interrupt) используется для сигнализации (высоким уровнем) о возникновении немаскированного исключения, возникающего во время выполнения инструкции. Исключением (exception) называют особые условия, которые могут возникнуть в результате вычислений. В РС сигнал INT через логическую схему поступает на вход NMI СРU и вызывает немаскируемое прерывание (вектор 2).
Регистры сопроцессора 8087
Сопроцессор содержит блок регистров данных, регистр управления и группу регистров состояния и указателей (рис 2).
Регистры данных R0-R7 разрядностью 80 бит организованы в стек. Номер регистра, являющегося текущей вершиной стека, хранится в поле ТОР управляющего регистра. Операция «ризЬ» уменьшает ТОР на 1 и помещает данные в регистр, являющийся новой вершиной стека. Операция "рор" записывает данные с вершины стека в память и инкрементирует указатель. Инструкции адресуют регистры либо явно, либо неявно. Неявная адресация подразумевает операнд, находящийся в вершине стека. Явная адресация подразумевает адрес регистра относительно вершины стека (на рис. 2 — номера SТi). Внутренняя шина имеет 84 разряда для ускорения выполнения операций, но в программной модели важна внешняя логическая структура. С каждым регистром связано двухбитное поле тегов (tag field), предназначенное для быстрого анализа состояния регистра. Комбинация бит 00 (Valid) указывает просто на наличие операнда в регистре, 01 (Zеrо) — на его нулевое значение, 10 (Special) — специальное назначение, 11 (Еmрtу) — регистр пустой. Поля тегов объединены в одно слово тегов (Tag Word).Слово состояния (Status Word) отражает общее состояние сопроцессора (рис. 3). Единичное значение бита В (Визу) указывает на занятость выполнением операции или наличие необслуженного запроса на прерывание исключения. Поле ТОР указывает на вершину стека. Биты С [0:3] определяют код условия (Condition Code), интерпретируемый в зависимости от выполненной инструкции. Если после выполнения инструкции FSTSWAX, пересылающей слово состояния NРХ в регистр АХ, выполнить инструкцию SАНF, биты кода условия переносятся в регистры флагов процессора, что позволяет их использовать в инструкциях условных переходов. Бит IR (Interrupt Request) устанавливается при возникновении немаскированного исключения, биты 0-6 устанавливаются при возникновении соответствующих исключений (табл. 1).
Управляющее слово (рис. 4) служит для выбора опций выполняемых операций.
Единичные значения бит 0-5 маскируют отдельные исключения. Единичное значение бита М маскирует прерывания. Поле РС (Рrecision Соntrol) задает точность: 00 - 24 бит (одинарная), 10 — 53 бита (двойная)» 11-64 бит (расширенная), 01 — зарезервировано. Поле RС (Rounding Control) определяет способ округления: 00 — к ближайшему значению, 01 — по направлению к -оо, 10 — по направлению к +со, 11 — по направлению к 0. Бит IС (Infinity Соntrol) управляет контролем бесконечности: 0 — аффинное, 1 -проекционное представление.
Указатели инструкций и данных служат для сохранения физического адреса, кода выполняемой операции и физического адреса операнда.
Сопроцессоры
Регистры
В FPU можно выделить три группы регистров:
- Стек процессора: регистры R0..R7. Размерность каждого регистра: 80 бит.
- Служебные регистры
- Регистр состояния процессора SWR (Status Word Register) — информация о текущем состоянии сопроцессора. Размерность: 16 бит.
- Управляющий регистр сопроцессора CWR (Control Word Register) — управление режимами работы сопроцессора. Размерность: 16 бит.
- Регистр слова тегов TWR (Tags Word Register) — контроль за регистрами R0..R7 (например, для определение возможности записи) Размерность: 16 бит.
- Указатель данных DPR (Data Point Register). Размерность: 48 бит.
- Указатель команд IPR (Instruction Point Register). Размерность: 48 бит.
См. также
Примечания
Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
Эта отметка установлена 13 мая 2011.- Технологии процессоров
- Расширения архитектуры x86
- Арифметика с плавающей запятой
Wikimedia Foundation . 2010 .
Сопроцессоры 101
Давайте вообще разберемся с тем, что из себя представляют сопроцессоры и почему же так мало информации о них. Вопрос это весьма и весьма сложный, хоть и кажется простым на первый взгляд. Но от того и интереснее в нем разобраться.
Я начал свои поиски, так как (каюсь) сам не был слишком знаком с сопроцессорами. При запросах в ру-сегменте интернета я получал примерно вот такие вещи:
Потому было принято идти в сегмент забугорный, так сказать ненашенский.
Согласно классическому определению, сопроцессором обозначается устройство делегирующее себе часть задач основного процессора (не равно центрального), например операций с плавающей точкой, графикой, строками, etc. В общем, помощник грубо говоря. Это было ясно с самого начала, как итог использования сопроцессора мы получаем большую производительность в каких-то конкретных задачах или широком круге задач. Ясно-понятно-хорошо.
А что дальше-то? Откуда брать? Куда это подключать? Как это выглядит? Как использовать?
Чтобы лучше в этом разобраться нужно немного окунуться в пучины истории. Первыми юзерами таких штук был конструкторы/инженеры, использующие IBM PC, и владельцы мейнфреймов. Тот же оригинальный IBM PC из бородатых годов имел отдельный сокет для установки сопроцессора для операций с плавающей точкой.
В современном мире изменилось немного. В потомках оригинальных IBM PC тоже имеется сокет для установки сопроцессора, но скорее формально — чаще всего туда ставят видеокарты, к слову, являющиеся графическими сопроцессорами. Но этим дело далеко не ограничивается, прошу обратить внимание на такую штуку как Xeon Phi.
Xeon Phi — x86 процессор, использующий в качестве интерфейса подключения PCI-E. Пожалуй, эти штуки ближе к видеокартам, чем к классическим CPU. Они имеют сумасшедшее количество ядер, используют тот же интерфейс, и не очень высокие частоты. Но работают на той же самой архитектуре, что и процессоры у большинства людей в домашних компах (не считая нюансов).
О Xeon Phi, к слову, информации уже гораздо больше. Известно, что на них не может быть запущена операционная система, и они могут выступать только в качестве помощника основному процессору. Также известно, что заведется сие чудо техники не в каждом компьютере. У этого парня например не получилось:
А вот у этого получилось:
Также известно, что данное устройство хорошо себя показывает лишь в узком спектре задач и для бытового пользования годится весьма не весьма. К сожалению, я такой вещицей не владею, но если она появится, то я обязательно найду способ тщательно её протестировать и попробовать её хоть как-то использовать. Говорят, что находятся индивиды, которые занимаются на этой штуке майнингом крипты, но мне, пожалуй, это применение не очень интересно.
Если выдумаете, что одними Xeon Phi все ограничивается, то спешу разочаровать (ну или обрадовать) — не ограничивается. Правда, речь пойдет о немного других штуках.
Есть такое понятие как кластер — это когда несколько компьютеров работают сообща. В рассматриваемом нами случае PCI/PCI-E шина используется лишь для запитки. По сути, это компьютер внутри компьютера, материнка подключенная к материнке, и чтобы суммировать мощность, нужно использовать отдельный коммутатор. Конечно, для бытовых нужд такое приспособить непросто, но все же можно, например, рендерить на таких кластерах или решать какие-то научные задачи. Очень удобно, я считаю. Так, один парень смог на кластере из нескольких PlayStation 3 заниматься расчетами активности черных дыр .
Как правило основными заказчиками таких кластеров являются серьезные промышленные предприятия.
Хотя согласитесь, было бы здорово, если бы цены на такие приспособы не были бы такими кусачими, а установка походила бы на установку второго зеона в двухпроцессорный хуанан со всеми вытекающими преимуществами
в виде отвала чипсета. Поставил себе шесть Core2Duo и уже вроде как и райзен не нужен.Математический сопроцессор — сопроцессор для расширения командного множества центрального процессора и обеспечивающий его функциональностью модуля операций с плавающей запятой, для процессоров, не имеющих интегрированного модуля.
Модуль операций с плавающей запятой (или с плавающей точкой; англ. floating point unit (FPU) ) — часть процессора для выполнения широкого спектра математических операций над вещественными числами.
Простым «целочисленным» процессорам для работы с вещественными числами и математическими операциями требуются соответствующие процедуры поддержки и время для их выполнения. Модуль операций с плавающей запятой поддерживает работу с ними на уровне примитивов — загрузка, выгрузка вещественного числа (в/из специализированных регистров) или математическая операция над ними выполняется одной командой, за счёт этого достигается значительное ускорение таких операций.
Сопроцессоры Intel семейства x86
Для процессоров семейства x86 с 8086/8088 по 386, модуль операций с плавающей запятой был выделен в отдельную микросхему, называемую математическим сопроцессором. Для установки сопроцессора на плате компьютера предусматривался отдельный разъём.
Сопроцессор не является полноценным процессором, так как не умеет делать многих необходимых для этого операций (например, не умеет работать с программой и вычислять адреса памяти), являясь всего лишь придатком центрального процессора.
Одна из схем взаимодействия центрального процессора и сопроцессора, применяемая, в частности, в x86 сопроцессорах, реализуется следующим образом:
- Сопроцессор подключен к шинам центрального процессора, а также имеет несколько специальных сигналов для синхронизации процессоров между собой.
- Часть командных кодов центрального процессора зарезервирована для сопроцессора, он следит за потоком команд, игнорируя другие команды. Центральный процессор, наоборот, игнорирует команды сопроцессора, занимаясь только вычислением адреса в памяти, если команда предполагает к ней обращение. Центральный процессор делает цикл фиктивного считывания, позволяя сопроцессору считать адрес с адресной шины. Если сопроцессору необходимо дополнительное обращение к памяти (для чтения или записи результатов), он выполняет его через захват шины.
- После получения команды и необходимых данных сопроцессор начинает её выполнение. Пока сопроцессор выполняет команду, центральный процессор выполняет программу дальше, параллельно с вычислениями сопроцессора. Если следующая команда также является командой сопроцессора, процессор останавливается и ожидает завершения выполнения сопроцессором предыдущей команды.
- Также существует специальная команда ожидания (FWAIT), принудительно останавливающая процессор до завершения вычислений (если для продолжения программы необходимы их результаты). В настоящее время команда используется лишь для обработки исключений при работе с плавающей точкой, работа процессора и сопроцессора синхронизируется прозрачно для программиста [1] .
Начиная с процессора Intel486DX модуль операций с плавающей запятой был интегрирован в центральный процессор и назван FPU. В линейке Intel486SX модуль FPU отключался (поначалу в эту линейку попадали процессоры с бракованным FPU). Для процессоров Intel486SX также выпускался «сопроцессор» Intel487SX, но, фактически, он являлся процессором Intel486DX и при его установке процессор Intel486SX отключался.
Несмотря на интеграцию, FPU в процессорах i486 представляет собой неизменный сопроцессор, выполненный на том же кристалле, более того, схема FPU i486 полностью идентична сопроцессору предыдущего поколения 387DX вплоть до тактовой частоты (в два раза меньшей, чем частота центрального процессора). Настоящая интеграция FPU c центральным процессором началась только в процессорах Pentium модели MMX.
Библиотека с плавающей точкой
Некоторое оборудование с плавающей точкой поддерживает только простейшие операции - сложение, вычитание, умножение. Но даже самый сложный комплекс с плавающей точкой имеет конечное число операций, которые он может поддерживать - например, ни один из них непосредственно не поддерживают произвольной точности арифметику.
Когда центральный процессор выполняет программу, которая требует операции с плавающей точкой, которые непосредственно не поддерживаются аппаратными средствами, процессор использует ряд более простых операций с плавающей точкой. В системах без каких-либо аппаратных средств с плавающей точкой, процессор эмулирует его, используя ряд простых арифметических операций с фиксированной точкой, которые работают на целочисленных АЛУ.
Программное обеспечение, которое перечисляет необходимую последовательность операций для эмуляции операций с плавающей запятой часто находится в библиотеке с плавающей запятой.
Сопроцессоры Intel семейства x86
Для процессоров семейства x86 с 8086/8088 по 386 модуль операций с плавающей запятой был выделен в отдельную микросхему, называемую математическим сопроцессором. Для установки сопроцессора на плате компьютера предусматривался отдельный разъём.
Сопроцессор не является полноценным процессором, так как не умеет делать многих необходимых для этого операций (например, не умеет работать с программой и вычислять адреса памяти), являясь всего лишь придатком центрального процессора.
Одна из схем взаимодействия центрального процессора и сопроцессора, применяемая, в частности, в x86-сопроцессорах, реализуется следующим образом:
- Сопроцессор подключен к шинам центрального процессора, а также имеет несколько специальных сигналов для синхронизации процессоров между собой.
- Часть командных кодов центрального процессора зарезервирована для сопроцессора, он следит за потоком команд, игнорируя другие команды. Центральный процессор, наоборот, игнорирует команды сопроцессора, занимаясь только вычислением адреса в памяти, если команда предполагает к ней обращение. Центральный процессор делает цикл фиктивного считывания, позволяя сопроцессору считать адрес с адресной шины. Если сопроцессору необходимо дополнительное обращение к памяти (для чтения или записи результатов), он выполняет его через захват шины.
- После получения команды и необходимых данных сопроцессор начинает её выполнение. Пока сопроцессор выполняет команду, центральный процессор выполняет программу дальше, параллельно с вычислениями сопроцессора. Если следующая команда также является командой сопроцессора, процессор останавливается и ожидает завершения выполнения сопроцессором предыдущей команды.
- Также существует специальная команда ожидания (FWAIT), принудительно останавливающая процессор до завершения вычислений (если для продолжения программы необходимы их результаты). В настоящее время команда используется лишь для обработки исключений при работе с плавающей точкой, работа процессора и сопроцессора синхронизируется прозрачно для программиста.
Начиная с процессора Intel486DX модуль операций с плавающей запятой был интегрирован в центральный процессор и назван FPU. В линейке Intel486SX модуль FPU отключался (поначалу в эту линейку попадали процессоры с бракованным FPU). Для процессоров Intel486SX также выпускался «сопроцессор» Intel487SX, но фактически он являлся процессором Intel486DX, и при его установке процессор Intel486SX отключался.
Несмотря на интеграцию, FPU в процессорах i486 представляет собой неизменный сопроцессор, выполненный на том же кристалле, более того, схема FPU i486 полностью идентична сопроцессору предыдущего поколения 387DX вплоть до тактовой частоты (в два раза меньшей, чем частота центрального процессора). Настоящая интеграция FPU c центральным процессором началась только в процессорах Pentium модели MMX.
Система команд сопроцессора
Система включает около 80 команд. Их классификация:
- Команды передачи данных
- Вещественные данные
- Целочисленные данные
- Десятичные данные
- Загрузка констант (0, 1, число Пи, log2(10), log2(e), lg(2), ln(2))
- Обмен
- Условная пересылка (Pentium II/III)
- Вещественные данные
- Целочисленные данные
- Анализ
- С нулём
- Условное сравнение (Pentium II/III)
- Вещественные данные: сложение, вычитание, умножение, деление
- Целочисленные данные: сложение, вычитание, умножение, деление
- Вспомогательные арифметические команды (квадратный корень, модуль, изменение знака, выделение порядка и мантиссы)
- Тригонометрия: синус, косинус, тангенс, арктангенс
- Вычисление логарифмов и степеней
- Инициализация сопроцессора
- Работа со средой
- Работа со стеком
- Переключение режимов
Устройство FPU
Все процессоры Intel и AMD, начиная с 486DX, имеют встроенный математический сопроцессор, и в отдельном сопроцессоре не нуждаются (за исключением Intel486SX). Тем не менее, термин x87 всё ещё используется для выделения той части инструкций процессора, которая занимается вычислениями с использованием плавающей запятой; компиляторы могут использовать эти инструкции для производства кода, который работает быстрее, нежели тот, что использует вызовы к библиотекам для выполнения операций с плавающей запятой.
Инструкции x87 совместимы со стандартом IEEE-754. Однако, x87 выполняют операции не в строгом соответствии с форматами IEEE-754, из-за использования более широких регистров. Поэтому последовательность арифметических операций может выполняться несколько по-разному на наборе x87 и на процессоре, строго следующем формату IEEE-754.
x87 организует свои регистры не как массив, как большинство других архитектур, а как регистровый стек, работающий по принципу обратной польской записи. Это означает, что в один момент времени, только два верхних регистра доступны для проведения операций, а доступ к другим регистрам требует манипуляций со стеком. Хотя такая организация получается и удобной для программистов, она делает трудоёмким построение эффективного кода x87 для компиляторов.
Начиная с Pentium III, вычисления с помощью инструкций SSE осуществляются с одинарной точностью, а в более поздних версиях — с двойной точностью форматов IEEE-754. После появления SSE2, использование x87 в значительной степени умаляется в 64-разрядных архитектурах x86-64 и связанных с ней 64-битных реализациях операционных систем, таких как Microsoft Windows, Mac OS X, Solaris, FreeBSD и Linux, хотя он по-прежнему хорошо поддерживается для полной совместимости со старыми приложениями.
Модуль операций с плавающей запятой [2] [3] представляет собой стековый калькулятор, работающий по принципу обратной польской записи. Перед операцией аргументы помещаются в LIFO-стек, при выполнении операции необходимое количество аргументов снимается со стека. Результат операции помещается в стек, где может быть использован в дальнейших вычислениях или может быть снят со стека для записи в память. Также поддерживается и прямая адресация аргументов в стеке относительно вершины.
Сопроцессоры x86 от сторонних производителей
Широкое распространение в соответствующий период получили сопроцессоры для платформы x86, выпускавшиеся компанией Weitek - ею были выпущены 1167, 2167 в виде набора микросхем и микросхемы 3167, 4167, для процессоров 8086, 80286, 80386, 80486, соответственно. По сравнению с сопроцессорами от Intel они обеспечивали в 2-3 раза большую производительность, но обладали несовместимым программным интерфейсом, реализованным через технологию memory-mapping. Она сводилась к тому, что основной процессор должен был записывать информацию в те или иные области памяти, контролируемые Weitek-овским сопроцессором (собственно, оперативной памяти там, конечно не было). Конкретный адрес, куда производилась запись, интерпретировался в качестве той или иной команды. Несмотря на несовместимость, сопроцессоры от Weitek были широко поддержаны как разработчиками ПО, так и производителями материнских плат, предусматривавших на них гнёзда для установки такой микросхемы.
Ряд других компаний также выпускал различные несовместимые математические сопроцессоры, реализуя интерфейс к ним через порты ввода-вывода или прерывания
Компании-производители клонов выпускали совместимые с 80287 80387 сопроцессоры, работавшие быстрее аналогичных интеловских. Среди этих компаний можно упомянуть AMD, Chips & Technologies (C&T). Иногда система команд этих сопроцессоров расширялась несколькими несовместимыми, например, аналог 80287 от C&T содержал команды для работы с вектором из четырёх значений с плавающей точкой. Серьёзной поддержки от производителей ПО эти расширенные команды не получили.
Просессоры EMC87 от фирмы
В СССР выпускалась микросхема (КМ)1810ВМ87, которая являлась аналогом 8087
Обработка исключений сопроцессор
Сопроцессор определяет шесть различных условий исключения, возникающих в процессе выполнения инструкций (см. табл. 1). Любое из них вызывает сигнал аппаратного прерывания INT, если оно не замаскировано и прерывание разрешено. Если прерывание запрещено, то при возникновении исключения просто продолжается выполнение инструкции, независимо от того, замаскирован данный класс исключений или нет. При разрешенном прерывании возникновение замаскированного исключения только фиксируется в регистре состояния, не вызывая прерывания, а сопроцессор выполняет соответствующую данному типу внутреннюю процедуру обработки исключения для обеспечения возможности продолжения работы. Незамаскированное исключение вызывает прерывание и обрабатывается внешней процедурой. Внешняя процедура обработки исключений, выполняемая центральным процессором по прерыванию от сопроцессора, для анализа ситуации может считать в память содержимое регистров указателей вместе со словами управления, состояния и тегов. Формат образа регистров приведен на рис. 5.
Сопроцессоры x86 от сторонних производителей
Широкое распространение в соответствующий период получили сопроцессоры для платформы x86, выпускавшиеся компанией Weitek — ею были выпущены 1167, 2167 в виде набора микросхем и микросхемы 3167, 4167, для процессоров 8086, 80286, 80386, 80486, соответственно. По сравнению с сопроцессорами от Intel они обеспечивали в 2-3 раза большую производительность, но обладали несовместимым программным интерфейсом, реализованным через технологию memory-mapping. Она сводилась к тому, что основной процессор должен был записывать информацию в те или иные области памяти, контролируемые Weitek-овским сопроцессором (собственно, оперативной памяти там, конечно не было). Конкретный адрес, куда производилась запись, интерпретировался в качестве той или иной команды. Несмотря на несовместимость, сопроцессоры от Weitek были широко поддержаны как разработчиками ПО, так и производителями материнских плат, предусматривавших на них гнёзда для установки такой микросхемы.
Ряд других компаний также выпускал различные несовместимые математические сопроцессоры, реализуя интерфейс к ним через порты ввода-вывода или прерывания BIOS, но они не получили такого широкого распространения.
Компании-производители клонов выпускали совместимые с 80287 80387 сопроцессоры, работавшие быстрее аналогичных интеловских. Среди этих компаний можно упомянуть Cyrix, AMD, Chips & Technologies (C&T). Иногда система команд этих сопроцессоров расширялась несколькими несовместимыми, например, аналог 80287 от C&T содержал команды для работы с вектором из четырёх значений с плавающей точкой. Серьёзной поддержки от производителей ПО эти расширенные команды не получили.
Процессоры EMC87 от фирмы Cyrix могли работать как в режиме программной совместимости с Intel 80387, так и в собственном несовместимом режиме программирования. Для них обеспечивалась аппаратная совместимость с разъёмом 80387-го сопроцессора.
В СССР выпускалась микросхема (КМ)1810ВМ87, которая являлась аналогом 8087
Читайте также: