SPEC CPU2006. Введение


24 августа 2006 года корпорация SPEC (Standard Performance Evaluation Corporation) объявила о долгожданном выпуске новой версии тестового пакета SPEC CPU2006, пришедшей на смену просуществовавшему 6 лет тестовому пакету SPEC CPU2000. Корпорация SPEC — это некоммерческая организация, основными членами которой являются производители аппаратного и программного обеспечения, а также академические и исследовательские организации. Выпускаемые этой корпорацией тесты SPEC CPU, с момента их представления в 1989 году, являются признанным мировым стандартом измерения производительности интенсивных вычислительных задач. В настоящей статье мы рассмотрим содержимое новой версии тестового пакета SPEC CPU2006, его основные отличия от предыдущей версии SPEC CPU2000, а также наш первый опыт его установки и использования.

Назначение теста

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

Тестовые задачи SPEC CPU2006 поставляются в виде исходного кода и являются основой для оценки производительности системы с помощью различных рейтингов SPEC CPU2006. Эти задачи направлены на оценку производительности системы в условиях интенсивной вычислительной нагрузки, наибольший вклад в которую вносят:

  • Центральный процессор (CPU);
  • Подсистема памяти;
  • Компиляторы.

Важно подчеркнуть наличие в этом списке двух последних компонентов — производительность тестов SPEC CPU, можно сказать, намеренно зависит не только от производительности центрального процессора компьютера. В особенности это касается компиляторов, поскольку задачи поставляются в виде исходного кода и их производительность может во многом зависеть от качества оптимизации бинарного кода, создаваемого соответствующим компилятором. В то же время, остальные компоненты системы (такие как подсистема ввода-вывода, графическая подсистема, сеть, а также операционная система) оказывают пренебрежимо малое влияние на результаты тестов, в особенности при запуске тестов на одном системном процессоре.

В свою очередь, задачи SPEC CPU2006 подразделяются на две подгруппы, каждая из которых сосредоточена на оценке своего типа производительности интенсивного вычислительного кода:

  • CINT2006, измеряющий производительность целочисленных вычислительных задач (integer);
  • CFP2006, измеряющий производительность вычислительных задач с вещественными числами (числами с плавающей точкой, floating point).

Итак, по своему назначению, структуре и нагрузке на компоненты системы SPEC CPU2006 оказывается во многом аналогичен предыдущей версии продукта — тестам SPEC CPU2000. Каковы же причины выпуска новой версии тестового пакета? Главная причина — это постоянное усовершенствование технологий, вслед за которым, естественно, должно происходить и усовершенствование инструментов исследования производительности. При разработке SPEC CPU2006 корпорация SPEC уделила внимание следующим основным моментам:

1. Время работы тестов. По состоянию на лето 2006 года, многие задачи SPEC CPU2000 требовали уже менее одной минуты для завершения своей работы на передовых моделях процессоров/платформ. Таким образом, даже небольшие изменения условий проведения измерений или случайные флуктуации могли вносить существенную погрешность в результаты измерений. В связи с этим, типичное время работы тестов SPEC CPU2006 было значительно увеличено, чтобы обеспечить резерв для дальнейшего роста производительности и устранения указанной выше проблемы на протяжении всего «времени жизни» тестового пакета (согласно успешному опыту использования предыдущей версии SPEC CPU2000, оно должно составить не менее 5 лет).

2. Размер задач. Современные приложения растут как по своей сложности, так и по размеру задач, в связи с чем задачи SPEC CPU2000 уже в меньшей степени отражают реальную вычислительную нагрузку сегодняшнего дня. В наборе задач SPEC CPU2006 были включены программы, как более требовательные к ресурсам системы, так и более сложные по своему исходному коду.

3. Тип задач. С целью увеличения разнообразия вычислительной нагрузки, в набор SPEC CPU2006 был включен ряд задач из новых областей — таких как сжатие видео и распознавание речи, кроме того, ряд областей (например, молекулярная биология) был существенно расширен для большего соответствия типичным проблемам научных вычислений настоящего времени.

Состав комплекта

Новый тестовый пакет SPEC CPU2006 поставляется на одном диске DVD и включает в себя:

  • Исходный код задач CINT2006;
  • Исходный код задач CFP2006;
  • Набор инструментов для компиляции и запуска тестов, проверки результатов и их отправки для размещения на сайте SPEC (в виде исходного кода и исполняемых модулей для различных операционных систем);
  • Правила запуска тестов и отправки результатов;
  • Документацию.

