SPECcpu2006 — новая редакция тестов производительности компьютерных систем

Демократия — плохая штука, но лучше человечество пока не придумало. Распространяя это высказывание Черчилля на тесты производительности, можно было бы сказать: тесты SPECcpu, несомненно, плохи, но универсальных тестов лучше их ИТ-сообщество пока не предложило. Правда, раз в несколько лет SPEC (Standard Performance Evaluation Corporation) эти тесты пересматривает (после 1992 года это было в 1995-м и в 2000 году, и теперь — в августе 2006 года — предложена редакция SPECcpu2006), и появляются новые эталонные тесты процессорной производительности для вычислений с плавающей запятой (SPECfp) и целочисленной нагрузки (SPECint). В качестве единицы измерения в SPECcpu2006 выбрана производительность Sun UltraSPARC II/296 МГц.

В организацию SPEC входят практически все крупнейшие производители компьютерных систем и программного обеспечения, в частности, компиляторов, а также ведущие западные университеты. Поэтому окончательный набор тестовых программ, входящих в SPECcpu, с одной стороны, оказывается достаточно взвешенным, а с другой — является результатом серьезных компромиссов.

Эталонными эти тесты можно считать в силу их общепризнанности. Только производители векторных суперкомпьютеров позволяют себе их игнорировать, полагая «мало информативными», поскольку скалярная их производительность обычно действительно не впечатляет. Надо отметить, что иногда (хоть и редко) и производители современных универсальных микропроцессоров не публикуют соответствующих результатов — когда они могут слишком ярко показать, что производительность «хромает». Конечно, в настоящее время результатов SPEC2006 еще очень мало. Так, Opteron 256/3 ГГц имеет 13,3/11,9 и 12,7/13,2 для SPECint2006 и SPECfp2006 (пиковое/базовое значения) соответственно, Pentium Extreme Edition/3,73 ГГц — 11,7 и 12,7 (базовые значения) соответственно.

За что же ругали эти тесты? Ну, в принципе, за многое, и самый общий вид критики может состоять в отрицании подобных интегральных тестов (включающих ряд компонентов из различных приложений) как таковых. Но поскольку всегда хочется иметь только одно число как меру производительности, мы такую критику рассматривать вообще не будем.

Специалисты, в первую очередь в области высокопроизводительных вычислений (high performance computing, HPC), регулярно поругивают SPECcpu за применение тестов, в недостаточной степени отражающих пропускную способность оперативной памяти. Предлагалось, например, для оценки процессоров «по гамбургскому счету» выкидывать результаты нескольких компонентов SPECfp2000, наиболее хорошо локализуемых в кэше, и проводить сопоставление без их учета. Сообщество HPC создало и собственные SPEC-тесты (SpecHPC2002, SpecOMP2001), однако они по распространенности не идут ни в какое сравнение со SPECcpu, и количество готовых результатов для сопоставления производительности явно выглядит недостаточно.

А одной из главных причин необходимости регулярного пересмотра тестов SPECcpu является рост емкости кэш-памяти современных процессоров. Вследствие этого с течением времени многие тесты из состава SPECcpu оказываются хорошо локализуемыми в кэше, что для серьезных современных приложений, вообще говоря, не характерно. В качестве примера можно привести огромный кэш третьего уровня в IBM Power4/Power5. Однако наиболее массовые х86-процессоры от Intel и AMD с точки зрения емкости кэша пока не превзошли ряд RISC-процессоров последних лет.

В любом случае процессоры с большой емкостью кэша, в частности Power5 и Itanium 2, получали на тестах SPECfp2000 преимущества перед х86-конкурентами, которые на более сложных задачах, хуже локализуемых в кэше, могли исчезать (это может быть справедливо, если пропускная способность оперативной памяти у х86-процессоров не ниже). Впрочем, в многопроцессорных серверах с Xeon MP недостатки пропускной способности в расчете на один процессор также пытаются скрыть за счет большой емкости кэша.

