SPEC CPU2000. Часть 26: Инженерный образец процессора Intel Core 2 Duo E6700 (Conroe), компиляторы Intel C++/Fortran 9.1


Несмотря на то, что десктопные процессоры семейства Intel Core 2 с ядром «Conroe» на сегодняшний день по-прежнему представлены исключительно инженерными образцами, их производительность и микроархитектурные особенности исследованы уже достаточно хорошо с помощью различных синтетических тестов и реальных приложений. Самое время дополнить эту картину результатами тестирования производительности указанных процессоров (на примере инженерного образца процессора Intel Core 2 Duo E6700 с тактовой частотой 2.66 ГГц) в тестовом пакете SPEC CPU2000. Тем более что совсем недавно вышла новая версия компиляторов Intel C++/Fortran Compiler 9.1, в которой добавлена оптимизация кода под процессоры семейства Intel Core 2 (пока что не совсем официально :) — так, например, поставляемая с компиляторами документация умалчивает по этому поводу).

Итак, мы перекомпилировали задачи тестового пакета SPEC CPU2000 с помощью следующих версий компиляторов:

  • Intel(R) C++ Compiler for 32-bit applications, Version 9.1 Build 20060323Z Package ID: W_CC_P_9.1.022
  • Intel(R) Fortran Compiler for 32-bit applications, Version 9.1 Build 20060323Z Package ID: W_FC_C_9.1.024

Во всех случаях (различные варианты оптимизации кода) использовались одинаковые общие ключи компиляции кода, соответствующие «двухпроходной» компиляции кода с оптимизацией по профилю приложения (profile-guided optimization, PGO):

PASS1_CFLAGS= -Qipo -O3 -Qprof_gen
PASS2_CFLAGS= -Qipo -O3 -Qprof_use

Процессор Intel Core 2 E6700 (Engineering sample)

Как обычно, сначала изучим производительность кода задач SPEC CPU2000 в чистом виде, т.е. в абсолютных величинах, при применении всех возможных вариантов оптимизации кода, включая новый специфический вариант для процессоров Intel Core 2. Для этого используем «обычный» однопоточный вариант запуска тестов (метрику base).

Уже после нашего предыдущего исследования 65-нм процессоров, основанных на ядрах Presler и Yonah, нами была выявлена причина неработоспособности задачи 255.vortex — она заключалась в наличии ошибок в наборе входных данных для этой задачи в этой версии тестового пакета. В настоящем исследовании эта ошибка была устранена замещением набора входных данных на таковой из предыдущей версии SPEC CPU2000 1.2, так что результаты измерения производительности этой задачи также присутствуют в приведенной ниже таблице. Тем не менее, «неоптимизированные» варианты задач 175.vpr и 176.gcc, как и во всех предыдущих исследованиях (включая таковые с применением более ранней версией SPEC CPU2000 1.2), некорректно завершают свою работу, в связи с чем рейтинг их производительности в приведенной ниже таблице по-прежнему отсутствует.

  Без опт. -QxK -QxW -QxN -QxB -QxP -QxT
164.gzip 1461 1644 1656 1637 1647 1646 1645
175.vpr 1980 2075 2076 2097 2136 2083
176.gcc 3064 3084 3089 3068 3097 3089
181.mcf 3952 3611 3620 4846 4877 4863 4869
186.crafty 2123 2145 2467 2470 2450 2438 2465
197.parser 1509 1515 1484 1509 1500 1514 1512
252.eon 2700 2956 3410 3442 3251 3430 3313
253.perlbmk 2951 2984 2975 3009 3014 2991 2999
254.gap 2696 2691 2838 2854 2833 2834 2832
255.vortex 4419 4318 4456 4301 4311 4522 4548
256.bzip2 2259 2152 2057 2104 2052 2076 2081
300.twolf 2356 2821 2904 2878 2844 3012 3017
SPECint_base2000 2495 2542 2626 2694 2672 2715 2706

Легко заметить, что в приведенных выше таблицах появился новый вариант оптимизации кода «-QxT». Также легко догадаться, что соответствует он именно процессорам семейства Intel Core 2, хотя и имеет не совсем очевидное буквенное обозначение. Учитывая, что все предыдущие варианты оптимизации кода основывались на кодовых названиях соответствующих процессорных ядер (Katmai, Willamette, Northwood, Banias, Prescott), для процессоров семейства Core 2 (ядра Conroe) было бы разумно ожидать опцию «-QxC». Тем не менее, новая опция записывается именно как «-QxT», что, предположительно, отвечает так и не увидевшему свет процессорному ядру «Tejas».