Системные требования

Для установки и запуска тестов SPEC CPU2006 Вам потребуются:

1. Платформа под управлением операционной системы класса UNIX, Microsoft Windows или Mac OS X. Тестовый пакет также включает в себя набор инструментов, бинарные версии которого предоставляются для следующих операционных систем (с гарантией их работоспособности):

  • AIX: системы класса PowerPC под управлением AIX 5L V5.1 или выше;
  • HP-UX: IPF под управлением HP-UX 11iv2;
  • HP-UX: HP-UX 11iv2 на системах PA-RISC;
  • Irix: системы MIPS под управлением IRIX;
  • Linux/PPC: Linux-системы класса PowerPC с GLIBC 2.2.1+;
  • MacOS X: MacOS X 10.2.8+ на PowerPC G3+;
  • MacOS X: MacOS X 10.4.3+ на x86;
  • Redhat 6.2: Linux-системы x86 или x64 с GLIBC 2.1.3+;
  • RHAS: Red Hat Enterprise Linux AS 3 и/или SGI ProPack 3;
  • SLES: SuSE Enterprise Linux 9 на IA64;
  • Solaris: системы SPARC с ОС Solaris 8 и выше;
  • Solaris: системы x86 или x64 с ОС Solaris 10 и выше;
  • SuSE: 64-битные AMD64 Linux-системы;
  • Windows: Microsoft Windows XP и Windows Server.

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

2. Дисковод DVD (напомним, что комплект поставляется на диске DVD).

3. Оперативная память. Требования SPEC CPU2006 к оперативной памяти существенно возросли: типичный объем используемой памяти составляет 1 ГБ для 32-битных систем, не включая память под нужды ОС и других приложений, однако в ряде случаев может потребоваться и больший объем памяти. Так, 64-битные версии некоторых тестовых задач могут потребовать до 2 ГБ оперативной памяти. Кроме того, параллельный запуск нескольких копий теста (метрика SPECrate, см. ниже) в общем случае потребует 1 ГБ оперативной памяти на каждую копию задачи (для 64-битных систем — 2 ГБ на каждую копию задачи).

4. Дисковое пространство. Типичный объем используемого дискового пространства для установки и запуска тестов составляет 8 ГБ, однако он может варьироваться в широких пределах, в зависимости от условий использования тестового пакета и типа системы. Оценка в 8 ГБ основана на следующих положениях:

  • Объем дискового пространства, занимаемый установленной версией тестового пакета, составляет от 1.5 до 2 ГБ.
  • Размер объектных файлов при компилировании бинарного кода тестов зависит от типа системы, компилятора и его опций. Ориентировочный объем дискового пространства составляет от 2 до 3 ГБ для каждого набора бинарного кода тестов. Соответственно, сборка нескольких вариантов кода ориентировочно потребует указанный объем дискового пространства (2-3 ГБ) на каждый вариант.
  • Каждый запуск тестового пакета дополнительно потребует 2-3 ГБ дискового пространства. Кроме того, запуск нескольких копий задач (метрика rate) потребует 2-3 ГБ дискового пространства на каждую копию задачи.

Минимальное требование на объем дискового пространства составляет 5 ГБ. Такой объем достигается при запуске только одной копии тестовых задач (метрики speed) и удалении временных файлов после компиляции бинарного кода задач и после каждого запуска тестов.

5. Поскольку тестовый пакет SPEC CPU2006 поставляется только в виде исходного кода тестовых приложений, помимо вышеперечисленных требований вам также потребуется набор компиляторов, поддерживающих стандарты C99 и C++98 для тестов CINT2006, а также Fortran-95 для тестов CFP2006. Возможной альтернативой при отсутствии компиляторов является набор заранее откомпилированных (кем-либо еще) исполняемых модулей задач той же ревизии тестового пакета SPEC CPU2006, а также библиотек времени исполнения (run-time), необходимых для запуска этих исполняемых модулей.

Тестовые задачи

Как уже было сказано выше, SPEC CPU2006 включает в себя два вида наборов вычислительных тестовых приложений. Первый из них (CINT2006) измеряет производительность системы при выполнении целочисленных вычислительных задач, второй (CFP2006) — при исполнении кода вычислительных задач, оперирующих с вещественными числами. Набор CINT2006 состоит из 12 тестов, основанных на коде реальных приложений и написанных на языках C и C++, тогда как набор CFP2006 состоит из 17 приложений, написанных на C, C++ и различных версиях стандарта языка Fortran, а также смешанном коде C/Fortran.

