Люди, которым нужна помощь в защите их личных прав и интересов, могут обратиться в Невский суд Санкт-Петербурга официальный сайт
Подробнее...Интересен остров Фараонов тем, что на нём возвышается крепость Салах-эль-Дина, возведённая в период правления Византии и отвоёванная потом могучими крестоносцами в далёком XIII веке
Подробнее...Конечно, для продолжительного отдыха в Египте нужно хотя бы несколько общепринятых фраз знать на арабском языке.
Подробнее...Туристы, отдыхающие на побережье восточной Австралии, в последнее время не спешат заходить в воду.
Подробнее...В настоящий момент туры в Грецию пользуются большой популярностью среди туристов.
Подробнее...Информация для туристов – когда лучше ехать отдыхать
Подробнее...На нашей планете есть такие уголки, которые 365 дней ежегодно напоминают рай - это лучшие пляжи мира.
Подробнее...Маврикий является самостоятельным государством, бывшей французской колонией
Подробнее...Одним из наиболее привлекательных и экзотических направлений для отдыха можно смело назвать Мальдивы.
Подробнее...Марокко – одна из нескольких стран, посетив которую вы все еще сможете ощутить пресловутую арабскую экзотику: далеко идущая поверхность океана по соседству с сияющей пустыней, марокканцы, лабиринты, где расположены рынки с множеством товаров.
Подробнее...Для мужского здоровья существует множество полезных привычек и практик. Некоторые из них включают
Подробнее...Исследователи уверены, что проституция появилась на Земле вместе с человеком.
Подробнее...Сегодня экспертизы проводятся в различных сферах человеческой деятельности, а результат экспертизы является одним из наиболее весомых доказательств.
Подробнее...За последние десятилетия применение в строительстве и отделке цементно-известковых смесей осталось на прежнем уровне.
Подробнее...Обо льне можно прочитать в старинных книгах, о способах получения рассказывают древние фрески и наскальные рисунки
Подробнее...Специальная и рабочая одежда имеет длинную историю развития
Подробнее...Образовавшиеся в последние пару веков проблемы с экологией, вызванные безответственным обращением человека с природой,
Подробнее...Общая характеристика системы экологического менеджмента и аудита экологически безопасных предприятий,
Подробнее...В тяжёлые времена многие компании ищут способы сэкономить.
Подробнее...Не все здания подключены к центральному водоснабжению, дома старой планировки оборудованы газовыми водонагревателями, которые круглогодично снабжают
Подробнее...Знакомство после 50 лет может быть настолько увлекательным и полезным, как и в молодости.
Подробнее...Найти успешную работу может быть сложной задачей, но с правильным подходом и усилиями вы можете повысить свои шансы на успех.
Подробнее...В водопроводных и газовых магистралях не обойтись без такого устройства, которое называется вентилем.
Подробнее...Казино Вулкан уже на протяжении нескольких лет подряд остается одним из самых популярных игровых заведений, что во многом обусловлено внушительным списком достоинств, о которых и пойдет речь ниже.
Подробнее...Для того, чтобы ускорить получение желаемого результата от регулярных занятий спортом, стоит обратить внимание на стероиды.
Подробнее...После того, как водителя признают полноценным человеком понимающим правила дорожного движения, ему предстоит пройти полноценное медицинское обследование.
Подробнее...Эскорт-агентство предоставит Вам девушку модель
Подробнее...Людям желающим обзавестись правами, стало проще приобрести справку, чтобы от дорожной полиции получить разрешение на перемещение с автомобилем по дороге.
Подробнее...Любой азартный игрок жаждет выиграть крупную сумму, которая мгновенно решит все его проблемы и изменит жизнь окончательно и бесповоротно.
Подробнее...Нельзя ничего просто так строить на новом месте, особенно там, где никто ничего раньше не строил. Следует для таких целей, начать проводить изыскательные земляные работы.
Подробнее...Совсем скорое появление 64-битного процессора AMD Hammer породил немалую активность общественности в плане обсуждения, темы увеличения разрядности процессоров. Причем основная тональность, которая имеет место быть, как это не странно – 64 против 32 бит означает двукратный прирост производительности. И это, понятное дело, неверно… Ноги подобных убеждений растут из сопредельной с персональными компьютерами области, а именно с сектора игровых консолей, где применялся коммерческий трюк с битностью – “64 битные” приставки как бы работают быстрее своих 32-битных конкурентов. Если привести пример из практики, то очень часто встречается такое вот утверждение: “64 битные процессоры работают в два раза быстрее 32-битных, потому что обрабатывают за такт в два раза больше данных”. В этой маленькой заметке мы попытаемся разобрать некоторые (далеко не все) аспекты 64-битности, и надеемся, что она может быть вам полезна.
Фоновый момент
Процессоры, ориентированные на массовое применение изначально работали и работают по принципу – SISD (Single Instruction, Single Data), что в переводе на русский язык означает примерно следующее – одна арифметическая инструкция процессора определяет один набор операндов и один результат.
С 1970 по 1986 год было время, когда параллелизм (способность выполнять несколько операций в течение каждого периода тактовой частоты) на уровне битности был очень важным моментом в области микропроцессоров. В те времена “битность” процессора определялась шириной регистров общего назначения, разрядностью ALU (арифметического логического устройства), и способностью адресовать тот или иной объем памяти по “плоскому” принципу. На примере продукции Intel, это выглядит так – 4-битный процессор 4004, 8-битный 8008, и 16-битный 8086. Все эти процессоры обеспечивали отличный параллелизм. Причиной тому, например, являлось то, что восьми битный процессор 8008 был в состоянии производить арифметические вычисления над целыми числами в диапазоне от –127 до 128, что не самым лучшим образом сказывалось на возможности оперировать за один раз значениями, выходящими за этот диапазон. Переход на использование 16-битных процессоров сразу облегчил реализацию многих задач – процессор 8086 оперировал шестнадцати битными операндами в диапазоне от –32768 до 32767. Это сразу привнесло в программирование работы этих микропроцессоров очень многое, открыв то, что ранее было достичь очень непросто.
Что на предмет работы с целыми числами?
Появление 32-битных процессоров в 1986 году совершило в некотором смысле революцию в этом смысле. 32-битный MPU оказался в состоянии оперировать целочисленными значениями диапазона от –2,147,483,648 до 2,147,483,647, чего более чем достаточно для различного рода вычислений. 64-битный MPU оперирует значениями за такт от –2^63 до 2^63, но это не значит, что он будет делать это с удвоенной производительностью. Причем на текущий момент трудно себе представить какую-либо “бытовую” задачу, в которой очень часто необходимо использовать переменные типа “64-bit Integer” (по крайней мере, об этом говорят люди, программирующие такие бытовые задачи на Си или на Java). Даже в том случае, когда применение 64-битных переменных необходимо, большая часть выгоды от их использования “уезжает” и перекрывается накладными расходами компилятора по использованию временных регистров и оптимизации кода. Это все незаметно на уровне написания кода, то есть на “высоком” уровне.
Возвращаясь к принципу SISD надо помнить, что одна арифметическая инструкция имеет один и только один результат. Это означает, что если программа производит операцию “2+3”, то, будучи, представленной 32-битным целым, и выполненным на 32-битном процессоре, и будучи 64-битным целым и выполненным на 64-битном процессоре, эта операция в обоих случаях остается единой операцией. Таким образом, важно понимать, что появление возможности оперировать 64-битными целыми значениями в один такт работы процессора, не несет в большинстве случаев никаких преимуществ – за исключением ряда тонких областей применения компьютеров, таких как научные расчеты и моделирование, криптография, некоторые инженерные приложения и еще ряд других областей. Нельзя сказать, что 64-битность процессора – штука бесполезная, но неверным будет ожидать двукратного (или хоть какого-то) прироста производительности, например, в игре Quake 3. Даже, если Quake 3 будет переписан с использованием 64-битных переменных. Кроме того, как показывает практика, в таких случаях размер кода даже вырастет, по сравнению с исходным 32-битным вариантом.
А что на предмет операндов с плавающей точкой?
Увеличение разрядности процессора при работе с операндами с плавающей точкой дает два эффекта: куда больший диапазон значений, и что самое главное – куда большую точность. Однако, блок FPU в плане работы с операндами в целом независим от “битности” СPU. X86 CPU предыдущих поколений были адаптированы к “плавучке” x87, произведению вычислений с удвоенной точностью, также, как и опционально работали в 80-битном режиме. Современные полностью конвейеризированные x86 CPU в состоянии оперировать операндами с плавающей точкой с малым временем ожидания и высокой пропускной способностью, даже с операндами двойной точности. Хотя в x87 FP стек и формат операндов несколько замедляют работу блока в целом – но это уже другая история.
Почему в 64-битный режим может оказаться медленнее 32-битного?
Если все остальные условия будут одинаковы, и различия будут лишь в разрядности CPU, то 64-битная система будет работать медленнее 32-битной. Изучение этого вопроса, проведенное специалистами компании DEC, показало, что в случае оптимизации и компиляции программ под 64-битность, приводит к уменьшению производительности на 5 процентов. Выяснили и причину этого явления – 64 битные указатели на данные занимают в памяти больше места, чем 32-битные и от того страдает эффективность работы кэш памяти, и как следствие, это сказывается на производительности.
Учитывая этот момент, 64-битные системы поддерживают 64-битную адресацию памяти, сохраняя возможность оперировать 32-битными значениями, как раз с целью уменьшения размера кода и для того, чтобы не снижать эффективность работы кэш памяти.
Для чего же подходят 64 битные вычисления?
64-битность несет в себе и, безусловный и однозначно положительный момент: 64-битная плоская адресация памяти. Есть масса приложений, для которых возможность напрямую адресовать память за пределами 4 Гб, играет ключевую роль в конечной производительности. Например, типичным примером таких приложений являются серьезные СУБД типа SQL.
Однако за возможность плоской адресации памяти придется платить организацией 64-битных регистров общего назначения и обеспечением поддержки 64-битной арифметики для расчета указателей.
Как обстоят дела с x86-64?
В случае с 64-битностью в реализации на платформе x86 также имеет место быть пятипроцентное уменьшение производительности процессора, связанное с понижением эффективности работы кэш памяти. В исполнении AMD предполагается бороться с этой проблемой установкой размера операнда по умолчанию в 32 бита, при сохранении режима 64-битной адресации. Мотивация такого решения понятна – 64 битные операнды пока не очень востребованы, но хорошо, что режим работы с ними в этом процессоре будет сохранен – префиксом REX такой режим работы будет активироваться.
Предполагается, что в режиме x86-64 удвоится число обычных регистров – с 8 до 16. Очевидно, что это позволит несколько снизить запросы в память на предмет операндов, и при соответствующей оптимизации кода под наличие этих 16 регистров, имеет смысл ожидать увеличения производительности при работе с целочисленным кодом на 5-10 процентов, по сравнению с обычной 8-регистровой моделью.
Кроме того, есть смысл ожидать еще 5-10 процентного увеличения скорости исполнения кода за счет оптимизации его под особенности AMD Hammer компиляторами.
Итого, 5-10 процентов за счет 16 регистров + 5-10 процентов за счет оптимизации дает нам прирост, при прочих равных условиях, на 10-20 процентов прироста производительности при использовании 64-битных процессоров в обычных, не специализированных приложениях.
А вообще, оптимизация – штука такая скользкая. Хватит ли сил (и денег) производителям процессоров убедить тех, кто пишет программы, убедить оптимизировать свой код. Но это уже другая песня, совсем другая …
Понимая этот аспект проблемы, производители и разработчики процессоров, как можно судить из имеющихся описаний архитектур 64-битных процессоров, пытаются сгладить эти моменты уже отработанным образом, который неформально можно охарактеризовать, как “костыли”, которые показали себя эффективными ранее.
В данном случае речь идет об использовании, например, таких технологий, как конвейеры. Причем конвейеры самого, что ни на есть современного вида (ибо этот принцип был известен задолго до появления первого процессора, а первая практическая реализация пятиступенчатого конвейера была реализована в процессоре Intel 80486), а именно максимально многоступенчатого. В частности, для увеличения тактовой частоты работы в качестве одного из моментов процессора (в потенциале) надо иметь конвейер достаточно серьезной глубины. Однако, в случае увеличения глубины конвейера возникает проблема, связанная с предсказанием ветвления. В решении этой проблемы помогает еще один “костыль” – Branch Target Buffer, с помощью которого реализован механизм динамического предсказания ветвления. Когда по мере исполнения внутренних инструкций встречалось ветвление (IF...ELSE или CASE 1...CASE N), в буфере запоминалась эта команда и адрес перехода. Эти данные использовались для предсказания перехода при повторном выполнении данной инструкции.
Вторым “костылем”, который позволяет несколько улучшить аспект работы с инструкциями, является увеличение количества исполнительных устройств. В частности, например, в процессоре AMD Hammer предполагается иметь три арифметически логических устройства (ALU), и три устройства адресации AGU для операций выгрузки из кэша и для записи в кэш, а также три устройства для операций с плавающей точкой.
Однако эффективность подобного метода, без существенного повышения тактовой частоты, не очень высока.
И этими методами не ограничивается различные ухищрения разработчиков процессоров в плане повышения производительности работы процессоров. Мы не будем на них подобно останавливаться, ибо рассмотрение архитектур текущих разработок не входит в тему этой заметки. К тому же, нас, как пользователей, волнует конечный продукт, а именно производительность готовых процессоров, которые мы вскоре увидим… Ждать осталось совсем недавно! А вот чего в принципе ждать от таких процессоров мы вкратце обрисовали.
Коли мы подняли в этой заметке тему архитектуры микропроцессоров, то имеет смысл в порядке справочной информации привести некоторые разъяснения относительно понятий, который применяются, когда говорят о микропроцессорах.
Общий принцип работы процессора
В каждый конкретный момент любой процессор работает над различными стадиями выполнения нескольких команд. По очередному тактовому импульсу каждая команда в конвейере передвигается на следующую ступень; выполненная команда покидает конвейер, а новая вступает в него. Наименьшее количество ступеней – пять: Выборка команды - Декодирование - Выборка операндов - Выполнение команды - Сохранение результатов в памяти. Понятно, что чтобы увеличить степень параллелизма, надо использовать по возможности большее число ступеней, насколько позволит технология.
Блок переупорядочивания – система декодирования и выборки команд, основанная на четком согласовании длин команд и их кодирования, избегающих сложных для реализаций вычислений;
Буфер восстановления последовательности – структура, которая управляет исполнением с изменением последовательности, отслеживая состояние команд, которые были переданы на исполнение, но удалены;
Взаимозависимость – ситуация, делающая невозможным выполнение одной команды до тех пор, пока не будет завершена другая. При истинной взаимозависимости (True Dependency) результат выполнения одной команды служит исходной информацией для другой. Ложные взаимозависимости (False Dependency) возникают при исполнении команд с изменением последовательности, но их можно избежать с помощью переименования регистров;
Выборка – процесс извлечения кода команды из кэша или памяти при подготовке к декодированию;
Вывод (откат) – передача результатов в архитектурные регистры и память. Команды, которые по предположению были исполнены, не могут быть удалены до тех пор, пока нет гарантии, что все взаимозависимости разрешены;
Двух потоковая (двухканальная) суперскалярная архитектура – обработка двух команд, поступающих в два конвейера. Она позволяет выдавать два результата за один такт (в идеале);
Дешифрация – исследование формата команды для того, чтобы определить тип операции и операнды, оговоренные в ней;
Исполнение по предположению – совокупность методов, позволяющая процессору обрабатывать команды, не будучи "уверенным" в том, что они когда-либо будут выполнены, например, после условного перехода;
Исполнение с изменением последовательности – совокупность методов, позволяющая передавать команды в исполнительные блоки в порядке, отличном от предписанного программой. После завершения исполнения команды вновь располагаются в надлежащем порядке;
Блок исполнения – часть процессора, предназначенная для выполнения операций определенного типа, таких, как арифметические функции, сохранение и извлечение данных из памяти, либо обработка ветвлений;
Конвейер – "сборочная линия", где обработка команд разбивается на ряд небольших шагов или ступеней (Stages), выполняемых отдельными схемами;
Микрокоманда – термин для обозначения RISC-подобных внутренних операций, в которые преобразуются х86-команды с целью повышения скорости их обработки;
Микропрограмма (микрокод) – последовательность микрокоманд (наборов управляющих бит), используемых для координации выполнения сложных команд путем разбиения их на меньшие сегменты;
Не блокируемый – позволяющий выполнять последующие операции, даже если выполнение предшествующей операции не может быть полностью завершено. Этот термин применяется конкретно для кэша, который может продолжать работу даже после безрезультатного обращения к нему (промах, Miss);
Неупорядоченное поступление, обработка, завершение – метод обработки команд позволяющий одному конвейеру продолжать работать при "заторе" в другом. При этом команды, стоящие в программе позже, могут быть фактически выполнены раньше предыдущих, которые "застряли" в конвейере. Эта архитектура может гарантировать с определенной вероятностью, что результаты не будут записаны в память, а регистры не модифицируются в неправильной последовательности;
Останов – останов части конвейера на один или несколько тактов;
Переименование регистров – возможность процессора во время продвижения команды по конвейеру ставить в соответствие логическому регистру физический, если команда делает запрос на использование регистров. Так, работая с несколькими копиями логических регистров, программа может пользоваться одним и тем же регистром в нескольких одновременных вычислениях;
Переход (ветвление) – точка, где возможно изменение последовательности выполнения команд программы. Переходы могут быть безусловными или условными, когда порядок выполнения программы меняется при определенном условии;
Плавающая точка – представление любого числа в виде одной цифры с десятичной дробью, за которой следует множитель (порядок числа 2 или другого, взятого за основание);
Предсказание переходов – процессор пытается "угадать", будет ли совершен конкретный переход;
Преобразовать в последовательную форму – заставить процессор приостановить передачу команд на исполнение до тех пор, пока не будет выведена определенная команда. Это требуется для определенных команд, которые нельзя обрабатывать вне установленного порядка;
Прогнозирование ветвлений – возможность процессора с определенной вероятностью предсказывать путь ветвления команды условного перехода;
Регистр – небольшой быстродействующий элемент памяти, расположенный на кристалле процессора. Помимо регистров специального назначения процессоры х86 имеют восемь 32bit регистров общего назначения, хранящих величины используемые в текущих вычислениях. Программы работают с архитектурными регистрами. Переименование регистров позволяет отображать архитектурные регистры на большее число физических, имеющихся в процессоре;
Станция-резервуар – буфер, содержащий команды, которые дешифрованы, но еще не выполнены;
Суперконвейерная организация – наличие более пяти ступеней и деление их на многоступенчатые операции, чтобы уменьшить сложность ступени. Идея заключается в сокращении числа логических операций, которые необходимо выполнить на каждой ступени конвейера, с тем, чтобы можно было быстро переходить со ступени на ступень и увеличивать тактовую частоту;
Суперскалярный процессор – процессор с двумя и более конвейерами, что позволяет выполнять более одной команды за один такт (в идеальных условиях);
Упорядоченное поступление, обработка и завершение – метод обработки команд, который в случае остановки или зависания одного конвейера, затрудняет, а то и останавливает обработку и прохождение команд по другому;
Четырехпотоковая (четырехканальная) суперскалярная архитектура – обработка четырех команд, поступающих в четыре конвейера (четыре результата за такт, опять же – в идеальных условиях).
А вот как называются различные блоки, которые можно встретить в современных процессорах:
AGU (Address Generation Unit) – блок генерации адреса;
BTB (Branch Target Buffer) – буфер перехода к целям;
BUI (Bus Interface Unit) – блок шинного интерфейса;
DCache (Data Cache) – кэш данных;
EU (Execution Unit) – исполнительный блок;
FEU (Floating Point EU) – блок исполнения операций с плавающей точкой;
ICache (Instruction Cache) – кэш инструкций;
ID (Instruction Decoder) – дешифратор команд;
IEU (Integer EU) – блок исполнения целочисленных операций;
IFU (Instruction Fetch Unit) – блок выборки команд;
IOFE (In-Order Front End) – входной блок упорядоченной обработки;
IOR (In-Orded Retirement) – конвейер ввода-вывода команд из последовательности;
JEU (Jump EU) – блок исполнения переходов;
MEM IF (MEMory InterFace) – интерфейс шины памяти;
MIS (Microcode Instruction Sequencer) – подобие ПЗУ, содержащее набор заранее запрограммированных последовательностей обычных операций;
MIU (Memory Interface Unit) – блок интерфейса памяти;
MOB (Memory Order Buffer) – буфер упорядочивания операций в памяти;
O2C (Out-of-Orded Core) – ядро блока исполнения с изменением последовательности;
RAT (Register Alias Table) – таблица переименования (псевдонимов) регистров;
RRF (Retirement Register File) – регистр возвращения данных;
ROB (ReOrder Buffer) – буфер переупорядочивания;
RS (Reservation Station) – станция резервирования;
UNIP (Next_IP Unit) – блок назначения индекса поиска.