Тест SPEC CPU2000. Часть 1. Введение


Общее описание

Компания Standard Performance Evaluation Corporation (SPEC) была основана в 1988 году несколькими поставщиками вычислительной техники с целью разработки и поддержки широкого спектра программ для измерения производительности компьютерных систем. Сегодня членами консорциума являются более 60 широко известных компаний.

SPEC предлагает пользователям программное обеспечение для оценки почтовых серверов, сервера интернет, файлового сервера, суперкомпьютеров и кластеров, вычислительных систем, профессиональных графических приложений и многое другое. Некоторые тесты может скачать с сайта и использовать любой человек, другие стоят значительную сумму (впрочем, в этом случае оборудование для их запуска может стоить раз в 10–20 больше). Пожалуй, самым известным является SPECviewperf, используемый многими изданиями для оценки производительности OpenGL приложений. Но сегодня речь пойдет о менее известном, но не менее интересном тесте SPEC CPU2000.

Как ясно из названия, тест CPU2000 ориентирован на измерение производительности центрального процессора (или процессоров) компьютеров. Поскольку сам по себе процессор (обычно) не является самодостаточной вычислительной системой и использует оперативную память и чипсет, то более корректно сказать, что CPU2000 тестирует производительность вычислительных систем в целом на задачах, производящих интенсивные вычисления.

А вот от таких деталей как видеокарта, жесткий диск, привод CD-ROM результаты практически не зависят. Во-первых, из-за того, что тесты используют исключительно работу с командной строкой и не выводят практически никаких результатов на экран. Во-вторых, для исключения скорости дисковой системы были приняты специальные меры — большинство операций проводятся в оперативной памяти. Конечно, если ее будет меньше требуемого объема, то диск сыграет свою роль, но и результаты тогда, мягко говоря, непонятно зачем нужны, и как их сравнивать — тоже непонятно.

В целях достижения высокой переносимости на различные платформы, тест поставляется в виде исходных текстов задач, использующих языки программирования C, C++ и Fortran. С одной стороны это позволяет легко сравнить такие разные системы, как, например, ПК с процессором AMD Athlon  с операционной системой Windows NT и кластер из 32 двухпроцессорных компьютеров с Intel Xeon, работающий под управлением клона Unix. Однако такой вариант вносит и еще один фактор в тестирование — выбор компиляторов и их настроек при создании выполняемых на выбранной платформе файлов тестов.

Все используемые приложения разделены на две группы. CINT2000 включает в себя 12 приложений, в основном оперирующих целочисленными значениями (а также логическими операторами). Одиннадцать из них написаны на чистом C, а одно — на C++. Второй набор — CFP2000, состоит из 14 приложений (6 Fortran-77, 4 Fortran-90 и 4 на C), интенсивно использующих вычисления с плавающей точкой. Итоговые оценки строятся из результатов измерения времени работы этих приложений.

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

Однако поскольку предусмотреть все возможные варианты задач просто невозможно, SPEC CPU является индустриальным стандартом,  использует усредненную оценку, которая может использоваться как некая стандартная точка отсчета при сравнении производительности.

К сожалению, такова особенность всех тестов — или это скрипт с реальным приложением и возникают споры о том, что нужно использовать именно версию B.12 вместо A.46, поскольку в ней переписали пару строк кода и она неожиданно стала быстрее на 20%, или оказалось, что такие операции в этом приложении никто не делает и тот, кто писал скрипт, вообще никогда раньше не запускал такую программу. А если тест является синтетическим, то его результаты нужно использовать очень осторожно, поскольку эта задача может никогда не встретиться в реальной жизни.

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

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

Установка и использование

Итак, представляем SPEC CPU2000. На компакт диске поставляются:

  • исходные коды приложений
  • исходные данные для работы задач
  • утилиты для компиляции и запуска тестов
  • документация

Общий объем файлов превышает 300MB. 

Требования к системе:

  • 256MB оперативной памяти (на один процессор)
  • 1GB на жестком диске
  • Unix , Windows NT (2000/XP)
  • компиляторы C, C++, Fortran