Перечислим наименования тестовых задач SPEC CPU2006, используемый ими язык программирования и приведем их краткое описание.

Таблица 1. Тестовые задачи CINT2006

Название задачи Язык Описание
400.perlbench C Язык программирования PERL. Представляет собой усеченную версию популярного скриптового языка Perl v5.8.7 (в частности, удалено большинство функций, зависящих от типа ОС).
401.bzip2 C Сжатие данных. Основана на версии 1.0.3 упаковщика данных bzip2. Отсутствуют операции файлового ввода-вывода (за исключением считывания входных данных), все операции упаковки/распаковки данных производятся в оперативной памяти с целью минимизации влияния дисковой подсистемы.
403.gcc C Оптимизирующий компилятор языка C. Основан на версии 3.2 компилятора gcc, создает оптимизированный код для процессора AMD Opteron. С целью увеличения времени анализа исходного кода и количества используемой оперативной памяти (согласно требованиям SPEC CPU2006) несколько изменена эвристика автоматического встраивания кода функций, направленная на inline-подстановку большего числа функций по сравнению с оригинальным компилятором gcc.
429.mcf C Комбинаторная оптимизация, решение задачи планировки перевозок. Задача основана на программе MCF для планировки времени отправления транспорта из единого депо.
445.gobmk C Искусственный интеллект, игра Го. Процессор команд и анализатор позиций игры Го.
456.hmmer C Поиск последовательности гена в базе данных. Программа использует статистические модели множественного выравнивания последовательностей генов — Profile Hidden Markov Models (HMMs) для поиска паттернов в последовательности ДНК.
458.sjeng C Искусственный интеллект, шахматы. Основана на свободно распространяемой программе Sjeng 11.2, в которой реализовано несколько вариантов игры в шахматы.
462.libquantum C99 Физика, квантовые вычисления. Задача использует библиотеку libquantum, предназначенную для симуляции квантового компьютера.
464.h264ref C Сжатие видеопотока. Задача представляет собой стандартную реализацию кодека H.264/AVC (Advanced Video Coding) — нового стандарта сжатия видео, совместно разработанного группами VCEG и MPEG.
471.omnetpp C++ Симуляция дискретных событий. Программа основана на системе симуляции дискретных событий OMNeT++ (для симуляции большой сети Ethernet) и использует общедоступную модель сети Ethernet.
473.astar C++ Алгоритмы поиска пути. Задача основана на портируемой библиотеке двумерного поиска пути, применяемой в задачах искусственного интеллекта в компьютерных играх.
483.xalancbmk C++ Процессор языка XML. Модифицированная версия Xalan-C++ — процессора XSLT для преобразования документов XML в HTML, текстовые документы и документы XML других типов.

Таблица 2. Тестовые задачи CFP2006

Название задачи Язык Описание
410.bwaves Fortran-77 Вычислительная гидрогазодинамика. Программа численного решения задачи распространения взрывной волны в трехмерном пространстве в переходном околозвуковом ламинарном вязком потоке.
416.gamess Fortran Квантово-химические расчеты. Задача основана на популярной квантово-химической программе GAMESS, позволяющей рассчитывать широкий круг квантово-химических задач.
433.milc C Физика, квантовая хромодинамика. Задача основана на последовательной (однопроцессорной) версии программы su3imp, применяемой для симуляции поведения фундаментальных составляющих материи — кварков и глюонов согласно теории калибровочных полей.
434.zeusmp Fortran-77 Физика, магнитогидродинамика. Программа основана на ZEUS-MP, ядре вычислительной гидрогазодинамики для симуляции астрофизических явлений.
435.gromacs C/Fortran Биохимия, молекулярная динамика. Задача основана на многоцелевом пакете молекулярной динамики GROMACS, осуществляющем решение уравнений движения Ньютона для систем, состоящих из большого числа частиц (от сотен до миллионов).
436.cactusADM C/Fortran-90 Физика, общая теория относительности. Представляет собой комбинацию свободно распространяемой среды решения задач Cactus и вычислительного ядра BenchADM, применяемого в численных задачах общей теории относительности.
437.leslie3d Fortran-90 Вычислительная гидрогазодинамика. Основана на программе вычислительной гидрогазодинамики LESlie3d, применяемой для изучения широкого спектра явлений турбулентности.
444.namd C++ Структурная биология, классическая молекулярная динамика. Задача представляет собой внутренний цикл вычисления межатомных взаимодействий параллельной программы симуляции больших биомолекулярных систем NAMD.
447.dealII C++ Анализ конечных элементов. Задача использует библиотеку deal.II, направленную на решение уравнений в частных производных с помощью адаптивного метода конечных элементов и оценки ошибок.
450.soplex C++ Линейное программирование, оптимизация. Основана на программе SoPlex Version 1.2.1 для решения линейных программ Симплекс-методом.
453.povray C++ Компьютерная визуализация, трассировка лучей. Основана на популярном пакете визуализации изображений методом трассировки лучей POV-Ray.
454.calculix C/Fortran-90 Структурная механика. Основана на бесплатной программе CalculiX для решения линейных и нелинейных трехмерных задач структурной механики с помощью классической теории конечных элементов.
459.GemsFDTD Fortran-90 Вычислительная физика, электромагнетизм. Программа решения уравнений Максвелла в трехмерном пространстве временных интервалов с помощью метода конечных разностей временных интервалов (FDTD).
465.tonto Fortran-95 Квантовая кристаллография. Программа основана на свободно распространяемом квантово-химическом пакете Tonto, адаптированном для решения кристаллографических задач.
470.lbm C Вычислительная гидрогазодинамика. Программа реализует так называемый «метод решеток Больцмана» (Lattice Boltzmann Method, LBM) для симуляции поведения несжимаемых текучих сред.
481.wrf C/Fortran-90 Предсказание погоды. Основана на модели исследования и предсказания погоды (Weather Research and Forecasting, WRF) — численной системе предсказания погоды, предназначенной как для практического предсказания погоды, так и теоретического исследования атмосферных явлений.
482.sphinx3 C Распознавание речи. Задача основана на широко известной системе распознавания речи Sphinx-3.

