7 лет назад 9 марта 2017 в 1:23 4871

Продолжение. Начало в номерах 789 и 790.

…Тем временем «трешка» уже успела сойти с пьедестала. «Приставка» «80» навсегда пропала из названий интеловских процессоров, так как закон запретил регистрировать торговые марки, состоящие только из цифр, — уникальных номеров на всех не хватало.         

Новый флагманский процессор платформы х86 обзавелся особенностями, с тех пор характерными для всех последующих CPU. Самой важной из них стала полностью конвейеризированная архитектура. Суть ее вот в чем. Инструкция, исполняемая процессором, проходит несколько этапов обработки от прочтения из памяти до записи в память результатов вычислений, причем, находясь на разных этапах, процессор может одновременно обрабатывать несколько инструкций. 386-му и более ранним чипам, двигая инструкции по конвейеру, приходилось заниматься каждым этапом отдельно за несколько тактов. «Четверка» научилась уделять внимание всем шагам конвейера одновременно — представьте, что вместо одного человека, последовательно занимающегося различными этапами сборки ряда автомобилей, к ленте встали несколько. В результате за каждый такт i486 мог исполнять по одной инструкции и в большинстве случаев сохранял этот темп, примерно в два раза превосходя i386 количеством операций при равной частоте. Да и в частоте он тоже хорошо прибавил.

Впервые появилось такое понятие, как множитель CPU. Существовали модели с одинарным, двойным и тройным множителем, достигавшие частот в 66 МГц для массовых процессоров и 100 МГц — для самых дорогих. Частота шины у всех была равной 33 МГц, хотя у самых бюджетных вариантов она понижалась вплоть до 16 МГц и, в виде исключения, для модели i486DX-50 повышалась до 50 МГц.

Кроме того, процессор i486 имел математический сопроцессор, причем значительно усовершенствованный по сравнению с девайсами х87-й серии и обзавелся кэш-памятью объемом 8 Кбайт. Для желающих сэкономить выпускались варианты i486SX без встроенного FPU, а также мобильный процессор i486SL-NM. Все «четверки» предназначались для установки в специальные разъемы — сокеты, тоже впервые появившиеся в «мире х86».

Компания AMD не могла остаться в стороне от такого грандиозного успеха. Но надеяться на удачу больше было нельзя. Очередной суд пересмотрел прежнее решение относительно Аm287 в пользу Intel. AMD оказалась под дамокловым мечом возможнох проблем с новым процем: что будет, если такая же история произойдет с будущим Аm486? Ответственные лица собрались думать думу, и придумали правильный выход: разработать свой микрокод, при этом сохранив совместимость с интеловским процессором. Стремясь сэкономить время и деньги, микрокод начали не создавать с нуля, а писать на основе кода от i386, хотя официальные лица AMD отрицают этот факт.

Пока создавался код, в 1993 году суд вновь стал на сторону AMD, признав в ходе очередного разбирательства ее притязания на микрокод i287; компания тут же выпустила на рынок готовый Аm486 с интеловским кодом! И хотя права на «трешку» ее тут же лишили, AMD не показала обиды, потому как рассчитывала на успех Аm486. В то же время компания тайно наняла специалиста для создания хотя бы простейшего по-настоящему независимого кода для 486-го, и это доказывает версию о том, что код уже продающихся Аm486 был не совсем чист. А так как на него уже было потрачено достаточно усилий, 4 июля 1994 года, в День независимости, AMD запланировала начать продажу процессоров с собственной прошивкой. И еще до заветной даты Intel, видимо без особых надежд, снова стала судиться — за оба процессора, включая чип с «независимым» микрокодом.

Остановить релиз это уже не могло, и после его выхода у AMD с удивлением спрашивали: как же удалось так быстро создать полностью независимую архитектуру? И «пиджаки» из AMD с гордостью рассказывали, как команда лучших инженеров, сидя в изолированном пространстве на хлебе и воде, 24 часа в сутки писала микрокод. Однако вскоре выяснилось, что из 3300 строк пресловутого кода 600-700 линий чудесным образом совпадают с кодом интеловской «трешки». Тогда AMD не осталось ничего другого, кроме как свалить вину на несчастных запертых инженеров: они, мол, перестукиваясь через стенку со стеклянной банкой у уха, тайно прознали запретные данные. Но, несмотря на то что «проштрафившихся» спецов, конечно, замучили в застенках, это не могло удержать акции компании от падения в цене на 10,8%.