В целом, достаточно демократично. Любители практически любой системы могут использовать тест для оценки скорости перемалывания цифр своим процессором.

Процесс получения результатов включает в себя несколько шагов:

  • установка пакета
  • чтение поставляемой документации
  • создание конфигурационного файла
  • компиляция исходных текстов
  • запуск тестов на выполнение
  • при желании, публикация результатов на сайте SPEC

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

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

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

Естественно, проверяется и правильность выполнения каждого приложения. То есть проводится "тест на качество" - сравнение выходных данных теста с эталоном (например, результатом упаковки или компиляции).

Самым важным процессом при проведении теста является составление конфигурационного файла. В нем указываются все необходимые параметры для компиляции тестов, включая используемые компиляторы, ключи оптимизации, библиотеки и т.п. Этот файл в дальнейшем указывается при всех запусках тестов на компиляцию и исполнение. Публикация результатов также теряет смысл без указания конфигурационного файла, поскольку его содержание более всего влияет на результаты. К сожалению, играть в "а что если…" при настройке этого файла несколько затруднительно — полный (однократный) запуск теста на современных ПК занимает порядка 5 часов, и поэтому для  получения и анализа нескольких результатов нужно потратить много времени (конечно, если у вас только один ПК :).

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

Поскольку в каждом из наборов используется большое количество подтестов, то для оптимизации разных задач могут потребоваться различные ключи оптимизации или даже разные компиляторы. Для сохранения общей стройности и корректности сравнения результатов даже при возникновении такого варианта, в тесте предусмотрено деление на "base" и "peak" тесты.

Первый накладывает более строгие ограничения на компиляцию кода: разрешено использовать один компилятор (для тестов одного языка) и одинаковые ключи оптимизации для него (ограничено и их количество — не более четырех). Допускается использование двухпроходной компиляции (для межмодульной оптимизации). Для получения "peak" метрики пользователь может использовать различные варианты ключей и даже компиляторов для каждого подтеста. Это позволяет в некоторых конфигурациях получить порядка 7% прироста итогового показателя. Однако обычно в публикациях приводят цифры "base" результата. Ну а в рекламных материалах… сами понимаете :)

Еще один выбор, который нужно сделать при проведении теста - выбор так называемой метрики. Тест определяет два варианта — "speed" и "rate". Первая используется для оценки скорости выполнения одной задачи и дает результат в % от скорости базовой системы. Отметим, что допускается применение компилятора, создающего мультипоточный код. Однако, поскольку исходные тексты специально не подготовлены для такого варианта, положительный эффект может быть не очень заметен.

Второй может быть использован для мультипроцессорных систем в условиях одновременного выполнения нескольких задач и дает ответ в "задачах в час". Отметим, что в этом случае параметр количества одновременно выполняемых задач обычно устанавливается (пользователем) равным количеству процессоров (если их, конечно, не 32, например. В таком случае можно оставить один процессор системе). Небольшим недостатком такого подхода является то, что одновременно запускаются одинаковые задачи. Кстати, никто не мешает вам использовать тест "rate" с двумя или более задачами при наличии только одного процессора. Эта информация может быть очень полезна для оценки работы в мультизадачной среде. Не менее интересен и запуск "rate" теста на двухпроцессорной системе с указанием, что необходимо эмулировать работу единственного пользователя. Сравнение полученной цифры со значением для двух одновременно выполняемых задач позволяет оценить масштабируемость архитектуры вычислительной системы.

Для вычисления итоговых оценок теста используются следующие формулы:

"speed" SPEC int/fp= GEOMEAN(reftime/runtime * 100)

"rate" SPEC int/fp= GEOMEAN(1.16 * N * reftime/ruuntime)

где:

  • GEOMEAN: среднее геометрическое по всем подтестам
  • reftime: время выполнения на базовой системе
  • runtime: время выполнения на тестируемом системе
  • N: количество одновременно запускаемых задач