Некоторые из перечисленных выше задач SPEC CPU2006 могут показаться вполне знакомыми. Действительно, большинство тестов SPEC основано на коде свободно распространяемых приложений (или «урезанных» версиях коммерческих приложений) вычислительного характера. В то же время, тестовые задачи SPEC не являются таковыми приложениями в чистом виде, таким образом, прямое сравнение их производительности (например, задачи 403.gcc и компилятора gcc 3.2) является некорректным. Некоторые из задач SPEC CPU2006 также покажутся знакомыми пользователям предыдущей версии пакета SPEC CPU2000 (так, 403.gcc «похожа» на 176.gcc, а 429.mcf — на 181.mcf). Тем не менее, эти задачи вновь не являются идентичными — в новой версии пакета SPEC CPU2006, как правило, применятся более свежие версии кода программ, а также (во всех случаях) иные наборы входных данных, в большей степени отражающие типичную вычислительную нагрузку сегодняшнего дня. Таким образом, прямое сравнение результатов тестов производительности «похожих» задач SPEC CPU2006 и SPEC CPU2000 (например, 403.gcc и 176.gcc) также не является корректным. Кстати, именно по этой причине обновленным задачам SPEC CPU2006, унаследованным от SPEC CPU2000, присвоены другие номерные идентификаторы.

Метрики производительности

Как уже отмечалось выше, тестовые задачи SPEC CPU2006 разделены на две большие подгруппы — целочисленных задач CINT2006 и задач с плавающей точкой CFP2006. Соответственно, тестовый пакет SPEC CPU2006 предусматривает возможность получения двух фундаментальных оценок производительности, в общем виде соответственно именуемых SPECint2006 и SPECfp2006.

Для каждой из этих оценок предусмотрены две важнейшие метрики производительности системы. Первая из них измеряет, насколько быстро (т.е. за какой промежуток времени) система способна решить одну задачу — эта метрика называется метрикой скорости (speed). Вторая из них отражает, какое количество задач способна решить система в определенный, фиксированный промежуток времени. Эта метрика именуется метрикой пропускной способности (throughput, или rate). В первом случае осуществляется запуск одной копии задачи (при этом сама задача может быть автоматически распараллелена оптимизирующим компилятором с целью использования всех доступных системных процессоров — такое измерение по-прежнему будет являться метрикой скорости). Во втором случае производится одновременный параллельный запуск нескольких копий одной и той же задачи, количество которых обычно устанавливается равным количеству системных процессоров, но это не является абсолютным требованием метрики пропускной способности.