Исходные программные коды тестов SPECcpu имеют большой объем, а время прогона всех тестов составляет много часов, так что традиционно производители оптимизирующих компиляторов используют SPECcpu для того, чтобы доказать, что их продукция — лучшая.

Понятно, что наилучшую оптимизацию компиляторы показывают как раз на SPECcpu, за что эти тесты также критикуют: вне SPECcpu компилятор (и соответствующий микропроцессор) может оказаться не так хорош.

За это критикуют и разработчиков компиляторов. Учитывая отсутствие возможностей подбирать индивидуальные ключи для оптимизации различных компонентов «базовых» тестов SPECсpu (в отличие от «пиковых» оценок), наибольших ухищрений от разработчиков можно ожидать при выполнении тестов в пиковом режиме.

Состав тестов

Состав тестов-компонентов SPECcpu является определяющим. В таблице 1 приведены компоненты SPECint2006, а в таблице 2 — SPECfp2006. Надо иметь в виду, что все эти тесты должны быть хорошо переносимы, т. е. успешно работать на различных типах компьютеров с различными операционными системами и компиляторами.

По сравнению с SPECcpu2000, в составе SPECcpu2006 произошло резкое увеличение доли программ на С++.

Известно, что наилучшей переносимостью между различными программно-аппаратными платформами традиционно обладают программы на Фортране, причем на Фортране-90/95 переносимость обычно хуже, чем на Фортране-77, поскольку разработчики часто пытаются использовать новейшие свойства языка, иногда даже не вошедшие в стандарт. В SPECfp2000 большинство программ были на Фортране-77, и только четыре — на Фортране-90.

Однако с Cи ситуация гораздо сложнее, стандарт ANSI используется далеко не всегда. С С++ дела были еще хуже, учитывая дополнительные проблемы с библиотекой классов. Теперь ситуация с C++, вероятно, улучшилась. Поэтому если в SPECint2000 из дюжины тестов только один был на C++, то в SPECint2006 таких уже три. Более того, четыре программы на С++ (из 17) появились даже в SPECfp2006. И хотя Фортран в SPECfp2000 остался основным языком, его доля существенно уменьшилась.

Что касается состава тестов SPECcpu, то в них, как известно, входят реальные приложения из различных областей. При этом совокупность тестов подбирается и таким образом, чтобы они по возможности покрывали различные характеристики микроархитектуры процессоров, влияющие на производительность.

Если сами прикладные области, к которым относятся SPECcpu, более или менее стабильны, то конкретный состав тестов меняется очень сильно. Так, в SPECint2006 из SPECint2000 выжил только тест компрессии bzip2. Пожалуй, в SPECfp2006 по сравнению с предыдущей версией возросла доля приложений для вычислительной химии и биологии. Таких тестов всего четыре: gamess и tonto — для задач квантовой химии, gromacs и namd — для задач молекулярной динамики, активно используемых в биохимических приложениях.

И здесь возникает еще ряд причин для критики SPECcpu. В частности, из-за доступности SPECcpu за относительно небольшую плату в состав этих тестов не могут входить коммерческие программные продукты; предпочтительными являются программы с открытым кодом. В области вычислительной химии, например, лучшие программные продукты — либо коммерческие (в частности, Gaussian), либо распространяющиеся по специальным запросам, то есть не являющиеся свободно доступными с лицензиями типа GPL. Вошедший в SPECfp2000 комплекс программ tonto использует GPL, но зато он явно не относится к числу широко используемых. Эти программы написаны с учетом объектно-ориентированных свойств Фортрана-95 (в данной области науки они используются достаточно редко), а соответствующий тестовый расчет предназначен для задач кристаллографии.

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

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


Состав тестов SPEC 2006

Состав тестов-компонентов SPECcpu является определяющим. Ниже приведены компоненты SPEC?int2006 и SPECfp2006. Надо иметь в виду, что все эти тесты должны быть хорошо переносимы, то есть успешно работать на различных типах компьютеров с различными операционными системами и компиляторами. По сравнению со SPECcpu2000, в составе SPECcpu2006 произошло резкое увеличение доли программ на С++