Как бы там ни было, рассмотрим полученные результаты как таковые. По интегральной оценке целочисленных задач SPECint_base2000 они располагаются следующим образом: «без оптимизации» < -QxK < -QxW < -QxB < -QxN < -QxT < -QxP. Отметим следующие особенности: лучшим вариантом оптимизации, пусть и с небольшим перевесом, все-таки является вариант «-QxP», который все же не следует воспринимать буквально как «вариант оптимизации кода под процессорное ядро Prescott». Так, последняя версия документации гласит, что применение опции -QxP приводит к созданию кода, оптимизированного под процессоры Intel Core Duo, Intel Core Solo и Intel Pentium 4 с поддержкой SSE3, а также всех «совместимых процессоров Intel» с поддержкой вышеназванных инструкций. Иными словами, оптимизация проводится именно под указанные наборы инструкций, а не конкретную процессорную микроархитектуру. В этом ключе, наилучшие результаты с опцией -QxP на процессорах Intel Core Duo и Intel Core 2 неудивительны. А что касается последних — будем надеяться, что будущие ревизии компиляторов 9.1 все же смогут «вытянуть максимум» на данных процессорах именно с «родной» для них опцией -QxT. Вторая характерная особенность полученных результатов заключается в том, что (на этот раз — специфический) вариант оптимизации кода под процессорное ядро Banias (-QxB) также оказывается несколько хуже по сравнению с неспецифическим вариантом оптимизации кода под процессоры с набором инструкций SSE2 (-QxN). Т.е. рассмотренная выше картина (-QxP vs. -QxT) здесь в точности повторяется.

  Без опт. -QxK -QxW -QxN -QxB -QxP -QxT
168.wupwise 3709 3514 3790 4408 4134 4499 4487
171.swim 2763 3189 3227 3227 3224 3225 3207
172.mgrid 1330 1682 1756 1763 1722 1763 1762
173.applu 1558 1642 1685 2186 2037 2195 2193
177.mesa 1758 2479 2602 2604 2284 2614 2466
178.galgel 2521 4587 5557 6341 5769 6365 6075
179.art 7465 8341 8455 8460 8421 7679 7682
183.equake 2636 2595 2647 2645 2609 3051 3037
187.facerec 2194 2723 2745 2717 2692 2768 2772
188.ammp 1794 1794 1944 1918 1844 1934 1840
189.lucas 2450 2393 2903 2847 2440 2847 2867
191.fma3d 1637 1639 2106 2124 1835 2100 2135
200.sixtrack 696 678 1061 1043 661 1034 1055
301.apsi 1600 1597 1683 1730 1731 1695 1685
SPECfp_base2000 2101 2351 2610 2710 2486 2722 2697

Перейдем к результатам измерения производительности задач SPEC CPU2000 с вещественными числами. По усредненной оценке SPECfp_base2000 результаты здесь располагаются несколько иным образом: «без оптимизации» < -QxK < -QxB < -QxW < -QxT < -QxN < -QxP. Однако общая тенденция сохраняется, причем оказывается еще больше выраженной: «родной» вариант -QxT оказывается хуже как наилучшего варианта -QxP, так и варианта оптимизации под SSE2 для «новых» процессоров (Northwood и выше) -QxN. А вариант специфической оптимизации кода под процессорное ядро Banias (-QxB) оказывается хуже как неспецифического варианта -QxN, так и «старой» версии неспецифического варианта оптимизации под SSE2 -QxW. Таким образом, дорабатывать компиляторы Intel C++/Fortran для осуществления более тщательной оптимизации под процессоры семейства Intel Core 2 явно стоит. А пока можно ограничиться лучшим вариантом -QxP, тем более что сравнивать результаты производительности Core 2 Duo E6700 с результатами тестирования других процессоров по варианту -QxT пока что не представляется возможным.

Сопоставление с Intel Pentium Extreme Edition 965

После некоторых размышлений, полученные выше результаты измерений было решено сравнивать с результатами тестирования именно вышеназванного процессора. Дело в том, что, несмотря на значительное различие в микроархитектурах данных процессоров и их тактовых частотах, показатели производительности задач набора SPEC CPU2000 на процессоре Intel Pentium Extreme Edition 965 оказываются… наименее отстающими от результатов, полученных в настоящем тестировании!

Итак, целочисленные тесты SPEC CPU2000. Все без исключения задачи показывают явное преимущество на процессоре Intel Core 2 Duo, несмотря на значительно меньшую тактовую частоту (2.66 ГГц против 3.73 ГГц, т.е. в 1.4 раза меньше). Минимальное преимущество наблюдается в задаче 164.gzip (28-31%), максимальное (87-105%) — в задаче 181.mcf. Значительного разброса в относительных величинах, соответствующих разным вариантам оптимизации кода, практически не наблюдается. Особенно четко это видно по усредненному результату SPECint_base2000 — он очень четко попадает в интервал 54-55%. Если учесть разницу в тактовых частотах, преимущество новой микроархитектуры Intel Core над NetBurst в целочисленных задачах SPEC CPU2000 оказывается более чем двухкратным! (2.17 раз, чтобы быть точным).