В качестве базовой системы используется SUN Ultra 10 (другие подробности неизвестны). Отметим, что для официальной публикации необходимо, чтобы runtime было вычислено как среднее по минимум трем запускам.

Использование среднего геометрического вместо арифметического позволяет сгладить отличия во времени выполнения отдельных тестов. Это тем более важно, что набор тестов меняется нечасто — современная версия CPU2000 пришла на смену CPU95, а сейчас набираются приложения для включения в версию CPU2004.

Приложения теста CPU2000

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

В этом разделе будут приведены краткие описания всех используемых приложений.

Тест CINT2000 Язык Описание
164.gzip C Версия популярной утилиты компрессии gzip.

Тест выполняет несколько операций сжатия/распаковки над набором файлов, общим объемом 28MB. В набор входит изображение в формате tiff, логфайл веб сервера, приложение в двоичных кодах, файл со случайными данными и tar файл исходных текстов самого gzip. Все операции над данными производятся в оперативной памяти, что позволяет уменьшить влияние дисковой системы, а также повысить зависимость от скорости оперативной памяти.

175.vpr C Программа проектирования интегральных схем.

VPR (Versatile Place and Route) используется для решения задач расположения и связи различных микроблоков FPGA (Field-Programmable Gate Array) чипов для достижения высокой скорости и работы. Во время теста решаются задачи выбора, расположения и связи блоков схемы для выполнения заданного алгоритма ее работы.

176.gcc C Оптимизирующий компилятор языка C.

Основанная на версии gcc 2.7.2.2 программа компилирует код для процессора Motorola 88100, при этом используется множество ключей оптимизации. В качестве исходных данных используются 5 файлов препроцессора (.i файлы) общим объемом 3.7MB.

181.mcf C Программа оптимизации перевозок/транспортных задач.

Решается проблема достижения минимальной стоимости и составляется расписание перевозок с указанием времени прибытия и т.п.

186.crafty C Шахматная программа.

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

197.parser C Приложение анализа синтаксиса английского языка.

Используется словарь из более 60000 словоформ. Анализируется входное множество фраз объемом 770KB.

252.eon C++ Программа компьютерной визуализации.

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

253.perlbmk C Реализация языка PERL

Используется сокращенная версия интерпретатора языка скриптов PERL для решения четырех задач: исполнение скрипта преобразования e-mail в HTML, работа с specdiff (используемый в самом SPEC скрипт с некоторыми изменениями), программа нахождения совершенных чисел и последняя - генерация последовательности случайных чисел.

254.gap C Программа аналитических вычислений в области дискретной алгебры.

В качестве теста используются несколько комбинаторных задач, работа с группами перестановок и другие.

255.vortex C Объектно-ориентированная база данных

Моделируется работа с тремя взаимосвязанными базами (почтовой рассылки, списком устройств и геометрических данных). Программа была специально модифицирована для уменьшения влияния дисковой системы и большинство операций проходит только в оперативной памяти. Используются операции вставки, удаления и поиска по базам. Тест запускает последовательно три различных шаблона работы с информацией.

256.bzip2 C Утилита компрессии

Еще один вариант программы компрессии. В качестве исходных файлов используются изображение, программа и исходный текст. Общий объем данных - почти 20MB.

300.twolf C Компьютерное проектирования интегральных схем.

Оригинальная программа используется при создании литографических шаблонов для изготовлении микрочипов. Решаются задачи взаимного расположения групп транзисторов и прокладки маршрутов между ними.

Как вы видите, набор достаточно разнообразный. Встречаются как знакомые приложения (gcc, gzip) так и "первый раз слышу!". Немного успокаивает то, что приложения тщательно отбирались и проверялись SPEC в течении долгого времени, и такие гранды, как AMD, Compaq, HP и Intel согласились, что они действительно интересны пользователям. Так что если вас лично не интересует решение шахматной задачи, то вполне может быть, что кто-то считает ее самой главной :)

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

Тест CFP2000 Язык Описание
168.wupwise Fortran 77 Физика, квантовая хромодинамика