Наконец, каждая из этих метрик (speed и rate) может измеряться в двух различных вариантах компиляции кода, которые получили название базового (base) и пикового (peak) вариантов. Такой подход к разделению результатов основан на типовых сценариях использования компиляторов программистами. В первом случае предпочтение отдается простоте (в частности, в этом случае должна применяться однопроходная компиляция с единым набором ключей оптимизации для всех задач тестового пакета). Базовая метрика является обязательной при отправке результатов измерения производительности системы на сайт корпорации SPEC и отличается более строгими правилами компиляции тестов по сравнению со второй, пиковой метрикой, которая является опциональной. Эта метрика отражает более «экспериментальный» подход программиста к компиляции кода задачи с целью достижения ее максимальной производительности: при этом допускается использование более одного типа компиляторов и различных флагов оптимизации кода, а также многопроходная компиляция с применением «тренировочной» нагрузки, предусмотренной тестами SPEC CPU2006. Кстати, касательно последней — подчеркнем, что многопроходная компиляция кода теперь относится именно к пиковой метрике и недопустима при сборке задач с целью получения «базового» результата (что допускалось в предыдущей версии SPEC CPU2000).

Таким образом, учитывая все вышеупомянутое, тестовый пакет SPEC CPU2006 предлагает возможность измерения до 8 различных метрик производительности системы, перечисленных в табл. 3.

Таблица 3. Метрики SPEC CPU2006

Название метрики Набор задач Тип запуска Тип оптимизации
SPECint2006 CINT2006 speed peak
SPECint_base2006 base
SPECint_rate2006 rate peak
SPECint_rate_base2006 base
SPECfp2006 CFP2006 speed peak
SPECfp_base2006 base
SPECfp_rate2006 rate peak
SPECfp_rate_base2006 base

Во всех случаях, результат измерения производительности системы выдается в нормализованном виде — т.е. в виде коэффициента соотношения производительности данной системы к производительности эталонной системы. В качестве последней, корпорацией SPEC выбрана историческая система Sun «Ultra Enterprise 2», представленная в 1997 году. Она основана на процессоре Sun UltraSPARC II с частотой 296 МГц, который использовался и в эталонной машине для предыдущей версии тестов SPEC CPU2000, однако новая эталонная машина отличается большим размером кэшей и большим объемом памяти, достаточным для запуска задач SPEC CPU2006 (напомним, что требования к оперативной памяти в этой версии тестового пакета существенно возросли). Полное время работы тестов для получения базовых метрик SPECint2006 и SPECfp2006 на этой машине составляет примерно 12 дней.

Первые испытания. Установка, компиляция и пробный запуск

Приступим к описанию нашего первого опыта знакомства с новым тестовым пакетом SPEC CPU2006. В общем виде, инструкция по применению теста, начиная с установки и заканчивая получением достоверного результата, выглядит так:

  • Удостоверьтесь, что Ваша система соответствует системным требованиям, описанным выше.
  • Установите SPEC CPU 2006 с диска DVD на систему с ОС UNIX, Linux, Mac OS X или Microsoft Windows.
  • Определитесь с типом метрики, которую Вы хотите измерить.
  • Изучите документацию runspec — главного инструмента тестового пакета SPEC CPU2006.
  • Найдите конфигурационный файл, наиболее близко соответствующий Вашей системе, руководствуясь документацией runspec.
  • Воспользуйтесь runspec для создания исполняемого кода (компиляции) тестовых задач.
  • В случае успешной компиляции, воспользуйтесь runspec для запуска тестов, проверки результатов и создания отчета о производительности Вашей системы.

Рассмотрим последовательность установки, компиляции и запуска теста на нашей тестовой системе под управлением Microsoft Windows XP (SP2), имеющей следующую конфигурацию:

  • Процессор: AMD Athlon 64 X2 3800+ (2.0 ГГц, ядро Manchester rev. JH-E6, 1 МБ L2)
  • Материнская плата: ASUS A8N-E (чипсет nForce 4 Ultra), версия BIOS 1013 от 04/07/2006
  • Память: 2 x 1 ГБ Corsair DDR-400, 2.5-3-3-5-1T

1. Установка

Первичная установка теста не вызывает затруднений — для этого достаточно установить диск SPEC CPU2006 в DVD-дисковод и запустить из командной строки файл install.bat следующим образом:

install.bat destination_drive destination_directory

например:

F:\>install.bat E: \CPU2006

Следующий шаг установки тестового пакета (точнее, его предварительной настройки) заключается в редактировании файла shrc.bat, находящегося в корневом каталоге теста. Делается это с целью указания тесту путей к установленным компиляторам (set SHRC_COMPILER_PATH_SET=yes), либо информации о том, что будет использоваться заранее откомпилированный набор тестовых задач (set SHRC_PRECOMPILED=yes). В противном случае, запуск файла shrc.bat (а это — первое, что необходимо сделать при любом запуске теста) не увенчается успехом.