Тесты с вещественными числами показывают менее однозначную, но в целом все равно выигрышную картину преимущества Conroe над Presler. Здесь можно отметить большую зависимость результатов от применяемого варианта оптимизации кода и задачи, практически не получающие преимущества на Intel Core 2 (например, 171.swim). Интересный результат показывают задачи 168.wupwise и, в особенности, 179.art, достигающие до 145% и 184% преимущества, соответственно. Что характерно, наименьшее преимущество в этих задачах наблюдается с вариантом -QxP, что, возможно, все-таки говорит о большей эффективности применения этого варианта на процессорных ядрах микроархитектуры NetBurst с поддержкой расширений SSE3. В интегральной оценке SPECfp_base2000 этот вариант получает наименьшее преимущество на Intel Core 2 — порядка 26%, тогда как остальные варианты показывают от 33 до 38% преимущества. Если снова учесть различие в тактовых частотах сопоставляемых процессоров, преимущество микроархитектуры Intel Core над NetBurst в задачах SPEC CPU2000 с вещественными числами также оказывается почти двухкратным (до 1.93 раз).

Эффективность «двухъядерного» исполнения

Напоследок, поскольку процессор Intel Core 2 Duo E6700 является двухъядерным, оценим эффективность параллельного запуска двух копий задач SPEC CPU2000, используя для этой цели метрику «rate». При этом в качестве эталона будем использовать величины, полученные в этой метрике с количеством копий, равным 1.

Эффективность параллельного запуска двух копий целочисленных задач оказывается весьма высокой практически во всех случаях, за исключением задачи 181.mcf. По нашим предыдущим исследованиям, эта задача не отличается высокой эффективностью «распараллеливания» и на других двухъядерных процессорах, таких как Intel Pentium Extreme Edition (Presler) и Intel Core Duo (Yonah). В нашем предыдущем исследовании, в частности посвященном процессорному ядру Yonah, мы сделали предположение, что столь низкая эффективность параллельного исполнения этой задачи связана с уменьшением доступного объема L2-кэша в пересчете на одно ядро (в данном случае — с 4 МБ до 2 МБ) при высокой требовательности данной задачи к пропускной способности кэша/памяти. Тем не менее, важно отметить, что на процессоре Intel Core 2 Duo (Conroe) эта задача все же отличается более высокой эффективностью при «параллельном» запуске по сравнению с таковым на процессоре Intel Core Duo (Yonah). По крайней мере, в большинстве вариантов оптимизации кода относительный результат оказывается неотрицательным. По-видимому, сказывается значительно больший суммарный объем L2-кэша процессора (4 МБ против 2 МБ у Yonah). Разумно также предположить, что именно больший объем L2-кэша оказывает положительное влияние и на относительные результаты, полученные во всех остальных задачах, которые оказываются лучшими по сравнению с полученными ранее на Yonah. Так, усредненный результат по SPECint_rate2000 показывает 78-82% прироста при запуске двух копий целочисленных задач SPEC CPU2000 на Conroe, тогда как на Yonah в этих условиях наблюдается лишь 67-70% прироста.

Заметно лучшая картина, по сравнению с Yonah, наблюдается и в задачах SPEC CPU2000 с вещественными числами. Во-первых, здесь совершенно отсутствуют результаты «отрицательного прироста» (что наблюдалось на процессорном ядре Yonah, например, в задаче 179.art). Во-вторых, общая эффективность параллельного запуска двух копий задач также оказывается выше в большинстве случаев. По усредненной оценке SPECfp_rate2000, прирост в скорости при запуске двух копий задач на Conroe составляет 54-63%, что также выше по сравнению с результатом, достигнутым на Yonah (48-53%).

Заключение

По результатам тестирования производительности задач тестового пакета SPEC CPU2000 новый процессор Intel Core 2 Duo E6700, представленный инженерным образцом, на сегодняшний день не имеет себе равных. По сравнению с предыдущим рекордсменом в виде Intel Pentium Extreme Edition 965, новый процессор показывает примерно 55% преимущества в целочисленных задачах и 26-38% преимущества в задачах с вещественными числами. Если учесть соотношение частот сравниваемых процессоров, преимущество новой микроархитектуры Intel Core над устаревающей NetBurst оказывается более чем двухкратным в первом случае, и почти двухкратным — во втором. Новый процессор также отличается весьма высокой эффективностью исполнения двух копий задач SPEC CPU2000, которая оказывается ощутимо выше по сравнению с таковой, в данном случае, на его ближайшем аналоге — процессоре Intel Core Duo.

Исследования доступных на сегодняшний момент ревизий компиляторов Intel C++/Fortran 9.1 показали, что наилучшим вариантом оптимизации кода под процессоры семейства Intel Core 2 пока что по-прежнему является вариант -QxP, соответствующий процессорным ядрам Yonah и Prescott (Smithfield, Presler), поддерживающим  инструкции SSE3. Новый, специфический вариант оптимизации кода -QxT под процессоры семейства Intel Core 2 с поддержкой SSE4, пока что немного уступает ему в производительности задач SPEC CPU2000 и, очевидно, требует дальнейших усовершенствований рассматриваемых компиляторов.




Дополнительно

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.