Однако непрерывный лицензионный скандал между конкурентами уже близился к разрешению и закончился неожиданным хеппи-эндом. 30 декабря 1994 года Верховный суд Калифорнии отказал AMD в возможности использования микрокода i386, и компании тут же заключили соглашение, давшее AMD право на производство и продажу процессоров с микрокодом «двушки», «трешки» и «четверки», использование набора инструкций х86 и всех его будущих расширений с единственным условием — AMD должна выплачивать Intel лицензионные отчисления за каждый такой камень, выпущенный на продажу. Наступили мир и благодать. А про смерть инженеров я наврал.

Как и в прошлый раз, у AMD получился отличный клон. Кстати, на рынке существовало несколько вариаций на тему i486, выпускаемых другими компаниями, например Cyrix. И если AMD все-таки имела кое-какие права на х86, то Cyrix никогда не озадачивалась лицензированием, всецело полагаясь на скрупулезный реверс-инжиниринг чужих чипов. Intel нещадно билась с ней в судах, но, как и в случае с AMD, проиграла и вместо продолжения разборок разрешила дело полюбовно, позволив Cyrix клепать свои клоны на фабриках, имевших лицензию Intel. Что интересно, в 1997 году Cyrix сама судилась с Intel по поводу технологий, примененных в Pentium Pro и Pentium II. Дело снова затянулось на годы и также закончилось братским целованием с полным обменом патентами.

Но вернемся к нашим основным героям. Так вот, в отличие от подпольных клонов Cyrix, продукт AMD по быстродействию шел ноздря в ноздрю с родными интеловскими процессорами, но был не в пример дешевле, а со временем приобрел дополнительные энергосберегающие технологии и 16 Кбайт кэша write-back (процессор при записи данных в такой кэш не спешит сразу копировать их в оперативную память и делает это только в момент обращения к ним, тем самым в ряде случаев повышая производительность).

Как и следовало ожидать, камень Аm586 стал лебединой песней архитектуры 486. Это была специальная версия «четверки» с множителем 4х, работавшая на частоте 133 МГц. По скорости она оказалась вполне способна конкурировать с младшими моделями «Пентиумов», за что и получила, задолго до всяких Athlon ХР, рейтинг производительности, как у Pentium 75.

Но, несмотря на всю привлекательность новенькой 5×86 (пятая инкарнация архитектуры х86, или Аm586) как легкого и дешевого апгрейда, по планете уже шагали первые и даже вторые плоды новой архитектуры — Р5, или Pentium, которая принесла в парадигму х86 очередные революционные изменения, четко разделившие историю на «до» и «после». Самым важным завоеванием прогресса стала суперскалярная архитектура, до тех пор характерная только для процессоров RISC. Pentium вместо одного конвейера получил два, хотя и не равных по возможностям: конвейер U мог исполнять любые инструкции, в то время как конвейер V — только ограниченный набор простых инструкций. FPU процессора, имевший свой конвейер, независимый от обоих целочисленных, дополнительно увеличивал параллельность вычислений. К тому же этот блок пережил весьма значительные оптимизации, давшие десятикратное преимущество в скорости по сравнению с FPU 486-х чипов.

Серьезные изменения претерпела и работа с памятью. Во-первых, увеличился кэш процессора — до 8 Кбайт для данных и 8 Кбайт для кода. Во-вторых, в два раза, до 64 бит, расширилась шина памяти, хотя регистры и вычислительные блоки догнали ее только через много лет.

Кроме того, обращение к памяти тоже стало конвейеризированным, позволяя одновременно исполнять два цикла шины. Наконец, Pentium научился предсказывать ветвление кода программы и заранее выбирать нужные инструкции, а также приобрел целый ряд функций отладки и выявления ошибок. В итоге производительность чипа по сравнению с Intel 486 равной частоты едва ли не удвоилась.

