Уже давным-давно, в прошлом столетии, высокопроизводительные персональные компьютеры получили повсеместное распространение. Собственно, высокопроизводительными они были только на момент выпуска, очень скоро новые системы, превращались в устаревшее, мало пригодное для современных программ железо, нужное разве что скупщикам БУ.
С другой стороны, производительность процессоров в новых персональных компьютерах значительно превышала мощность дорогостоящих рабочих станций и суперкомпьютеров прошлого. Последнее десятилетие было во многом особенным в развитии вычислительной техники, нарастание скорости процессоров шло высокими темпами, не останавливаясь ни на минуту. Причём, увеличение производительности сопровождалось постоянным снижением стоимости готовых решений.
Производительность процессоров стала такой большой, что многие программы стали производить безо всякой оглядки на производительность, всё равно скорость новых систем превысит мыслимые потребности. Проще подождать слегка более новых процессоров, чем заниматься оптимизацией быстродействия.
Достаточно часто возникает вопрос - во сколько именно раз самый современный процессор быстрее самого быстрого процессора вчерашнего дня? К сожалению, обзоры на популярных Интернет-ресурсах, посвящённых компьютерному "железу", не могут дать исчерпывающий ответ на этот вопрос. С течением времени состав набора тестов менялся, одни тесты постепенно заменялись другими. Выходили новые приложения и игры, новые версии и патчи и навряд ли вы найдёте даже одно неизменное по прошествии лет приложение.
Есть и другие трудности, часто критичные к производительности приложения оптимизируются в расчёте на современную им архитектуру процессоров и на более ранних менее производительных процессорах они выполняются не оптимальным образом, так как всё равно не рассчитаны на работы на медленных процессорах. Таким образом, сравнительная производительность старых процессоров получается заниженной по отношению к новым на тот момент. С другой стороны, оптимизированные под старую архитектуру приложения могут не так быстро выполняться на процессорах новых поколений. Они и не знают о новых наборах инструкций и других возможностях, появившихся в новых процессорах.
Таким образом, сравнить скорость старых и новых процессоров не просто, даже если вы благодаря Машине времени, смогли раздобыть все необходимые системы разных лет, и запустить на них один и тот же набор тестов производительности.
Что же делать? Как измерить соотношение скоростей различных поколений процессоров? Мы воспользуемся набором тестов Spec.
Это более-менее признанный в индустрии межплатформенный набор тестов производительности процессора, чипсета и памяти. В какой-то мере и операционной системы. В чём его суть и почему он - межплатформенный?
Входящие в тест программы изначально даны в исходных текстах на языках программирования высокого уровня и не привязаны ни к какой-то определённой процессорной архитектуре, ни к операционной системе. Для тестирования некой системы её производитель выбирает самую лучшую операционную систему и самый лучший оптимизирующий компилятор. Набор исходных текстов тестовых приложений компилируется в расчёте на конкретный процессор со всем возможными оптимизациями. Таким образом, один и тот же набор задач используется для тестирования совершенно разных систем, так, что бы все системы были в равных условиях.
Можно, конечно? отметить, что это не совсем чистый процессорный тест. Качество, в первую очередь, компилятора имеет большое значение. Если реализовывать задачи в ручную с применением ассемблера, то могут получиться совсем другие результаты. Но использование ассемблера и трудоёмкой ручной оптимизации оправдано только в отдельных случаях, хотя и важных. В большинстве же случаев это не выгодно, так что процессор без хорошего компилятора не очень ценен. Или если процессорная архитектура пусть в принципе производительна, но трудна с точки зрения создания компилятора с автоматической оптимизацией программ под данную архитектуру, это тоже не так хорошо.
Таким образом, идея тестов Spec имеет право на существование, хотя нельзя её абсолютизировать. Кстати, ещё один недостаток такого подхода заключается в постепенной потери актуальности задач из неменяющегося тестового набора. Как кто-то пошутил, Spec - это тестирование завтрашних компьютеров на вчерашних задачах. Но это, собственно, нам и надо для нашего исследования производительности различных поколений процессоров. Мы используем результаты тестов из Spec2000 и Spec95. Собственно, Spec2000 создан в 2000 году и не менялся до сих пор, он охватывает все современные процессоры. Spec95 идёт где-то с 95 года и оценивает уже почти что древние процессоры, но, тем не менее, воспоминания о них вполне свежи в нашем сознании.
Для сравнения производительности процессоров, измеренной Spec95, с производительность систем, определённой на основе Spec2000, мы введём условные передаточные коэффициенты между Spec2000 и Spec95 на основе результатов процессоров, которые попали в пересечение времени существования двух тестов. И для которых, таким образом, есть результаты измерения в обоих тестовых наборах. Поскольку нам нужно довольно примерно сравнить производительность, то такой подход сгодится.
Да, использование результатов, опубликованных на сайте Spec.org, разрешено только честным образом в соответствии с принципами честного использования результатов тестов Spec, которые сформулированы здесь. Мы будем использовать данные тестов честным образом.
В состав тестового набора Spec2000 входит 26 приложений, они довольно условно разбиты на две группы Spec Int - программы, выполняющие целочисленные операции - и Spec FP - программы, интенсивно использующие вычисления с вещественными числами.
Выберем теперь для исследования несколько процессоров разных лет. На сайте этой организации по оценке производительности есть великое множество результатов тестирования процессоров, но не все. Некоторые процессоры производители не желают тестировать и публиковать их результаты, например, для новых Celeron данные так просто не найти. То ли по причине их крайне низкой производительности, то ли наоборот, слишком высокой. Наверное, официальное объяснение заключается в том, что Celeron не предназначен для задач, включённых в Spec, это задачи, в основном, научно-технического свойства, а не непосредственно потребительские. К ознакомлению списка тестовых приложений мы ещё перейдём, а пока выберем процессоры.
Многих амдешных процессоров тоже нет, AMD вообще некоторое время игнорировало Spec и она не принимала особого участия в заготовке тестов. До введения AMD набора инструкций SSE2 процессоры Athlon не показывали высокие результаты, поскольку в тестах, в основном, используются вещественные числа с двойной точностью, с которыми и работает этот набор инструкций.
Итак, начнём с Pentium100. Это будет отправной точкой для сравнительной производительности. Далее, популярный Pentium166MMX, мощный для своего времени PentiumII 350, PentiumII 450, Pentium III 450 на легендарном чипсете BX, Pentium III 500, классический Pentium III 800EB, он же разогнанный по шине Pentium III 600E, процессор из времени расцвета AMD Athlon 900, поздний Pentium III 1100, модифицированный Pentium III 1400 и самый первый Pentium 4 1300 с RDRAM.
Один из последних простых Athlon 1200, Athlon XP 1600+, продолжатель дела Pentium III процессор Pentium M 1000, устоявшийся Pentium4 2000A, Athlon XP 2200+, самый прогрессивный в своё время Pentium4 2400C, и, напоследок, Athlon XP 3200+, Pentium4 3200E Prescott и ускоренная редакция Athlon 64 процессор AthlonFX-51.
Процессор | КЭШ инструкций первого уровня | КЭШ данных первого уровня | КЭШ второго уровня | Материнская плата / модель | Память | Версия компилятора (Intel compiler) |
Pentium 100 | 8KB | 8KB | 512KB (burst) | (XPS) | 64MB EDO | 2.3 |
Pentium 166MMX | 16KB | 16KB | 512KB | LT430TX | 64MB SDRAM | 2.3 |
Pentium II 350 | 16KB | 16KB | 512KB | Intel SE440BX2 | 128MB PC100 SDRAM | 4.0 |
Pentium II 450 | 16KB | 16KB | 512KB | Intel SE440BX2 | 128MB PC100 SDRAM | 4.0 |
Pentium III 450 | 16KB | 16KB | 512KB | Intel SE440BX2 | 2x256MB PC100 SDRAM | 5.0 |
Pentium III 500 | 16KB | 16KB | 512KB | Intel SE440BX2 | 2x256MB PC100 SDRAM | 5.0 |
Pentium III 800EB | 16KB | 16KB | 256KB | Intel D815EEA2 | 2x128MB PC133 SDRAM cl2 | 5.0 |
Athlon 900 | 64KB | 64KB | 512KB, 300MHz | Asus K7V-RM w/ Via KX-133 |
256MB PC-133 SDRAM cl2 | 4.0 |
Pentium III 1100 | 16KB | 16KB | 256KB | Intel D815EEA2 | 2x128MB PC133 SDRAM cl2 | 5.0 |
Athlon 1200 | 64KB | 64KB | 256KB | Gigabyte GA-7DX | 2x256MB PC2100 DDR cl2 | 5.0 |
Pentium III 1400 | 16KB | 16KB | 512KB | (PowerEdge1500SC) | 1024MB SDRAM | 5.0 |
Pentium M 1000 | 32KB | 32KB | 1024KB | (ProLiant BL10e G2) | 2x512MB PC2100 DDR | 7.0 |
Pentium 4 1300 | 12Kmicro-ops | 8KB | 256KB | (Precision WorkStation 330) | 2x128MB PC800 ECC RDRAM | 5.0 |
Athlon XP 1600+ | 64KB | 64KB | 256KB | Gigabyte GA-7DX | 2x128MB PC2100 DDR cl2 | 5.0 |
Pentium4 2000A | 12Kmicro-ops | 8KB | 512KB | (Precision WorkStation 340) | 2x128MB PC800 ECC RDRAM | 5.0 |
Athlon XP 2200+ | 64KB | 64KB | 256KB | Epox 8KHA+ | 2x256MB PC2100 DDR cl2 | 5.0 |
Pentium4 2400C | 12Kmicro-ops | 8KB | 512KB | (Precision Workstation 360) | 4x512MB ECC DDR400 | 7.1 |
Athlon XP 3200+ | 64KB | 64KB | 512KB | ASUS A7N8X | 2x256MB PC3200 DDR cl2 | 7.0 |
Pentium4 3200E | 12kmicro-ops | 16KB | 1024KB | Intel D875PBZ | 2x512MB PC3200 DDR cl3-3-3 | 8.0 |
Athlon FX-51 | 64KB | 64KB | 1024KB | ASUS SK8N | 2x512MB PC3200 DDR cl2.5, ECC Registered | 7.0 |
Необходимо отметить, что важным параметром является не только размер КЭШа, но и скорость его работы. Например, первые Pentium III имели КЭШ объёмом 512KB, но он работал на половинной частоте процессора. Далее Pentium III получили КЭШ размером 256KB, но на полной частоте. У первых же Pentium КЭШ второго уровня вообще располагался отдельно от кристалла.
Поскольку тут присутствуют процессоры, протестированные различными версиями Spec, приведём в первую очередь относительные результаты по сравнению с индексом производительности Pentium100. Однако, следует помнить, что приведённые на spec.org данные тестирования производителями своих процессоров могут быть меньше максимально возможных. По многим причинам, например, Intel любит тестировать процессоры на своих собственных материнских платах, не имеющих агрессивной настройки на производительность. И тайминги памяти тоже не самые быстрые устанавливаются.
AMD, в свою очередь, использует для компиляции тестов, как правило, Intel Compiler, но не самую последнею версию, поскольку самая последняя на тот момент ещё не стала общедоступной. Так что результаты могут иметь погрешность до 5-10% процентов, но для примерной оценки соотношения производительности это значения не имеет. В некоторых случаях тестировались компьютеры класса рабочая станция с использованием памяти с коррекцией ошибок, что так же несколько снижало результаты. И со временем для старых процессоров могли появляться новые более производительные чипсеты и типы памяти.
В ниже приведённой таблице собранны данные тестов Spec Int 2000 и Spec FP 2000, а так же среднее значение, по отношению к показателю процессора Pentium100, и, для справки, абсолютные значения тестов. Результаты, отмеченные * получены путём экстраполяции значений Spec 2000 на более старые процессы при помощи сравнения результатов Spec 95.
Athlon 900 примерно в десять раз быстрее Pentium100, а Athlon XP 1600+ в десять раз быстрее Pentium166 MMX. Pentium III 500 в шесть раз быстрее Pentium100, а Pentium3200, в свою очередь, более чем в шесть раз быстрее Pentium III 500. Athlon FX-51 в четыре раза быстрее Athlon 900. Самый последний Pentium4 почти в три раза быстрее самого первого.
Видно, что архитектура Pentium II была существенно более продвинута и по производительности, и по частоте, чем первые Pentium, и только самые новые Pentium4 опережают младшие модели Pentium II в десять раз. Pentium III 800EB всего в четыре раза проигрывает самым современным моделям. А Pentium4 2000 уже почти в два раза медленнее самых новых процессоров.
Итак, со времён Pentium100 производительность процессоров для персональных компьютеров увеличилась примерно в сорок раз. За десять лет с 1995 по 2004 года каждый год производительность увеличивалась в среднем в 1.44 раза, то есть, удваивалась каждые два года. Рост производительности, кстати, даже несколько опередил рост частоты процессоров. Причём, не только для процессоров AMD, последние процессоры которой имеют частоту 2.2-2.4 GHz, но и для Intel. Pentium4 3200 имеет частоту в 32 раза больше, чем Pentium100, а работает он примерно в 40 раз производительней.
Возможно, тут свою роль так же сыграло улучшение качества компиляторов. Но всё же увеличение частоты в целом было главной и основной причиной роста производительности. Производители процессоров в первую очередь стремились обеспечить масштабирование производительности по частоте, уменьшить ограничения, связанные с памятью и т.п.
Сплошной линией показана сглаженная линия результатов Spec, вокруг которой колеблются текущие результаты. Чётко виден экспоненциальный характер роста производительности. Заметно, что в некоторые периоды времени показатель Spec Int увеличивался быстрее, чем Spec FP, и наоборот. К рассмотрению специфики Spec Int и Spec FP мы вскоре и перейдём.
Так или иначе, последние десять лет мы могли наслаждаться бурным экспоненциальным ростом быстродействия настольных компьютеров. И конца этому не было видно.
Средний рост производительности, это хорошо, но, может быть, производительность не всех приложений так замечательно возрастает вместе с появлением новых процессоров? Spec выдаёт не только общую среднюю оценку производительности, есть возможность посмотреть расклад по отдельным приложениям, входящим в состав тестового набора. Так что рассмотрим, как масштабировалась производительность отдельных приложений, входящих в набор тестов Spec2000. Не для всех из приведённых выше процессоров есть результаты Spec2000, ограничимся процессорами, начиная с Pentium III.
Приведём краткое описание приложений, входящих в Spec2000.
Spec Int | ||
Название теста | Язык программирования | Описание |
gzip | C | Архивация и разархивация в популярном формате zip |
vpr | C | Программа автоматического дизайна микросхем FCPGA, оптимального расположения логических блоков. |
gcc | C | Компилятор для языка программирования С |
mcf | Программа, оптимизирующая работу транспортной сети с использованием математических комбинаторных методов. | |
crafty | C | Шахматная программа |
parser | C | Программа синтаксического анализа текстов, определения грамматической структуры приложений. |
eon | C++ | Реалистичная компьютерная визуализация с использованием вероятностной модификации метода трассировки лучей. |
perlbmk | C | Выполнение perl-программ и скриптов по, работе с электронной почтой и математическим вычислениям. |
gap | C | Математическая программа для работы с конечными математическими структурами (группами, полями и т.п.) |
vortex | C | Работа с объектно-ориентированной базой данных. Vortex расшифровывается как Virtual Object Runtime EXpository. |
bzip2 | C | Другой метод сжатия данных. |
twolf | C | Программа автоматизированного расположения блоков транзисторов на литографическом фотошаблоне, используемым для изготовления микросхем. |
Spec FP | ||
Название теста | Язык программирования | Описание |
wupwise | Fortran 77 | Решение квантовых уравнений |
swim | Fortran 77 | Решение уравнений, описывающих движение слоя воды |
mgrid | Fortran 77 | Решение уравнений трёх мерного потенциального поля. Mgrid расшифровывается Multi grid solver - многосеточный решатель. |
applu | Fortran 77 | Программа для решения параболических и эллиптических уравнений в частных производных |
mesa | C | Библиотека для работы с трёх мерной графикой |
galgel | Fortran 90 | Решение уравнений, описывающих динамику жидкостей |
art | C | Программа для распознавания образов с помощью нейронных сетей |
equake | C | Расчёт распространения сейсмических волн на различных ландшафтах |
facerec | Fortran 90 | Программа для распознавания лиц |
ammp | C | Решение химических уравнений, моделирование больших биологических систем молекул. |
lucas | Fortran 90 | Проверка чисел на простоту |
fma3d | Fortran 90 | Расчёт прочности конструкций |
sixtrack | Fortran 77 | Расчёт высоко энергетического ускорителя элементарных частиц |
apsi | Fortran 77 | Метеорологическая программа расчёта распространения загрязнений в среде |
Более подробное описание приложений можно найти на сайте.
Рассмотрим теперь степень роста производительности по отдельным приложениям.
Итак, практически все отдельные тесты показали хорошую масштабируемость. Некоторые, даже очень. Для Pentium 4 3200E это компиляция (gcc), математическая программа для работы с числовыми структурами (gap) и объектно-ориентированная база данных (vortex).
Что именно послужило причиной сверх линейного роста производительности, точно сказать сложно. Возможно, увеличившийся в современных процессорах размер КЭШа, то есть, большинство данных программы уже помещается в сверх быструю КЭШ память. Или же сыграло роль улучшение качества компиляторов.
Относительно плохо масштабируется лишь архивация больших объёмов данных (bzip2). Видимо, в данном случае, замедление вызвано отставанием роста скорости работы памяти от процессоров.
У процессоров AMD почему-то расчёт транспортной сети (mcf) плохо масштабируется. Судя по его результатам на различных процессорах, противный mcf очень критичен ко всему, в том числе, и к частоте, которая у процессоров AMD последнее время не росла.
Глядя на таблицу, можно увидеть интересные вещи. Например, в некоторых тестах Pentium III 1400 был быстрее Pentium 4 2000A. Например, в архивировании, несмотря на общее превосходство Pentium 4.
Процессоры AMD Athlon могли успешно соперничать в соответствии со своим рейтингом с процессорами Pentium4 даже с RDRAM до появления варианта "C" c 800MHz шиной, технологией HT и двухканальной памятью DDR400.
Процессор Pentium M вообще чемпион по соотношению производительность/частота. Идёт почти как Pentium 4 вдвое большей частоты.
После того, как процессоры перешагнули гигагерцовый рубеж, производительность по отдельным приложениям всё-таки начала разбалтываться относительно средней, чего не скажешь о более ранних процессорах. И некоторые процессоры получались сбалансированными, в том смысле, что прирост производительности отдельных приложений был близок к среднему, а некоторые - не очень. Процессоры Pentium 4 и Athlon XP до того, как вышли самые новые Pentium 4 Prescott и Athlon 64, были не очень сбалансированными. Производительность относительно старых процессоров сильно колебалась от приложения к приложению. Разброс мог достигать двух раз. Причём, за счёт провалов в производительности, а не за счёт всплесков.
Хотя, конечно это условное понятие сбалансированности относительно Pentium III, можно считать, что это они были не сбалансированными относительно новых процессоров. Таким образом, просто различные архитектуры по-разному проявляли себя на различных приложениях. Не смотря на примерное равенство по среднему показателю, в отдельных тестах разница производительности различных типов процессоров могла запросто колебаться плюс минус 50%.
Перейдём теперь к рассмотрению другой половины тестов, условно отнесённых к операциям с вещественными числами. Посмотрим, будет ли разброс результатов Spec FP аналогичен Spec Int.
Видно, что в целом приложения Spec FP относительно лучше выполняются на современных процессорах. Pentium 4 2400C во столько же раз быстрее Pentium III 500 в Spec FP, во сколько Pentium 4 3200E быстрее в Spec Int. Это объясняется характером приложений, входящих в группу FP. Они в целом осуществляют более регулярный доступ к памяти, то есть, память лучше кэшируется различными схемами предварительного кэширования и т.п. Это позволяет современным улучшенным процессорным ядрам проявить себя во всю мощь.
Другой немаловажный момент заключается в эффективном использовании во многих расчётных задачах, входящих в Spec FP, SIMD расширения SSE2. Это позволяет сверх линейно поднять производительность относительно соотношения частот.
Однако, разброс прироста производительности в этой группе тестов несколько больше. Рассмотрим Pentium 4 3200E Prescott, как самый производительный в этом наборе процессор. Прирост по отношению к младшему Pentium III колеблется от 5,2 и 5,3 в случаях соответственно art (распознавание образов) и amp (химические уравнения) до 10,7, 10,4 и, даже, 12,7 в тестах wupwise, galgel и equake. Эти три теста соответствуют решению математических уравнений, и, очень вероятно, в том числе и оптимизация вычислений при помощи SSE2 даёт такой прирост.
Кстати, процессоры без SSE2 в этом наборе тестов вообще не котируются. Все они показали гораздо более плохие результаты, чем в Spec Int. Если там младший Pentium4 проигрывал всем подряд, и малочастотным Pentium III и Athlon, то в данном случае он уже опережает всех своих предшественников. А о высокочастотных Pentium4 и говорить нечего.
Ещё относительно плохо, ниже среднего, масштабируются тесты messa - графическая библиотека, и apsi - метеорологическая программа. Но, всё равно, не меньше соотношения частот.
Интересные вещи можно наблюдать в более древней части таблицы. Процессор Pentium III 1100 неожиданно оказался медленнее, чем Pentium III 800. Дело в том, что частота шины у второго процессора составляет 133MHz, что гораздо выше, чем 100MHz шины Pentium III 1100. А частота шины очень важна для Pentium III, поскольку его ядро может выполнять много операций за такт и, таким образом, очень прожорливо. Это особенно интересно, если помнить, что Pentium III 800EB легко получался из Pentium III 600E разгоном по шине. Кстати, этот процессор за счёт архитектурных улучшений, той же шины, в некоторых тестах почти в два раза опережал Pentium III 500. Так вот и набегает сверх линейный прирост.
Собственно, довольно успешный и в этом тесте процессор Pentium M являет собой развитый Pentium III, с увеличенными КЭШами всех уровней, и имеющий широкую шину в 400MHz.
Имеющий память DDR, но это не главное, обычный Athlon значительно опережает обычные же Pentium III. Преимущество в некоторых вычислительных задачах достигает разов. Дело в новом для того времени многоконвейерном ядре Athlon против одноконвейерного ядра Pentium III. Только сильно улучшенный Pentium III 1400 на модифицированном ядре с большими кэшами и продвинутым механизмом предварительной выборки данных смог с ним соперничать.
Итак, мы окинули взором развитие процессоров для персональных компьютеров за последнее десятилетие и убедились, что производительность процессоров росла гигантскими темпами, нарастала, как сходящий с горы снежный ком. И это ещё при некотором удешевлении компьютеров. Сейчас кажется, что производительность почти что некуда девать, не вспомним ли мы в будущем с большой ностальгией настоящий период времени?