2. Компиляция

По традиции, установившейся еще в предыдущей серии наших исследований с прошлой версией тестового пакета SPEC CPU2000, мы воспользовались последней доступной на данный момент версией компиляторов Intel C++ Compiler и Intel Fortran Compiler 9.1 (9.1.034), используя различные ключи оптимизации кода для достижения его максимальной производительности как на процессорах Intel, так и процессорах других производителей. В качестве заголовочных файлов (headers) и библиотек Windows API использовались файлы из Microsoft Platform SDK for Windows 2003 Server SP1 (build 3790), а для сборки объектного кода приложений были использованы стандартные инструменты из Microsoft Visual Studio 2005 Professional Edition.

Подобрать подходящий конфигурационный файл для платформы Windows (x86) и компиляторов Intel не составило труда — в каталоге config был обнаружен файл windows-ia32-icl.cfg, название которого говорит само за себя, а комментарий внутри — что этот файл испытывался на системе с Intel Compiler 9.1 и Microsoft Visual Studio.Net 2003, что почти соответствует нашему случаю. Тем не менее, попытка компиляции тестовых задач с этим конфигурационным файлом (после минимальных изменений, приводящих его в соответствие с нашим подходом к тестированию) не оказалась полностью успешной.

Прежде всего, возникли ошибки при компиляции кода приложения 483.xalancbmk. Причина возникновения ошибок заключалась в использовании встроенного типа данных wchar_t, принятого по умолчанию в Microsoft Visual Studio 2005 (а также в Intel C++ Compiler 9.1 при использовании ключа совместимости с Visual Studio 2005 /Qvc8), тогда как данная задача «ожидала» преобразование этого типа данных к привычному типу short int. Проблема совместимости была решена добавлением опции совместимости «CXXPORTABILITY = -Zc:wchar_t-», после чего компиляция этой задачи на нашей тестовой платформе завершилась успешно.

Вторая проблема обнаружилась в задаче 454.calculix при попытке сборки «пикового» варианта кода (tune=peak), в нашем случае отличающегося от «базового» варианта (tune=base) применением двухпроходной схемы компиляции с оптимизацией по профилю приложения (Profile-Guided Optimization, PGO). Собственно, ошибка проявилась не при компиляции кода приложения, а при попытке запуска готового бинарного файла с любым набором входных данных — задача выдавала странную ошибку о том, что она не может выделить оперативную память под свои данные (порядка 20 млн. элементов по 4 байта каждый, т.е. 80 МБ). Решение этой проблемы потребовало более внимательного изучения конфигурационного файла, в результате которого в последнем была найдена следующая опция, единая для всех задач набора SPECfp2006:

fp=default:
EXTRA_LDFLAGS = /F950000000,

которая заключается в выделении 950 млн. байт под область стека (размер которой по умолчанию составляет всего 1 МБ). Тогда как для целочисленных задач набора SPECint2006 выделяется лишь 512 млн. байт стековой памяти:

int=default:
EXTRA_LDFLAGS = /F512000000.

После недолгих размышлений, мы добавили строку «EXTRA_LDFLAGS = /F512000000» непосредственно под опциями совместимости задачи 454.calculix. Тем самым, мы уменьшили размер стековой области для этой задачи и предоставили оставшуюся часть доступной системной памяти под область «кучи» (heap), в которой и происходит размещение данных рассматриваемой задачей. В результате этой операции двухпроходная компиляция задачи 454.calculix и ее запуск с любым набором входных данных прошли успешно.

Таблица 4. Время компиляции кода задач SPEC CPU2006

Задача Время компиляции
tune=base tune=peak
400.perlbench 0:01:08 0:06:25
401.bzip2 0:00:06 0:02:41
403.gcc 0:02:50 0:05:47
429.mcf 0:00:01 0:00:58
445.gobmk 0:00:38 0:06:51
456.hmmer 0:00:11 0:05:36
458.sjeng 0:00:08 0:08:41
462.libquantum 0:00:01 0:00:15
464.h264ref 0:03:13 0:08:52
471.omnetpp 0:01:11 0:11:01
473.astar 0:00:02 0:06:16
483.xalancbmk 0:15:03 0:50:37
410.bwaves 0:00:03 0:01:43
416.gamess 0:14:24 0:20:08
433.milc 0:00:17 0:01:00
434.zeusmp 0:01:35 0:03:21
435.gromacs 0:00:56 0:04:50
436.cactusADM 0:00:46 0:02:08
437.leslie3d 0:00:22 0:10:12
444.namd 0:00:13 0:00:48
447.dealII 0:22:11 0:25:05
450.soplex 0:01:05 0:02:14
453.povray 0:01:29 0:02:57
454.calculix 0:08:14 0:09:15
459.GemsFDTD 0:04:53 0:07:51
465.tonto 0:16:10 0:33:51
470.lbm 0:00:03 0:02:19
481.wrf 1:37:43 0:51:48
482.sphinx3 0:00:14 0:00:52
Итого 3:15:10 4:54:22