Но это не значит, что судьба Pentium сразу оказалась гладкой. Первые версии процессоров вышли в 1993 году по техпроцессу 0,8 мкм и состояли из 3,1 миллиона транзисторов. Это были чипы, известные своей механической хрупкостью и, как ни смешно это звучит сейчас, высоким тепловыделением. В следующем варианте архитектуры техпроцесс сжался до 0,6 мкм, а частота увеличилась с начальных 60-66 МГц до 120. Тогда же внутренняя частота ядра Pentium отделилась от с трудом повышаемой частоты системной шины, и процессор переехал из стартовой кроватки Socket 4 сначала в Socket 5, а затем в широко известный Socket 7, заодно сменив электрический паек с 5 на 3 В. В это же время набиравшие популярность «Пентиумы» поразил роковой баг: оказалось, что FPU содержал ошибку, в ряде случаев приводившую к снижению точности операций деления. Большинство пользователей никогда не столкнулись бы с ней, поэтому в новой ревизии чипа Intel быстро исправила косяк, но о самом его наличии предпочла умолчать. Тем временем правда вскрылась, и в Intel ушел соответствующий bug-report, который производитель проигнорировал. Тогда сведения появились в интернете и проникли в айтишную прессу, причем каждый желающий мог проверить справедливость обвинений с помощью стандартного калькулятора Windows. Но, даже признав ошибку, Intel согласилась менять процессоры только тем людям, которые сумели доказать, что баг имеет для них значение. Однако покупателей дорогих процессоров приводил в негодование уже сам факт наличия в них ошибки, а безответственная реакция Intel только еще больше разожгла пламя скандала. Статья на эту тему вышла в самой New York Times, и совместные усилия общественности, подкрепленными такими влиятельными компаниями, как IBM, в конце концов заставили Intel безвозмездно обменять все забагованные чипы, что влетело ей в 500 миллионов долларов убытка. Но, как ни странно, заваруха возымела и положительный эффект. Впервые эта компания, хоть и весьма успешная, но известная в основном лишь в пределах своей индустрии, оказалась на слуху у большинства обывателей, и неважно, что говорились о ней не самые лестные слова, — как известно, любое упоминание о знаменитостях хорошо, кроме разве что некролога. С тех пор Intel обратилась лицом к конечному пользователю и уделяет большое внимание public relations.

В 1995 году Pentium пережил свое очередное воплощение. Новая ревизия чипа производилась по техпроцессу 0,35 мкм и со временем позволила покорить частоты вплоть до 200 МГц. В это же время Pentium снизошел до старых систем с Socket 2 и 3. Для этого ему пришлось пережить серьезные модификации, и 64-битная шина памяти пошла под нож. В качестве компенсации предлагался только увеличенный до 32 Кбайт кэш. Апгрейд на Pentium OverDrive должен был происходить максимально просто: к керамической подложке чипа были приделаны и кулер, и собственный регулятор питания. Тем не менее, не с каждой материнской платой заветный чип мог найти консенсус, а производительность при скромных частотах в 63 и 83 МГц в большинстве случаев уступала как обыкновенным 486DX4, так и перекачанным 5×86, и это при весьма немаленькой цене. Финальная метаморфоза Pentium произошла в 1997 году, когда появился набор мультимедийных SIMD-инструкций ММХ. Кроме получения этой ценной новинки Pentium ММХ прибавил в размере кэша — до 32 Кбайт — и достиг частот вплоть до 300 МГц для мобильных вариантов. Настольные камни ограничились 233 МГц.

Последним версиям Pentium пришлось сосуществовать с другой ветвью архитектуры х86 — Р6. Ее первой ласточкой стали процессоры Pentium Pro. Внешний вид этих камушков был очень респектабельный — они выпускались с огромной прямоугольной керамической подложкой и золотистым теплораспределителем. Это делалось неспроста: Pentium Pro компоновался из двух чипов (а то и из трех), один из которых был полностью отведен под кэш-память второго уровня. Стартовав в 1995 году с 256 Кбайт кэша L2, Pentium Pro со временем сменил техпроцесс с 0,6 на 0,35 мкм и добрался до 1 Мбайт кэша (тут и пригодился третий чип). Технологии того времени не могли интегрировать такой объем в ядро процессора, и даже на кэше первого уровня пришлось экономить, ограничив его 16 Кбайт. Но разделение на два кристалла не помогало поддерживать высокий процент выхода годных чипов — они припаивались на подложку на ранних этапах производства, и если при тестировании выявлялся брак, то на свалку отправлялась вся конструкция. Между тем отдельный кэш нисколько не снижал производительность, т. к. работал на частоте ядра CPU и общался с ним через специальную шину (внешний кэш L2 на материнских платах делил с оперативной памятью шину FSB). К тому же он поддерживал выполнение до четырех запросов за раз.

Однако не одном в кэше счастье, хотя он и сам по себе уже давал Pentium Pro ощутимое преимущество над предшественниками. Более важно то, что Р6 привнес в старую добрую архитектуру х86 очередной набор качеств, характерных для RISC-систем. По сути, Pentium Pro изменил ей и стал RISC-процессором, сохранив лишь внешнюю совместимость сх86, — все инструкции набора х86 после выборки перекодировались им в более простые RISC-подобные микрооперации. Внутреннее устройство камня с выпуском Pentium Pro стало еще более сложным, и громоздкий код CISC перестал ему удовлетворять.

