интересности

Объявления

Интересное

Конвертики с яблоками и корицей

Каждое время года имеет не только свои особые приметы, цвета и отличительные черты, но и свои

Подробнее...

Ореховый торт

Для приготовления теста необходимо взять:

Подробнее...

Управление временем и АБВГД

Расстановка приоритетов, является очень эффективным способом управления временем.

Подробнее...

Формирование первого впечатления

90% представлений о собеседнике формируются в первые 90 секунд.

Подробнее...

Литотерапия

Могущественная природная сила камней, которая успешно практикуется в гомеопатии.

Подробнее...

Эврика! Открытие фотосинтеза

Представьте себе, что вы жили в древние времена и хотели бы ответить на некоторые жизненные вопросы: как мы сюда попали? Что там за огни в небе ночью? Зачем мне какашки?

Подробнее...

Петер Штумпф, оборотень в Бедбурге

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

Подробнее...

Происхождения цветов пояса в боевых искусствах

Белый, желтый, оранжевый, зеленый, синий, фиолетовый и черный, цвета поясов в боевых искусствах обозначающие развитие учащихся их навыков и опыта.

Подробнее...

Телевизор, пиво и покурить

В 1946 году был 10-дюймовый, черно-белый RCA-телевизор стоимостью $400. Сегодня это примерно $4500, на эти деньги можно приобрести несколько очень больших телевизоров с плоским экраном и Blu-ray проигрыватели.

Подробнее...

Взрывная история фейерверков

Четвертого июля, в канун Нового Года, и множество других торжеств по всему миру принято взрывать фейерверки. Но многие ли знают как они появились?

Подробнее...

Полезное

Функциональные особенности упругой муфты, как части механизма электротали.

Упругая (эластичная) муфта для тельфера выполняет функцию сцепления валов планетарного редуктора и электродвигателя тали.

Подробнее...

Выбор футбольных мячей и наборов для бадминтона

Выбор качественного спортивного инвентаря имеет большое практическое значение.

Подробнее...

Пептиды - польза для организма

Человеческий организм представляет собой своеобразный механизм, который работает сложено (потому что в организме все взаимосвязано).

Подробнее...

Дрожжевые оладьи

Оладьи и блинчики частые гости на нашем столе.

Подробнее...

Сырники

Сырники на сковороде одно из моих любимых лакомств.

Подробнее...

Котлеты из свиного фарша

Котлетки мы все делаем из разного мяса: куриного, свиного, говяжьего… Фарш можно купить готовый, и это упростит процесс приготовления котлет.

Подробнее...

Худеем быстро.Диета для икр ног

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

Подробнее...

Правильный рацион при занятии спортом

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

Подробнее...

Как правильно хранить бананы дома

Часто случается, что купленные вами бананы не успевают быть употребленным и портятся. Лично я терпеть не могу даже малейшую черноту в бананах. Они относятся к скоропортящимся продуктам, поэтому правильное хранение очень важно.

Подробнее...

Делаем сахарные волосы быстро и просто

Подробнее...

Статьи

Виан сервис: Универсальная компания по всем строительным работам

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

Подробнее...

Достойная старость

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

Подробнее...

Карнизы для дома: Качественные и самые лучшие

Самые качественные карнизы в Москве представлены в нашем магазине.

Подробнее...

Новая электронная сигарета: Теперь еще больше дыма

Если вам нравиться употреблять электронные сигареты и получать от этого эстетические удовольствие, то в таком случае вам необходимо приобрести устройство smy sdna 200w tc.

Подробнее...

Семейная фотосессия – воплощение мечты и приключение для семьи

Рассматривая старые фотографии, мы всегда восхищаемся их особой привлекательностью.

Подробнее...

Мертвое море для живого организма

Размеры Мертвого моря совсем не впечатляют по сравнению с другими.

Подробнее...

Таиланд - не забудьте индикатор

Что только не найдёшь на рынках Пхукета, Поттаи или Паттонга!

Подробнее...

Солнце над льдами

Гренландия - остров, территория которого на 85 процентов покрыта льдом.

Подробнее...

В Индонезии начнется развитие туризма для мусульман

Индонезия - это одна из наиболее популярных стран, в которых очень любят бывать российские туристы.

Подробнее...

Великая река Китая – Янцзы

Янцзы - одна из крупнейших рек в мире, третья после Нила и Амазонки

Подробнее...

Реклама

Немного о мифах в связи с 64 битными процессорами

Совсем скорое появление 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) – блок назначения индекса поиска.


Смотрите также: