Конвеер Р4

Курсовая сдавалась в декабре 2000г. в ОГУ, кафедра ПИ,

ВМКСС

Дополнение к  моей курсовой:

О конвеере Р4 более подробно (www.ixbt.ru)

 



Intel Willamette. Первый взгляд

1999 год стал не слишком удачным годом для Intel. И Direct RDRAM был воспринят индустрией без особого энтузиазма, и VIA более чем удачно сыграла со своим Apollo Pro133/133A. Что касается процессоров, то не все было гладко и здесь. AMD, наконец, смогла полностью использовать весь потенциал своих инженеров и предложить процессор, выводящий ее из рыночной ниши производителя недорогих процессоров уровня Low-End и чуть выше. Более того, ее Athlon, вышедший на полгода позже Pentium III, оказался весьма и весьма перспективным процессором в плане роста тактовой частоты. Предположительно, в конце 2000 года процессоры из этой линейки должны достигнуть уровня порядка 1.4 ГГц. И это в то время, когда последнее детище Intel, вышедшее этой осенью - Coppermine, оказалось куда менее разгоняемым и к концу года, предположительно, должно достигнуть скорости около лишь 1 ГГц. 

Что должен был сделать в такой ситуации Intel? Наверное, ускорить выход своего следующего x86 ядра, последнего IA32 ядра для пользователей - Willamette. Первоначально, срок выхода процессоров на этом ядре колебался где-то между концом 2000 года и началом 2001. Соответственно, первое появление образцов чипа ожидалось где-то ближе к лету. И вот, в январе неожиданно выясняется, что Intel уже получил на руки первый чип, а в апреле компания намерена начать поставку образцов своим особо приближенным партнерам. 

Тем временем приближался февраль - месяц двух крупных событий в мире процессоров, конференции ISSCC и форума разработчиков Intel - IDF. Одним из самых ожидаемых событий ISSCC была демонстрация 1 ГГц Willamette. Однако, ничего подобного не произошло - Intel продемонстрировал там всего лишь 1 ГГц Coppermine, опять уступив первенство AMD с ее 1.1 ГГц Athlon. Но зато как он отыгрался на IDF! Там компания, опять совершенно неожиданно, продемонстрировала Willamette, работающий на частоте 1.5 ГГц. Впечатляет, что и говорить. Интересно, изменится ли картина, если посмотреть на нее более пристально? 

Willamette должен стать первой за долгие годы серьезной переделкой архитектуры P6. Пожалуй, за последние пять лет, с момента выхода Pentium Pro, в этой области не происходило ничего более значительного: асимметричное ядро, с блоками, работающими на различных скоростях, значительно улучшенная версия суперскалярного механизма исполнения инструкций, новый кэш, отслеживающий порядок выполнения инструкций, переработанные блоки операций с мультимедиа данными и числами с плавающей запятой, огромный набор новых инструкций на все случаи жизни, совершенно новая 100 МГц шина, передающая по 4 пакета данных за такт, что дает нам результирующую частоту 400 МГц, конвейер выполнения инструкций из 20 шагов... Хватит? 

А теперь попробуем пройтись по пунктам. И начнем с того, что собственно позволило новому процессору Intel достичь столь высокой тактовой частоты - конвейера выполнения инструкций. Для начала учтем, один общепринятый факт - чем длиннее конвейер, тем легче наращивать тактовую частоту, но тем меньше производительности получается на каждый полученный мегагерц. И наоборот. Почему так? Потому что, чем на большее количество стадий рассчитан конвейер, тем меньше работы приходится на каждый отдельный такт, тем быстрее этот самый такт выполняется. Но! Допустим, у нас имеется простейший блок из нескольких, связанных друг с другом операций:

1) A=B+C

2) D=A+1

То есть, операция 1 будет находиться в кэше инструкций столько времени, сколько понадобится для выполнения операции 2. А она будет выполняться тем больше тактов, чем длиннее конвейер. А кстати, какой длины он у сегодняшних процессоров? Pentium III имеет конвейер длиной 12 (17 стадий FPU), Athlon - 10 стадий (15 стадий FPU), Alpha - 7 стадий (10 стадий FPU). Как видим на основании этих данных, Willamette является абсолютным чемпионом по длине конвейера, то есть, имеет самое меньшее время выполнения такта, позволяющее достичь максимальной тактовой частоты, но и самые большие задержки для связанных друг с другом операций (операции 2 придется ждать 20 тактов, пока не выполнится до конца операция 1). 



Впрочем, не все так просто. Во первых, в буфере всегда будет находиться некоторое количество инструкций, не требующих знания результата выполнения предыдущих (простейший пример: A=1+2). Их тоже можно начинать выполнять во время выполнения операции 1 (в сегодняшних процессорах находится несколько исполнительных модулей, умеющих работать параллельно), чтобы не было простоя во время ожидания, пока та пройдет весь конвейер и можно будет приступить к выполнению операции 2. 

Другой вопрос, что чем длиннее конвейер (и, соответственно, время выполнения инструкций), тем меньше вероятность, что в буфере удастся найти достаточно таких независимых инструкций, для того, чтобы полностью загрузить исполнительные модули во время ее выполнения операции 1. И здесь немаловажную роль имеет объем этого буфера. Для информации - у Pentium III он имеет объем 40 микроопераций, (одна x86 инструкция в среднем равна примерно полутора микрооперациям). У Willamette его объем, по утверждению Intel, должен значительно возрасти, результат очевиден. 

(Кстати, о кэше. Предполагаемый объем кэша первого уровня Willamette - 256 Кбайт, в 8 (!) раз больше, чем у Pentium III и в два раза больше, чем у Athlon. Объем кэша второго уровня неизвестен, но предполагается, что он будет менее 1 Мбайт - 512 Кбайт?). 

Во вторых, в действие вступает алгоритм предсказания переходов - чем длиннее конвейер, тем более важным становится предсказание того, выполнение какой инструкции понадобится, задолго до самого процесса ее выполнения. И, естественно, ошибка на этой стадии - выбор не той ветви, по которой пойдет процесс выполнения программы, будет весьма и весьма сказываться на производительности процессора. И она будет тем более критична, чем длиннее конвейер - одна ошибка в выборе исполняемых операций в самом начале, и пока досчитается весь конвейер, и выяснится, что считалось совсем не то... Intel пообещал в Willamette значительно повысить точность процесса предсказания переходов, "скомбинировав все доступные на сегодня схемы предсказаний". По некоторым сведениям, эффективность этого алгоритма в Willamette достигла 95 процентов. 

Одним из инструментов улучшения производительности в этой области, станет одна новинка - кэш с упорядочиванием инструкций. Его задачей будет являться хранение инструкций в том порядке, в каком они исполняются. То есть, если первая инструкция, находящаяся по адресу 100, выполняет переход на вторую инструкцию, находящуюся где-то по адресу, ну, скажем, 200, то в этом кэше вторая инструкция будет находиться именно в том порядке, как она исполняется - сразу непосредственно за первой, и т.д. В результате мы избавляемся от одного из скользких мест, где мог ошибиться алгоритм предсказания переходов. 

Еще один такой инструмент - Advanced Dynamic Execution. Так Intel называет улучшенную версию механизма суперскалярного внеочередного выполнения инструкций, когда процессор жонглирует инструкциями, нарушая их естественную последовательность, с целью более плотной загрузки исполнительных модулей - этот пункт тоже относится к издержкам применения длинного конвейера и призван минимизировать связанное с ним увеличение задержек выполнения инструкций. 

Это все, что касается конвейера Willamette. Этот фактор является весьма важным в определении производительности процессора, но не менее важным является и производительность модулей, непосредственно выполняющих те или иные операции - с целыми числами, с числами с плавающей запятой, со специфическими данными, когда одна инструкция оперирует сразу несколькими пакетами данных (SIMD). 

Здесь впечатления двойственные: что касается целочисленных операций, то здесь все в полном порядке: в Willamette блок целочисленных операций работает на удвоенной скорости относительно скорости процессора - то есть, в случае с показанным на IDF 1.5 ГГц чипом, скорость работы его целочисленных модулей составляла 3 ГГц! (Опять же, это результирующая частота - на самом деле скорость остается 1.5 ГГц, просто этот блок умеет выполнять вычисления не за полный такт, а за его половину. То есть, фактически его скорость удваивается). "Модулей" - поскольку их у Willamette два, соответственно, в самом идеальном случае получается 4 операции с целыми числами за один такт работы процессора. 

А вот что касается блока для операций с числами с плавающей запятой, то получившаяся здесь картина, похоже, не впечатлила даже сам Intel. Два таких модуля (против трех у Athlon) будут обеспечивать для 1.4 ГГц процессора пиковую производительность в операциях с плавающей запятой всего лишь 1.4 GFLOPS, поскольку реальную вычислительную работу выполняет только модуль - операции типа FADD, FMUL, и т.д., второй же занимается подсобной деятельностью - FMOVE, FSTORE. Здесь надо заметить, что для Athlon, если предположить, что к тому времени он будет иметь ту же тактовую частоту - 1.4 ГГц (а основания, в принципе, имеются), этот показатель будет равен 2.8 GFLOPS. 

В общем, Intel решил не связываться с x87 в своем новом процессоре, сосредоточив все внимание на блоке, предназначенном для работы с SIMD (Single instruction - multiple data) инструкциями - 64-бит инструкциями, рассчитанными на числа с плавающей запятой, и 128-бит целочисленными инструкциями. Таких модулей у Willamette также два, один для регистровых операций и один - для арифметических. За счет того, что это - SIMD, то в идеале возможны варианты, когда за один такт выполняется одна SIMD инструкция, состоящая из четырех операций. Итого: четыре операции, 1.4 ГГц - пиковая производительность Willamette в случае использования SIMD составляет 5.6 GFLOPS! Это напомню, против 2.8 GFLOPS x87 у 1.4 ГГц Athlon или же 5.6 GFLOPS в случае использования его SIMD блока, работающего с набором 3DNow!. 

Так что немудрено, что Intel будет всячески продвигать новый SIMD набор инструкций Wilamette (SSE2), как наилучший вариант для работы с операциями с плавающей точкой. 

В результате мы сталкиваемся с двумя возможными вариантами. 

Intel сможет убедить разработчиков программ использовать SSE2, набор, состоящий из 144 новых инструкций: 

76 совершенно новых, оперирующих с широким диапазоном данных (включая числа с плавающей запятой двойной точности и целые числа из 4 слов: и то, и то - 64 бит, если используются регистры XMM, и происходит упаковка данных, то речь идет уже о 128-бит числах), часть инструкций из этого набора позволяет программа брать на себя контроль над механизмами кэширования, загрузки и хранения данных в регистрах процессора. 

68 расширенных SIMD инструкций для работы с целыми числами. Если в Pentium II/III они работали только с 64-бит MMX регистрами, то в Willamette они уже смогут использовать 128 бит регистры XMM этого процессора. 

Если Intel это удастся, то Willamette в операциях с плавающей точкой для конца года будет выглядеть вполне солидно. 

Если же разработчики программного обеспечения не проявят большого энтузиазма и продолжат использовать старый добрый x87, то Willamette будет выглядеть на числах с плавающей точкой отнюдь не так блестяще, практически не отличаясь от Pentium III, работающего на той же тактовой частоте. 

При все возрастающей производительности процессоров и подсистемы памяти, увеличение скорости системной шины GTL+ за последний год всего лишь на 33 МГц выглядит не слишком впечатляюще. Да тут еще и появление новой платформы - IA64. В общем, с выходом Willamette Intel вводит новую системную шину, которая мало того, что должна значительно увеличить пропускную способность (тактовая частота 100 МГц, даже ниже, чем у сегодняшней 133 МГц GTL+, но за счет передачи 4 пакетов за такт, результирующая частота получается 400 МГц), она еще и должна стать связующим звеном между IA32 и IA64 - после Tehama, чипсета под Willamette, ее будет использовать i870 - чипсет, предназначенный как под IA32 Foster, так и под IA64 McKinley. 

Таким образом, плюсы новой шины: значительно выросшая пропускная способность - 3.2 Гбайт/с (400 МГц, 64 бит) против 1,064 Гбайт/с (400 МГц, 64-бит) у сегодняшней 133 МГц GTL+ (3.2 Гбайт/с - как раз ровно столько, сколько будет способен обеспечить двухканальный RDRAM, на который рассчитан Tehama) и некоторая перспективность в плане будущего. 

Минусы: 4 пакета данных за один такт - это здорово, но только в том случае, когда удастся их предоставить к моменту выполнения очередного такта. Иначе пропускная способность шины будет использоваться далеко не в полную меру. В общем, 3.2 Гбайт/с - это в самом идеальном случае. Второе - сегодняшние материнские платы для Willamette никоим образом не подходят. И даже не только за счет использования новой системной шины, но хотя бы за счет нового форм-фактора - Socket-462. Опять новая платформа, и никакие переходники здесь уже не помогут. 

Вот такие вот дела. Что мы имеем в результате? Мы имеем процессор, созданный в полном соответствии с принципом "покупают мегагерцы", оптимизированный именно под него, а не под максимальную производительность. В итоге, согласно предварительным данным, Willamette имеет производительность того же уровня, что и работающий на одной частоте с ним Coppermine. Или Athlon. Таким образом, увеличение производительности нового процессора будет связано исключительно с его увеличившейся скоростью.



Как предполагается, к концу года новые процессоры AMD подойдут примерно с той же скоростью, на которой Intel намерен выпустить Willamette. (И оба они будут требовать новые материнские платы). Как предполагается, производительность у них будет примерно одинаковой, то есть сегодняшнее состояние неустойчивого равновесия между Intel и AMD сохранится еще как минимум до начала 2001 года. 

А дальше? Willamette должен стать последним потребительским x86 процессором, то есть в 2001 году Intel начнет его оптимизацию для дальнейшего повышения скоростных показателей. И где-то в том районе в свет выйдет новый x86 процессор AMD - SledgeHammer (K8). Основываясь на сегодняшних знаниях, получается интересная картина - в следующем году Intel опять должен оказаться в роли догоняющего на рынке x86 процессоров среднего уровня. Если, конечно, этот рынок к тому времени будет заслуживать хоть каких-либо усилий.