Решение одного из важнейших уравнений теории сильного взаимодействия кварков — lattice-Dirac методом BiCGStab.

171.swim Fortran 77 Метеорология

Решение разностного уравнения мелководья. Ранее использовалась для сравнения мощности суперкомпьютеров.

172.mgrid Fortran 77 Вычисления на множестве сеток (Multigrid Solver)

Расчет трехмерного потенциального поля. Также относится к стандартным тестам суперкомпьютеров.

173.applu Fortran 77 Вычислительная физика и гидродинамика

Решается система из пяти нелинейных уравнений в частных производных на трехмерной сетке. Используется неявный метод.

177.mesa C Библиотека трехмерной графики

Реализуется набор функций, аналогичный популярному интерфейсу OpenGL.

178.galgel Fortran 90 Вычислительная гидродинамика

Численные вычисления параметров движения жидкости в закрытом пространстве.

179.art C Нейронная сеть

Используется модель нейронной сети для распознавания образов

183.equake C Моделирование сейсмической задачи

Рассчитывается распространение сейсмических волн на больших неоднородных пространствах методом конечных элементов.

187.facerec Fortran 90 Обработка изображений

Решается  задача распознавания человеческого лица.

188.ammp C Вычислительная химия

Решение задач молекулярной динамики для систем из большого количества молекул, характерных для биологии.

189.lucas Fortran 90 Теория чисел

Проверка простоты чисел Мерсенна методом Лукаса-Лехмера.

191.fma3d Fortran 90 Моделирование механических деформаций

Метод конечных элементов используется для моделирования переходных характеристик при  импульсных нагрузках на трехмерные тела

200.sixtrack Fortran 77 Ядерная физика

Решается задача моделирования работы ускорителя частиц и расчета динамической апертуры для проверки устойчивости луча

301.apsi Fortran 77 Предсказание погоды

Рассчитывается распространение загрязняющего вещества в зависимости от погодных условий.  

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

Заключение

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




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

Тест SPEC CPU2000. Часть 1. Введение

Тест SPEC CPU2000. Часть 1. Введение

Общее описание

Компания Standard Performance Evaluation Corporation (SPEC) была основана в 1988 году несколькими поставщиками вычислительной техники с целью разработки и поддержки широкого спектра программ для измерения производительности компьютерных систем. Сегодня членами консорциума являются более 60 широко известных компаний.

SPEC предлагает пользователям программное обеспечение для оценки почтовых серверов, сервера интернет, файлового сервера, суперкомпьютеров и кластеров, вычислительных систем, профессиональных графических приложений и многое другое. Некоторые тесты может скачать с сайта и использовать любой человек, другие стоят значительную сумму (впрочем, в этом случае оборудование для их запуска может стоить раз в 10–20 больше). Пожалуй, самым известным является SPECviewperf, используемый многими изданиями для оценки производительности OpenGL приложений. Но сегодня речь пойдет о менее известном, но не менее интересном тесте SPEC CPU2000.

Как ясно из названия, тест CPU2000 ориентирован на измерение производительности центрального процессора (или процессоров) компьютеров. Поскольку сам по себе процессор (обычно) не является самодостаточной вычислительной системой и использует оперативную память и чипсет, то более корректно сказать, что CPU2000 тестирует производительность вычислительных систем в целом на задачах, производящих интенсивные вычисления.

А вот от таких деталей как видеокарта, жесткий диск, привод CD-ROM результаты практически не зависят. Во-первых, из-за того, что тесты используют исключительно работу с командной строкой и не выводят практически никаких результатов на экран. Во-вторых, для исключения скорости дисковой системы были приняты специальные меры — большинство операций проводятся в оперативной памяти. Конечно, если ее будет меньше требуемого объема, то диск сыграет свою роль, но и результаты тогда, мягко говоря, непонятно зачем нужны, и как их сравнивать — тоже непонятно.