Что касается времени компиляции полного набора задач (в качестве примера, в табл. 4 приведено время компиляции кода задач с применением специфических оптимизаций под набор инструкций SSE3, ключ компилятора /QxP), оно оказывается довольно существенным. Так, полная компиляция «базового» варианта кода задач (tune=base) занимает свыше 3 часов. При этом наблюдается значительный разброс во времени компиляции кода отдельных задач — буквально от одной секунды до свыше полутора часов. Можно выделить достаточно большую группу задач, компиляция которых требует незначительных затрат времени (менее 2-3 минут), отметить несколько задач, компиляция которых занимает ощутимое время (10-20 минут) и, наконец, особо отметить задачу 481.wrf, компиляция которой занимает более 1.5 часов.

Применение двухпроходной схемы компиляции с оптимизацией по профилю приложения для «пикового» варианта кода (tune=peak) существенно увеличивает общее время компиляции задач тестового пакета (оно возрастает почти в 1.5 раза и достигает почти 5 часов), а также вносит существенные изменения в распределение времен компиляции кода отдельных задач. Тем не менее, и в этом случае большая часть задач компилируется за разумное время (менее 10 минут) и лишь некоторые задачи требуют существенно большего времени для их компиляции (от 20 до 50 минут). Интересно отметить, что абсолютный «лидер» по времени компиляции в «базовом» варианте — задача 481.wrf — в случае «пикового» варианта компилируется почти вдвое быстрее. По-видимому, применение двухпроходной схемы компиляции с «тренировочным» запуском этой задачи приводит к существенному сокращению времени анализа кода при выполнении многофайловой межпроцедурной оптимизации (multi-file inter-procedural optimization), применяемой в обоих случаях.

Следует уделить внимание не только времени компиляции кода задач, но и объему используемой при этом оперативной памяти. Как мы уже упоминали выше, требования новой версии SPEC CPU2006 к объему оперативной памяти являются весьма существенными — требуется минимум 1 ГБ свободной оперативной памяти для 32-битных платформ. Оказалось, что компиляция кода, по крайней мере в наших условиях (т.е. при использовании компиляторов Intel с высокоуровневой оптимизацией кода) предъявляет существенно более высокие требования. Полный объем расходуемой оперативной памяти по мере выполнения компиляции составил примерно 1.8 ГБ при однопроходной схеме компиляции и примерно 1.9 ГБ в случае двухпроходной схемы компиляции. Выяснилось это сначала на качественном уровне, при попытке использования нашего двухъядерного процессора на полную мощность, т.е. при попытке одновременной компиляции двух вариантов кода задач (например, неоптимизированного и с оптимизацией под SSE). Такая попытка достаточно быстро привела к полному расходованию всей установленной в системе оперативной памяти (2 ГБ), т.е. постоянному свопингу на жесткий диск :). В связи с чем нам пришлось отказаться от такого «ускорения» процесса и оценить максимальный объем используемой оперативной памяти на протяжении всего процесса компиляции на одном ядре процессора по показаниям диспетчера задач Windows.

3. Запуск теста

Как и в предыдущей версии тестового пакета, в SPEC CPU2006 предусмотрено два варианта размеров входных и выходных данных для тестовых задач — так называемый «тестовый», или «пробный» запуск (size=test) и «референсный», или «эталонный» запуск теста (size=ref). Первый предназначен для быстрой проверки работоспособности скомпилированных задач, второй используется для получения оценки рейтинга производительности системы. Более того, согласно правилам SPEC, во втором случае для получения достоверных результатов тестирования с возможностью их публикации на сайте корпорации необходимо проведение не менее трех последовательных запусков каждой задачи.