Конвейер Pentium Pro удлинился с 5 до целых 14 стадий и оброс дополнительной обслуживающей логикой для максимального снижения простоев — появилась возможность спекулятивного и внеочередного (out-of-order) выполнения инструкций. Идея спекулятивного исполнения состоит в том, чтобы, когда в коде встречается инструкция условного перехода, предугадать (на основе хроники переходов, состоявшихся ранее), по какой ветке пойдет программа, и, не дожидаясь подтверждения, начать засылать в конвейер новые инструкции. Похожий процесс происходит и при внеочередном исполнении: пока некая инструкция застревает в ожидании данных из памяти или результатов выполнения другой инструкции, конвейер заполняется следующими инструкциямииз программы, пропущенными вперед. Изначальная последовательность инструкций затем восстанавливается, и данные записываются в память в том порядке, какой предусмотрен софтиной.

В свою очередь, внеочередное исполнение притянуло за собой еще одно необходимое нововведение — переименование регистров. Устанавливались следующие правила: нельзя пропускать вперед инструкцию А, если она собирается записать данные в тот же регистр, что и предшествующая В, — получится ошибка; но так можно делать, если сначала переименовать регистр, используемый инструкцией А. Наконец, Pentium Pro получил еще несколько бонусов: количество целочисленных вычислительных блоков удвоилось по сравнению с двумя у Pentium, а 36-битная физическая адресация памяти позволила преодолеть предел в 4 Гбайт оперативной памяти, хотя линейно доступное адресное пространство все равно не увеличилось. В итоге Pentium Pro при одинаковой частоте с «просто «Пентиумом» был быстрее в полтора раза, хотя и не мог похвастаться сверхвысокими частотами, за два года прогресса достигнув лишь 200 МГц.

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

Продолжение следует…

 

 

Архитектуры семейства CISC и RISC

В чем, собственно, между ними разница, и что вообще означают эти буквы? Это две основные парадигмы проектирования центральных процессоров, главное различие между которыми заключается в наборах инструкций. Направление CISC возникло вслед за языком «Ассемблер», команды которого один в один соответствуют машинным инструкциям и, по сути, нужны лишь для удобства восприятия человеком — в самые дремучие времена программировали непосредственно в машинных кодах. Впоследствии появились языки высокого уровня, в которых сложные ассемблерные конструкции представлены гораздо более краткими и легкими для понимания структурами. Но, пока программистам был доступен лишь голый ассемблер и другие низкоуровневые языки, для простоты написания кода отдельные команды старались сделать как можно более информативными и универсальными, вместо того чтобы городить заборы из множества «мелких» команд, отчего и произошла аббревиатура CISC — Complex Instruction Set Computer.

Надо признать, что на вершине своего развития такой подход позволил ассемблерному коду достигнуть не меньшей выразительности, чем коду языков высокого уровня. Однако далось это ценой значительного усложнения внутреннего устройства CPU, ибо процессор CISC обязан аппаратно выполнять комплексные вычисления и операции с памятью, которые запросто можно разложить на более простые компоненты. Даже декодировать такие инструкции оказалось сложно, ибо они были самого разного размера и структуры. В результате классические архитектуры CISC со временем пришли к кризису. Сложность устройств затормозила рост частот, а некоторые особо громоздкие инструкции стало практически нецелесообразно воплощать в железе. В процессорах появились специальные декодеры, разбивавшие их на ряд простых операций, причем в некоторых случаях декодированный код исполнялся даже медленнее, чем та же последовательность команд, записанная вручную. При этом оказалось, что универсальность CISC уже не используется в полной мере, так как даже программисту, пишущему софт на ассемблере, зачастую не требуется добрая часть инструкций, а компиляторам языков высокого уровня они и подавно не нужны.

Поэтому альтернативный подход изначально создавался с расчетом на компиляторы. Разработчики новой архитектуры выбросили из разросшегося набора инструкций весь мусор и оставили минимум необходимых операций. Скажем, все хитроумные манипуляции с памятью, возможные в рамках CISC, свелись к двум инструкциям — Load и Store. Под нож пошли сложные инструкции типа вычисления тригонометрических функций. Некоторые особо ретивые реформаторы попытались изгнать даже аппаратное умножение и деление (в самом деле можно ведь обойтись плюсом и минусом). Но в массовое производство такой минимализм не пошел, в отличие от остальных живительных нововведений, принесенных архитектурой RISC — Reduced Instruction Set Computer: упрощения дизайна микросхем, позволяющего тратить транзисторный бюджет на дополнительные блоки CPU, такие как регистры общего назначения, и возросшей частоты. Однако нельзя сказать, что архитектура RISC сама по себе обеспечивает прорыв в повышении производительности: быстрота выполнения инструкций хорошо уравновешивается их небольшой информативностью и размером программ. Во всей полноте она проявляет себя только в конвейеризированных чипах, для которых малопригоден разнородный и нерегулярный код CISC.

 Себастиан Роше

Один комментарий. Можете что-то добавить?

Решил собраться с мыслями. Ни одна мысль на собрание не пришла… ((