В целях достижения высокой переносимости на различные платформы, тест поставляется в виде исходных текстов задач, использующих языки программирования C, C++ и Fortran. С одной стороны это позволяет легко сравнить такие разные системы, как, например, ПК с процессором AMD Athlon  с операционной системой Windows NT и кластер из 32 двухпроцессорных компьютеров с Intel Xeon, работающий под управлением клона Unix. Однако такой вариант вносит и еще один фактор в тестирование — выбор компиляторов и их настроек при создании выполняемых на выбранной платформе файлов тестов.

Все используемые приложения разделены на две группы. CINT2000 включает в себя 12 приложений, в основном оперирующих целочисленными значениями (а также логическими операторами). Одиннадцать из них написаны на чистом C, а одно — на C++. Второй набор — CFP2000, состоит из 14 приложений (6 Fortran-77, 4 Fortran-90 и 4 на C), интенсивно использующих вычисления с плавающей точкой. Итоговые оценки строятся из результатов измерения времени работы этих приложений.

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

Однако поскольку предусмотреть все возможные варианты задач просто невозможно, SPEC CPU является индустриальным стандартом,  использует усредненную оценку, которая может использоваться как некая стандартная точка отсчета при сравнении производительности.

К сожалению, такова особенность всех тестов — или это скрипт с реальным приложением и возникают споры о том, что нужно использовать именно версию B.12 вместо A.46, поскольку в ней переписали пару строк кода и она неожиданно стала быстрее на 20%, или оказалось, что такие операции в этом приложении никто не делает и тот, кто писал скрипт, вообще никогда раньше не запускал такую программу. А если тест является синтетическим, то его результаты нужно использовать очень осторожно, поскольку эта задача может никогда не встретиться в реальной жизни.

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

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

Установка и использование

Итак, представляем SPEC CPU2000. На компакт диске поставляются:

  • исходные коды приложений
  • исходные данные для работы задач
  • утилиты для компиляции и запуска тестов
  • документация

Общий объем файлов превышает 300MB. 

Требования к системе:

  • 256MB оперативной памяти (на один процессор)
  • 1GB на жестком диске
  • Unix , Windows NT (2000/XP)
  • компиляторы C, C++, Fortran

В целом, достаточно демократично. Любители практически любой системы могут использовать тест для оценки скорости перемалывания цифр своим процессором.

Процесс получения результатов включает в себя несколько шагов:

  • установка пакета
  • чтение поставляемой документации
  • создание конфигурационного файла
  • компиляция исходных текстов
  • запуск тестов на выполнение
  • при желании, публикация результатов на сайте SPEC

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

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

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

Естественно, проверяется и правильность выполнения каждого приложения. То есть проводится "тест на качество" - сравнение выходных данных теста с эталоном (например, результатом упаковки или компиляции).

Самым важным процессом при проведении теста является составление конфигурационного файла. В нем указываются все необходимые параметры для компиляции тестов, включая используемые компиляторы, ключи оптимизации, библиотеки и т.п. Этот файл в дальнейшем указывается при всех запусках тестов на компиляцию и исполнение. Публикация результатов также теряет смысл без указания конфигурационного файла, поскольку его содержание более всего влияет на результаты. К сожалению, играть в "а что если…" при настройке этого файла несколько затруднительно — полный (однократный) запуск теста на современных ПК занимает порядка 5 часов, и поэтому для  получения и анализа нескольких результатов нужно потратить много времени (конечно, если у вас только один ПК :).

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

Поскольку в каждом из наборов используется большое количество подтестов, то для оптимизации разных задач могут потребоваться различные ключи оптимизации или даже разные компиляторы. Для сохранения общей стройности и корректности сравнения результатов даже при возникновении такого варианта, в тесте предусмотрено деление на "base" и "peak" тесты.

Первый накладывает более строгие ограничения на компиляцию кода: разрешено использовать один компилятор (для тестов одного языка) и одинаковые ключи оптимизации для него (ограничено и их количество — не более четырех). Допускается использование двухпроходной компиляции (для межмодульной оптимизации). Для получения "peak" метрики пользователь может использовать различные варианты ключей и даже компиляторов для каждого подтеста. Это позволяет в некоторых конфигурациях получить порядка 7% прироста итогового показателя. Однако обычно в публикациях приводят цифры "base" результата. Ну а в рекламных материалах… сами понимаете :)

