Процессоры 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), некорректно завершают свою работу, в связи с чем их рейтинг их производительности в приведенной ниже таблице также отсутствует.
Таблица 1.1. SPECint CPU2000, Pentium Extreme Edition 965, 3.73 ГГц
Без опт. | -QxK | -QxW | -QxN | -QxB | -QxP | |
164.gzip | 1146 | 1257 | 1265 | 1267 | 1267 | 1259 |
175.vpr | — | 1224 | 1319 | 1309 | 1284 | 1302 |
176.gcc | — | 2133 | 2118 | 2141 | 2117 | 2144 |
181.mcf | 1923 | 1931 | 1928 | 2478 | 2473 | 2483 |
186.crafty | 1227 | 1256 | 1368 | 1373 | 1363 | 1365 |
197.parser | 1035 | 1032 | 1027 | 1031 | 1018 | 1035 |
252.eon | 1734 | 1757 | 2113 | 2321 | 2085 | 2322 |
253.perlbmk | 2053 | 1994 | 2001 | 1996 | 2017 | 2037 |
254.gap | 2153 | 2021 | 2093 | 2051 | 2081 | 2084 |
255.vortex | — | — | — | — | — | — |
256.bzip2 | 1482 | 1437 | 1418 | 1398 | 1395 | 1433 |
300.twolf | 1494 | 1836 | 1847 | 1864 | 1826 | 1871 |
SPECint_base2000 | 1536 | 1580 | 1634 | 1684 | 1660 | 1692 |
Таблица 1.2. SPECfp CPU2000, Pentium Extreme Edition 965, 3.73 ГГц
Без опт. | -QxK | -QxW | -QxN | -QxB | -QxP | |
168.wupwise | 1667 | 1654 | 1955 | 1885 | 1685 | 3229 |
171.swim | 2471 | 3150 | 3184 | 3185 | 3114 | 3189 |
172.mgrid | 1053 | 1277 | 1602 | 1736 | 1368 | 1736 |
173.applu | 1638 | 1585 | 1674 | 1791 | 1655 | 1808 |
177.mesa | 1369 | 1471 | 1673 | 1645 | 1533 | 1637 |
178.galgel | 1452 | 3308 | 3839 | 4012 | 3774 | 4039 |
179.art | 2783 | 2933 | 3238 | 3293 | 3122 | 5070 |
183.equake | 2409 | 2405 | 2464 | 2464 | 2383 | 2845 |
187.facerec | 1890 | 2317 | 2320 | 2323 | 2292 | 2368 |
188.ammp | 1282 | 1266 | 1402 | 1408 | 1263 | 1414 |
189.lucas | 2242 | 2124 | 2564 | 2609 | 2118 | 2566 |
191.fma3d | 1424 | 1420 | 1773 | 1821 | 1465 | 1776 |
200.sixtrack | 604 | 600 | 748 | 741 | 621 | 741 |
301.apsi | 1304 | 1326 | 1391 | 1402 | 1311 | 1404 |
SPECfp_base2000 | 1575 | 1751 | 1969 | 1998 | 1800 | 2163 |
Как и следовало ожидать, производительность как целочисленных задач, так и задач с вещественными числами в целом (по усредненным оценкам 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% в задачах с вещественными числами.