Что касается «пробного» варианта запуска, в новой версии SPEC CPU2006 он по-прежнему оправдывает свое название. На нашей тестовой системе полное время работы всех тестовых задач (CINT2006 и CFP2006) составило менее 6 минут. Максимальный объем оперативной памяти, используемый задачами в этом режиме запуска, также уложился в официальные требования тестового пакета и составил примерно 1.15 ГБ (учитывая, что примерно 0.25 ГБ оперативной памяти отводится под нужды операционной системы).

«Референсный» вариант запуска SPEC CPU2006 оказался ненамного более требовательным к объему оперативной памяти (он достиг отметки 1.4 ГБ), однако существенно более длительным по времени выполнения. Результаты, полученные на нашей тестовой системе с применением кода задач, оптимизированного под SIMD-расширения SSE3, приведены в табл. 5.

Таблица 5. Время выполнения задач SPEC CPU2006

Задача Время выполнения (size=ref)
tune=base tune=peak
400.perlbench 0:13:52 0:12:02
401.bzip2 0:17:32 0:17:15
403.gcc 0:14:25 0:14:03
429.mcf 0:15:18 0:15:23
445.gobmk 0:10:45 0:09:59
456.hmmer 0:37:10 0:36:21
458.sjeng 0:16:41 0:14:38
462.libquantum 0:28:24 0:28:48
464.h264ref 0:22:38 0:21:39
471.omnetpp 0:13:10 0:12:03
473.astar 0:14:46 0:13:48
483.xalancbmk 1:40:00 1:39:25
410.bwaves 0:15:12 0:15:14
416.gamess 0:25:23 0:25:23
433.milc 0:15:00 0:14:59
434.zeusmp 0:13:55 0:14:00
435.gromacs 0:10:30 0:10:26
436.cactusADM 0:16:40 0:16:42
437.leslie3d 0:22:08 0:22:00
444.namd 0:11:59 0:11:56
447.dealII 0:16:11 0:15:52
450.soplex 0:15:23 0:15:22
453.povray 0:05:29 0:04:44
454.calculix 0:16:42 0:16:43
459.GemsFDTD 0:25:35 0:26:44
465.tonto 0:21:08 0:20:59
470.lbm 0:23:13 0:23:05
481.wrf 0:18:54 0:19:33
482.sphinx3 0:26:20 0:25:30
Итого 10:04:23 9:54:36

Итак, полное время выполнения всех тестовых задач на используемой системе составляет примерно 10 часов. Заметим, что это относится лишь к одному прогону теста, таким образом, для получения достоверных результатов тестирования по трем прогонам каждой задачи (согласно требованиям SPEC) потребуется порядка 30 часов процессорного времени. Таким образом, полное тестирование платформы в SPEC CPU2006 по нашей методике, учитывая применение нами нескольких вариантов оптимизации кода (без оптимизации, с оптимизацией под SSE, SSE2, процессорные ядра Northwood, Prescott и Conroe), а также «базового» и «пикового» вариантов запуска (в общей сложности — 12 вариантов), может занять от 1 до 2 недель чистого времени.

Заключение

В настоящей статье мы рассмотрели содержание новой версии тестового пакета SPEC CPU2006, его основные особенности и отличия от предыдущей версии SPEC CPU2000, успешно применяемого нами на протяжении нескольких лет для тестирования производительности различных платформ. Мы также провели первые испытания SPEC CPU2006, т.е. оценили принципиальную возможность его использования (компиляции и запуска) и характерные требования к ресурсам системы. Требования SPEC CPU2006 к объему оперативной памяти оказались весьма значительными — до 1.9 ГБ при компиляции задач (к счастью, эта процедура проводится намного реже, чем собственно тестирование платформ), и примерно 1.4 ГБ — при «референсном» варианте запуска, применяемом для получения рейтинга производительности платформ. Это относится к 32-битным платформам, сама корпорация SPEC честно предупреждает, что для 64-битных платформ он может удвоиться (мы постараемся выяснить это в дальнейшем). Учитывая, что объем оперативной памяти в типичных современных платформах, как правило, не превышает 2 ГБ, на настоящее время это обстоятельство существенно затрудняет параллельный запуск задач теста для оценки «полной» производительности платформ с многоядерными процессорами (т.к. расходуемый объем памяти в общем случае необходимо умножить на количество запущенных копий задачи). В связи с этим, наши первые результаты исследования производительности платформ в SPEC CPU2006, которые мы опубликуем в ближайшее время, будут касаться исключительно оценок SPECint2006/SPECfp2006, полученных при «одноядерном» варианте запуска теста.




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

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

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

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