Еще один выбор, который нужно сделать при проведении теста - выбор так называемой метрики. Тест определяет два варианта — "speed" и "rate". Первая используется для оценки скорости выполнения одной задачи и дает результат в % от скорости базовой системы. Отметим, что допускается применение компилятора, создающего мультипоточный код. Однако, поскольку исходные тексты специально не подготовлены для такого варианта, положительный эффект может быть не очень заметен.

Второй может быть использован для мультипроцессорных систем в условиях одновременного выполнения нескольких задач и дает ответ в "задачах в час". Отметим, что в этом случае параметр количества одновременно выполняемых задач обычно устанавливается (пользователем) равным количеству процессоров (если их, конечно, не 32, например. В таком случае можно оставить один процессор системе). Небольшим недостатком такого подхода является то, что одновременно запускаются одинаковые задачи. Кстати, никто не мешает вам использовать тест "rate" с двумя или более задачами при наличии только одного процессора. Эта информация может быть очень полезна для оценки работы в мультизадачной среде. Не менее интересен и запуск "rate" теста на двухпроцессорной системе с указанием, что необходимо эмулировать работу единственного пользователя. Сравнение полученной цифры со значением для двух одновременно выполняемых задач позволяет оценить масштабируемость архитектуры вычислительной системы.

Для вычисления итоговых оценок теста используются следующие формулы:

"speed" SPEC int/fp= GEOMEAN(reftime/runtime * 100)

"rate" SPEC int/fp= GEOMEAN(1.16 * N * reftime/ruuntime)

где:

  • GEOMEAN: среднее геометрическое по всем подтестам
  • reftime: время выполнения на базовой системе
  • runtime: время выполнения на тестируемом системе
  • N: количество одновременно запускаемых задач

В качестве базовой системы используется SUN Ultra 10 (другие подробности неизвестны). Отметим, что для официальной публикации необходимо, чтобы runtime было вычислено как среднее по минимум трем запускам.

Использование среднего геометрического вместо арифметического позволяет сгладить отличия во времени выполнения отдельных тестов. Это тем более важно, что набор тестов меняется нечасто — современная версия CPU2000 пришла на смену CPU95, а сейчас набираются приложения для включения в версию CPU2004.

Приложения теста CPU2000

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

В этом разделе будут приведены краткие описания всех используемых приложений.

Тест CINT2000 Язык Описание
164.gzip C Версия популярной утилиты компрессии gzip.

Тест выполняет несколько операций сжатия/распаковки над набором файлов, общим объемом 28MB. В набор входит изображение в формате tiff, логфайл веб сервера, приложение в двоичных кодах, файл со случайными данными и tar файл исходных текстов самого gzip. Все операции над данными производятся в оперативной памяти, что позволяет уменьшить влияние дисковой системы, а также повысить зависимость от скорости оперативной памяти.

175.vpr C Программа проектирования интегральных схем.

VPR (Versatile Place and Route) используется для решения задач расположения и связи различных микроблоков FPGA (Field-Programmable Gate Array) чипов для достижения высокой скорости и работы. Во время теста решаются задачи выбора, расположения и связи блоков схемы для выполнения заданного алгоритма ее работы.

176.gcc C Оптимизирующий компилятор языка C.

Основанная на версии gcc 2.7.2.2 программа компилирует код для процессора Motorola 88100, при этом используется множество ключей оптимизации. В качестве исходных данных используются 5 файлов препроцессора (.i файлы) общим объемом 3.7MB.

181.mcf C Программа оптимизации перевозок/транспортных задач.

Решается проблема достижения минимальной стоимости и составляется расписание перевозок с указанием времени прибытия и т.п.

186.crafty C Шахматная программа.

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

197.parser C Приложение анализа синтаксиса английского языка.

