SPEC CPU2000. Часть 25: 65-нм двухъядерные процессоры Intel Pentium Extreme Edition 965 (Presler) и Intel Core Duo T2500 (Yonah)
Процессоры Intel, производимые по нормам нового 65-нм технологического процесса, были представлены в начале 2006 года в виде двухъядерных процессорных ядер Presler (микроархитектура NetBurst) и Yonah (микроархитектура «P6+»). С тех пор были достаточно подробно изучены как микроархитектурные аспекты этих процессорных ядер, так и проведены различные сравнительные тестирования процессоров Pentium D / Pentium Extreme Edition и Core Duo в различных приложениях. В настоящей статье мы изучим поведение этих процессоров (и представляемых ими процессорных ядер) в задачах тестового пакета SPEC CPU2000.
При компиляции задач будем использовать следующие версии компиляторов:
Intel(R) C++ Compiler for 32-bit applications, Version 9.0 Build 20050624Z Package ID: W_CC_C_9.0.024
Intel(R) Fortran Compiler for 32-bit applications, Version 9.0 Build 20050624Z Package ID: W_FC_C_9.0.024
Во всех случаях (различные варианты оптимизации кода) используем одинаковые общие ключи компиляции кода, отвечающие «двухпроходной» компиляции кода с оптимизацией по профилю приложения (profile-guided optimization, PGO):
PASS1_CFLAGS= -Qipo -O3 -Qprof_gen
PASS2_CFLAGS= -Qipo -O3 -Qprof_use
Процессор Intel Pentium Extreme Edition 965
Для начала, изучим производительность кода задач SPEC CPU2000 в чистом виде, т.е. в абсолютных величинах, при применении всех возможных вариантов оптимизации кода. Для этого используем «обычный» однопоточный вариант запуска тестов (метрику base).
Как и в наших предыдущих исследованиях процессоров с помощью тестов SPEC CPU2000 версии 1.3, в сводной таблице результатов отсутствуют показания для задачи 255.vortex, что связано, как было выявлено впоследствии, с ошибками в наборе входных данных для этой задачи в этой версии тестового пакета. Кроме того, «неоптимизированные» варианты задач 175.vpr и 176.gcc, как и во всех предыдущих исследованиях (включая более раннюю версию SPEC CPU2000 1.2), некорректно завершают свою работу, в связи с чем их рейтинг их производительности в приведенной ниже таблице также отсутствует.
Как и следовало ожидать, производительность как целочисленных задач, так и задач с вещественными числами в целом (по усредненным оценкам SPECint_base2000 и SPECfp_base2000) плавно возрастает в ряду «код без оптимизации» < -QxK (оптимизация для Pentium III/SSE) < -QxW (оптимизация для ранних Pentium 4 Willamette / SSE2) < -QxN (оптимизация для Pentium 4 Northwood / SSE2) < -QxP (оптимизация для Pentium 4 Prescott / SSE3). Несколько «посередине» находится лишь вариант -QxB (оптимизация для процессоров Pentium M), который в случае целочисленных тестов располагается между -QxW и -QxN, а в случае тестов с вещественными числами — между вариантами -QxK и -QxW. Таким образом, ничего необычного в случае запуска тестов SPEC CPU2000 на ядре Presler не произошло — наилучшим вариантом оптимизации кода оказывается вариант -QxP, «родной» для процессорных ядер Prescott и их последователей, к которым вполне относится и ядро Presler.
Изучим теперь величины, характеризующие производительность задач SPEC CPU2000 на процессоре Pentium Extreme Edition 965 относительно величин, полученных ранее на процессоре Pentium 4 670 (хотя и с более несколько ранними версиями компиляторов). Этот процессор наиболее близок к изучаемому по своим характеристикам (в частности, одинаковому объему L2-кэша в 2 МБ) и тактовой частоте (3.8 ГГц против 3.73 ГГц). Единственное ощутимое различие заключается в использовании более высокой частоты системной шины на платформе с процессором Pentium Extreme Edition 965 (266 МГц против 200 МГц у Pentium 4 670). Таким образом, следует ожидать, что задачи, наиболее чувствительные к пропускной способности памяти, получат дополнительное преимущество на Pentium Extreme Edition 965.
По целочисленным тестам SPEC CPU2000, Presler несколько проигрывает немного более высокочастотному Prescott лишь в задачах 186.crafty (до -2.6%), 252.eon (до -4.3%) и 300.twolf (до -2.8%). В большинстве остальных, независимо от варианта оптимизации кода, как правило, наблюдается незначительное преимущество. Исключение составляет задача 181.mcf, в которой достигается от 16.6 до 20.8% преимущества над ядром Prescott. По-видимому, здесь сказывается та самая увеличенная частота FSB (следовательно, увеличенная ПСП) на платформе Presler. Вместе с тем, эта отдельная задача вносит небольшой вклад в общую оценку производительности SPECint_base2000, поскольку по последней 65-нм ядро выигрывает у своего 90-нм аналога лишь незначительно (до 2.5%).
Среди тестов с вещественными числами, наименее однозначно ведет себя лишь задача 168.wupwise, показывая значительный разброс в относительных величинах скорости в зависимости от варианта оптимизации кода, причем как в положительную, так и в отрицательную стороны — от 10.8 до -20.3%. Остальные задачи ведут себя намного более предсказуемо и либо являются практически нечувствительными к выбору процессора (177.mesa и 200.sixtrack), либо получают ощутимое преимущество на Presler (наибольшее — у 171.swim и 179.art, до 24%). Выигрышным оказывается и общий рейтинг SPECfp_base2000 на процессорном ядре Presler, показывающим до 8.3% преимущества над Prescott, даже несмотря на несколько меньшую тактовую частоту. На этом показателе может сказываться как большая величина ПСП на платформе с процессором Pentium Extreme Edition 965, так и микроархитектурные особенности ядра Presler, вроде наличия аппаратной предвыборки данных на уровне L2-кэша процессора. Также можно предположить, что ядро Presler обладает лучшей производительностью при операциях с вещественными числами (причем как в случае x87-, так и SSE/SSE2/SSE3-кода) по сравнению с равночастотным, и даже несколько более высокочастотным ядром Prescott.
Поскольку процессор Pentium Extreme Edition 965 является двухъядерным, оценим теперь эффективность параллельного запуска нескольких копий задач SPEC CPU2000, используя для этой цели метрику «rate». При этом в качестве эталона будем использовать величины, полученные в этой метрике с количеством копий, равным 1, а в качестве основного измерения — с количеством копий, равным 4 (количеству логических ядер, присутствующих в данном процессоре).
Все целочисленные тесты получают прирост в скорости при использовании второго ядра и технологии Hyper-Threading. Из общей картины выпадает лишь 181.mcf, в которой наблюдается лишь 11-18% прироста. По-видимому, это связано с уже упомянутой выше требовательностью этой задачи к ПСП, поскольку переход к двум ядрам не сопровождается столь же кратным увеличением ПСП (ввиду общей для обоих ядер системной шины). В большинстве остальных задач наблюдается более чем 100% прирост в скорости, свидетельствующий об эффективности не только двухъядерности, но и технологии Hyper-Threading (т.к. теоретически максимальный прирост от использования второго ядра в данном случае составляет 100%). Наиболее отличаются в этом плане задачи 164.gzip и 256.bzip2. По интегральной оценке SPECint_rate2000, прирост в скорости от второго ядра также превышает 100% и составляет 104-108%.
Если рассмотренные выше целочисленные тесты все без исключения отличались приростом в скорости при переходе к «4-поточному» режиму тестирования, то среди задач с вещественными числами есть не только таковые, не демонстрирующие прироста (171.swim в большинстве вариантов), но и проигрывающие в скорости при запуске 4 копий (179.art, показывающая до 47% снижения производительности). Большинство остальных задач показывает значительный прирост в скорости, который в некоторых случаях также оказывается свыше 100% (200.sixtrack и 301.apsi). По интегральной оценке SPECfp_rate2000, «4-поточный» режим «rate» запуска теста на двухъядерном процессоре Pentium Extreme Edition 965 также оказывается выигрышным на 54-72% по сравнению с аналогичным «однопоточным» запуском.
Процессор Intel Core Duo T2500
Аналогично, начнем рассмотрение результатов с абсолютных показателей производительности тестов SPEC CPU2000.
Таблица 2.1. SPECint CPU2000, Core Duo T2500, 2.0 ГГц
Без опт.
-QxK
-QxW
-QxN
-QxB
-QxP
164.gzip
1005
1131
1136
1132
1141
1143
175.vpr
—
1274
1342
1327
1319
1342
176.gcc
—
1814
1816
1821
1826
1829
181.mcf
1384
1344
1343
1885
1881
1887
186.crafty
1290
1296
1475
1470
1493
1486
197.parser
974
974
961
968
971
968
252.eon
1713
1724
1855
1990
2022
1980
253.perlbmk
1611
1660
1665
1656
1707
1697
254.gap
1677
1558
1651
1650
1664
1663
255.vortex
—
—
—
—
—
—
256.bzip2
1270
1175
1180
1192
1214
1211
300.twolf
1687
2004
2036
2056
2033
2023
SPECint_base2000
1373
1418
1461
1517
1528
1526
Таблица 2.2. SPECfp CPU2000, Core Duo T2500, 2.0 ГГц
Без опт.
-QxK
-QxW
-QxN
-QxB
-QxP
168.wupwise
1278
1291
1258
1260
1338
1717
171.swim
1769
1977
1906
1906
1960
1906
172.mgrid
913
1221
1184
1195
1244
1194
173.applu
1035
1054
1004
1205
1196
1205
177.mesa
1217
1534
1605
1575
1558
1612
178.galgel
1723
2656
2651
3016
3086
3018
179.art
2692
2696
2817
2916
2940
2891
183.equake
1602
1589
1595
1589
1599
1700
187.facerec
1418
1691
1689
1683
1697
1645
188.ammp
909
896
886
869
886
896
189.lucas
1568
1477
1641
1676
1687
1672
191.fma3d
1047
1047
1150
1182
1117
1192
200.sixtrack
483
485
503
503
509
504
301.apsi
1058
1078
1052
1040
1064
1046
SPECfp_base2000
1242
1355
1369
1404
1420
1446
Благодаря реализации поддержки инструкций SSE3 в процессорном ядре Yonah оказывается возможным использовать вариант оптимизации кода -QxP, традиционно относящийся к процессорному ядру Prescott, изначально обладающему поддержкой вышеназванных инструкций. По непонятным причинам, подсчет итоговой оценки SPECint_base2000 на процессоре Core Duo T2500 в этом случае «не проходит» (несмотря на то, что в этой серии тестов и в предыдущей серии на Pentium Extreme Edition 965 использовался один и тот же бинарный код), поэтому соответствующая оценка была подсчитана вручную, как среднее геометрическое по результатам всех подтестов. Как видно, вариант -QxP в целочисленных задачах в среднем практически не уступает варианту -QxB, наиболее подходящему для всех предыдущих процессоров класса Pentium M. А в тестах с вещественными числами вариант -QxP и вовсе оказывается выигрышным по сравнению с -QxB и всеми остальными вариантами оптимизации кода. Эффективность последних как в целочисленных, так и вещественных тестах убывает в ряду -QxB > -QxN > -QxW > -QxK > «без оптимизации».
Для рассмотрения полученных результатов в относительных величинах в качестве образца сравнения выберем исследованный ранее процессор Intel Pentium M 770, также обладающий весьма близкими характеристиками с исследуемым процессором (частота ядра — 2.13 ГГц против 2.0 ГГц, объем L2-кэша — 2 МБ, являющийся полным объемом L2 у Pentium M и «эффективным» объемом L2 при использовании лишь одного из ядер процессора Core Duo).
По сравнению с Pentium M, большинство целочисленных задач SPEC CPU2000 либо не получают преимущества, либо несколько проигрывают в скорости на менее высокочастотном процессоре Core Duo. Исключение составляют уже известная по рассмотренному ранее процессору Pentium Extreme Edition 965 задача 181.mcf, получающая до 30.7% преимущества, очевидно, за счет более высокой пропускной способности процессорной шины и памяти на новой платформе, а также 254.gap (до 33.4% преимущества), не показывающая явного преимущества на Presler и, следовательно, в данном случае получающая прирост не только из-за более высокой ПСП. Тем не менее, общая оценка SPECint_base2000 в относительных величинах вновь является лишь незначительно более выигрышной (до 3.2%) на Core Duo 2.0 ГГц по сравнению с Pentium M 2.13 ГГц.
Значительно лучше выглядит ситуация в задачах с вещественными числами. Незначительный проигрыш, да и то не во всех вариантах оптимизации кода, наблюдается лишь в задачах 168.wupwise, 177.mesa, 188.ammp и 200.sixtrack. Остальные задачи демонстрируют явное преимущество на Core Duo, вплоть до феноменальных величин порядка 153%(!) в задаче 171.swim. Соответственно, интегральная оценка SPECfp_base2000 на Core Duo T2500 также оказывается на 29-36% более выигрышной по сравнению с более высокочастотным Pentium M 770. Таким образом, производительность ядра Yonah в задачах с вещественными числами оказывается заметно выше по сравнению с аналогичным (по тактовой частоте и объему L2-кэша) процессорным ядром Dothan. Аналогичный результат, но не со столь высокими числовыми показателями, наблюдался и выше, при сопоставлении процессорных ядер Presler и Prescott.
Поскольку процессор Core Duo также является двухъядерным, оценим напоследок эффективность параллельного запуска двух копий тестов SPEC CPU2000 в метрике «rate», сопоставив результаты с таковыми для «rate»-запуска одной копии тестов.
В целочисленных задачах «из ряда вон выходящей» вновь является 181.mcf, демонстрирующая в данном случае не только отсутствие прироста, но и некоторое снижение производительности при запуске двух копий. Причину этого явления понять достаточно легко — очевидно, эта задача не только является требовательной к ПСП, но и оперирует сравнительно большими объемами данных, так что больший размер L2-кэша способствует увеличению ее производительности. А поскольку при «двухпоточном» запуске каждое из ядер в первом приближении получает лишь половину общего объема L2-кэша, наблюдается снижение ее производительности. Несмотря на уменьшение объема L2-кэша в пересчете на ядро, все остальные задачи получают ощутимое преимущество при переходе к «двухъядерному» режиму теста. Наименьшее преимущество наблюдается в задаче 300.twolf и составляет 36-45%, наибольшее — в задаче 252.eon и приближается к теоретическому максимуму в 100%. По интегральной оценке SPECint_rate2000, прирост в скорости в двухъядерном режиме в среднем составляет 67-70%.
Задачи с вещественными числами в целом демонстрируют не менее удачную картину. За исключением 179.art, для которой параллельный запуск скорее вредит, чем помогает делу (напомним, то же самое наблюдалось и на процессорном ядре Presler), задачи с вещественными числами показывают неплохой прирост в скорости, в ряде случаев весьма близко приближающийся к теоретическому максимуму. Тем не менее, по интегральной оценке SPECfp_rate2000 выигрыш в целом в этом классе задач оказывается несколько меньшим и составляет 48-53%.
Заключение
Исследованные 65-нм процессорные ядра Presler (на примере процессора Pentium Extreme Edition 965) и Yonah (на примере процессора Core Duo T2500) в целочисленных тестах SPEC CPU2000 показали результат, как минимум немного превосходящий таковой для предыдущих поколений процессорных ядер — Prescott и Dothan, соответственно, при условии равенства объема L2-кэша и некоторой форы по тактовой частоте в пользу 90-нм ядер. В тестах SPEC CPU2000 с вещественными числами процессорное ядро Presler показывает несколько большее по сравнению с целочисленными задачами (до 8% в SPECfp_base2000), а ядро Yonah — и вовсе значительное (до 36% в SPECfp_base2000) преимущество по сравнению с процессорными ядрами Prescott и Dothan, соответственно.
Исследования эффективности параллельного запуска задач в метрике «rate» показали, что большинство тестовых задач SPEC CPU2000, не требовательных к объему L2-кэша и пропускной способности памяти, способны показать ощутимый прирост в производительности при запуске нескольких копий приложения, равных количеству системных процессоров (4 — в случае Pentium Extreme Edition 965, 2 — в случае Core Duo T2500). Вследствие дополнительного использования технологии Hyper-Threading, этот прирост составляет 104-108% для целочисленных задач и 54-72% для задач с вещественными числами на Presler, тогда как абсолютные показатели прироста на ядре Yonah составляют 67-70% в целочисленных задачах и 48-53% в задачах с вещественными числами.