Используется словарь из более 60000 словоформ. Анализируется входное множество фраз объемом 770KB.

252.eon C++ Программа компьютерной визуализации.

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

253.perlbmk C Реализация языка PERL

Используется сокращенная версия интерпретатора языка скриптов PERL для решения четырех задач: исполнение скрипта преобразования e-mail в HTML, работа с specdiff (используемый в самом SPEC скрипт с некоторыми изменениями), программа нахождения совершенных чисел и последняя - генерация последовательности случайных чисел.

254.gap C Программа аналитических вычислений в области дискретной алгебры.

В качестве теста используются несколько комбинаторных задач, работа с группами перестановок и другие.

255.vortex C Объектно-ориентированная база данных

Моделируется работа с тремя взаимосвязанными базами (почтовой рассылки, списком устройств и геометрических данных). Программа была специально модифицирована для уменьшения влияния дисковой системы и большинство операций проходит только в оперативной памяти. Используются операции вставки, удаления и поиска по базам. Тест запускает последовательно три различных шаблона работы с информацией.

256.bzip2 C Утилита компрессии

Еще один вариант программы компрессии. В качестве исходных файлов используются изображение, программа и исходный текст. Общий объем данных - почти 20MB.

300.twolf C Компьютерное проектирования интегральных схем.

Оригинальная программа используется при создании литографических шаблонов для изготовлении микрочипов. Решаются задачи взаимного расположения групп транзисторов и прокладки маршрутов между ними.

Как вы видите, набор достаточно разнообразный. Встречаются как знакомые приложения (gcc, gzip) так и "первый раз слышу!". Немного успокаивает то, что приложения тщательно отбирались и проверялись SPEC в течении долгого времени, и такие гранды, как AMD, Compaq, HP и Intel согласились, что они действительно интересны пользователям. Так что если вас лично не интересует решение шахматной задачи, то вполне может быть, что кто-то считает ее самой главной :)

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

Тест CFP2000 Язык Описание
168.wupwise Fortran 77 Физика, квантовая хромодинамика

Решение одного из важнейших уравнений теории сильного взаимодействия кварков — lattice-Dirac методом BiCGStab.

171.swim Fortran 77 Метеорология

Решение разностного уравнения мелководья. Ранее использовалась для сравнения мощности суперкомпьютеров.

172.mgrid Fortran 77 Вычисления на множестве сеток (Multigrid Solver)

Расчет трехмерного потенциального поля. Также относится к стандартным тестам суперкомпьютеров.

173.applu Fortran 77 Вычислительная физика и гидродинамика

Решается система из пяти нелинейных уравнений в частных производных на трехмерной сетке. Используется неявный метод.

177.mesa C Библиотека трехмерной графики

Реализуется набор функций, аналогичный популярному интерфейсу OpenGL.

178.galgel Fortran 90 Вычислительная гидродинамика

Численные вычисления параметров движения жидкости в закрытом пространстве.

179.art C Нейронная сеть

Используется модель нейронной сети для распознавания образов

183.equake C Моделирование сейсмической задачи

Рассчитывается распространение сейсмических волн на больших неоднородных пространствах методом конечных элементов.

187.facerec Fortran 90 Обработка изображений

Решается  задача распознавания человеческого лица.

188.ammp C Вычислительная химия

Решение задач молекулярной динамики для систем из большого количества молекул, характерных для биологии.

189.lucas Fortran 90 Теория чисел

Проверка простоты чисел Мерсенна методом Лукаса-Лехмера.

191.fma3d Fortran 90 Моделирование механических деформаций

Метод конечных элементов используется для моделирования переходных характеристик при  импульсных нагрузках на трехмерные тела

200.sixtrack Fortran 77 Ядерная физика

Решается задача моделирования работы ускорителя частиц и расчета динамической апертуры для проверки устойчивости луча

301.apsi Fortran 77 Предсказание погоды

Рассчитывается распространение загрязняющего вещества в зависимости от погодных условий.  

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

Заключение

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