- •Глава 38. Оценка производительности компьютеров
- •38.1. Необходимость оценки производительности компьютеров
- •38.2. Способы оценки пиковой производительности
- •38.3. Оценка производительности компьютерных систем, ориентированных на «сценарную» обработку
- •38.4. Оценка производительности персональных компьютеров с использованием бенчмарков
- •«Узкие» места, обусловленные иерархической структурой памяти
- •38.6. Контрольные вопросы
38.2. Способы оценки пиковой производительности
Исторически одной из первых оценок пиковой производительности компьютера была оценка «число команд, выполняемых компьютером в единицу времени» (MIPS - Million Instructions Per Second). Для определенного класса приложений такой подход является вполне приемлемым, поскольку общее представление о скорости работы компьютера получить можно. Но, опять-таки, только самое общее. Производительность, выраженная в MIPS, говорит о скорости выполнения компьютером своих же команд. Но в какое число команд отобразится программа пользователя или отдельный ее оператор? Заранее не ясно. К тому же каждая программа обладает своей спецификой, число команд той или иной группы от программы к программе может меняться очень сильно. В этом контексте данная характеристика действительно дает лишь самое общее представление о производительности компьютера.
Для задач вычислительного характера, в которых важна высокая скорость выполнения операций над вещественными числами, подход к определению производительности не должен опираться на скорость выполнения машинных команд. Во многих случаях операции над вещественными числами выполняются медленнее, чем, скажем, управляющие или целочисленные операции. За время выполнения одной операции деления двух чисел в формате с плавающей точкой может выполниться десяток простых команд. Это послужило причиной введения другой оценки пиковой производительности: «число вещественных операций, выполняемых компьютером в единицу времени» (FLOPS - Floating point operations per second). Такой способ, безусловно, ближе и понятнее пользователю. Операция (а + b) в тексте программы соответствует одной операции сложения в программе. Пользователь знает вычислительную сложность своей программы, а на основе этой характеристики может получить нижнюю оценку времени ее выполнения.
Да, к сожалению, оценка будет только нижней. В этом и кроется причина недовольства и разочарований. Взяв за ориентир пиковую производительность компьютера, пользователь рассчитывает и на своей программе получить столько же. Совершенно не учитывается тот факт, что пиковая производительность получается при работе компьютера в идеальных условиях. Нет конфликтов при обращении к оперативной памяти, все данные берутся из регистров, все функциональные устройства постоянно и равномерно загружены и т. п. Но в жизни так бывает редко. В каждой программе пользователя есть свои особенности, которые эти идеальные условия нарушают, обнажая «узкие» места структуры компьютера. Особенности структуры ядра, системы команд, состав функциональных исполнительных устройств, строение и объем кэш-памяти, структура подсистемы доступа в память, реализация ввода-вывода — все это, и не только это, может влиять на выполнение реальной программы. Причем заметим, перечислены только части аппаратуры, а говорить надо о программно-аппаратной среде выполнения программ в целом. Если для компьютера нет эффективных компиляторов, то пиковая производительность будет вводить в заблуждение еще сильнее.
Значит нужно отойти от характеристик аппаратуры и оценить эффективность работы программно-аппаратной среды на фиксированном наборе задач. Бессмысленно для каждого компьютера показывать свой набор. Разработчики без труда придумают такие программы, выполняя которые компьютер не достигает пиковой производительности. Такие примеры никого не убедят. Набор тестовых программ должен быть зафиксирован. Эти программы будут играть роль эталона, по которому будут судить о возможностях компьютера.
Такие попытки предпринимались неоднократно. На основе различных критериев формировались тестовые наборы программ или фиксировались отдельные эталонные программы (benchmark). Эталонные программы (тесты) запускались на различных компьютерах, замерялись те или иные параметры, на основе которых впоследствии проводилось сравнение компьютеров между собой.
Тесты SPEC
Среди известных тестов, используемых сегодня для оценки производительности вычислительных систем, можно назвать тесты SPEC. Разработчиком тестов SPEC является Standard Performance Evaluation Corporation. Это некоммерческий консорциум, в который входят производители компьютеров и программного обеспечения, учебные и научные организации. Основная задача консорциума состоит в разработке тестов для самых разных программно-аппаратных сред, моделирующих реальные рабочие нагрузки. В состав тестового набора входят тесты вычислительного характера, тесты скорости работы компьютера в качестве Web-сервера, почтового сервера, тесты графических подсистем и многие другие. В их состав включен и пакет SPEChpc, призванный отразить оценку производительности многопроцессорных компьютеров. Состав тестов часто меняется, что вызвано желанием консорциума оперативно отражать последние достижения в развитии компьютеров.
Так уж сложилось, что тесты SPEC, в основном, используются для оценки производительности традиционных компьютеров. Здесь у разработчиков есть большой опыт, задача более обозримая, разработаны методики.
Одна из серьезных проблем многих тестов состоит в аккуратном подборе размера задачи.
Однако, что бы ни говорили создатели тестовых пакетов и программ, скепсис по поводу получаемых с их помощью результатов у пользователей пока остается. Во многом это связано с тем, что тестирование не дает полного представления о работе компьютера в различных режимах. Любой тест приоткрывает лишь часть общей картины. Результат его работы можно условно считать точкой в пространстве, описывающем поведение компьютера в целом. Если рассматривается набор тестов, то в пространстве будем иметь несколько точек. Ясно, что кардинально это проблему не решает. Объем полученной выборки не может быть сравним со всем многообразием вариантов поведения тестируемого компьютера на реальных программах и наборах данных.
Хорошим вариантом для описания свойств компьютера можно было бы считать возможность выделения в таком пространстве некоторого набора характерных опорных точек. Но что считать характерной точкой и как интерполировать поведение компьютера на конкретной программе по значениям базовых параметров в выделенных характерных точках? Другой способ описания можно попытаться найти через определение функциональной зависимости свойств компьютера от параметров его программно-аппаратной среды. Однако в аналитическом виде достаточно точные оценки получить крайне сложно.
Поскольку никакое одно число или даже набор чисел не будут универсальной характеристикой производительности компьютера, то при необходимости получения истинной картины о свойствах компьютера идут по пути комплексного тестирования программно-аппаратной среды в целом. Определяют параметры работы компьютера на большом наборе программ, имеющих различные вычислительно-коммуникационные характеристики. Такая работа, как правило, тяжела и трудоемка, но другого пути в настоящий момент времени нет. В зависимости от целей тестирования выделяют и используют следующие уровни:
базовый уровень программного обеспечения: тестирование эффективности работы операционной системы, компиляторов и систем программирования. Этот уровень рассматривается далеко не всегда, но нужно учесть, что все последующие действия будут "видны" через призму данного уровня (если компилятор плох, то хороших результатов не будет ни на одном другом уровне);
базовый уровень аппаратуры: определение скорости выполнения элементарных операций, скорости обмена между различными уровнями иерархии памяти и объемы доступной памяти на каждом уровне (определение объемов важно для последующей интерпретации результатов);
уровень операций ввода-вывода: анализ эффективности различных режимов чтения и записи данных при работе с внешними устройствами, определение скорости выполнения основных операций с файлами и целесообразности выполнения асинхронных операций ввода-вывода;
уровень модельных приложений: определение характеристик компьютера при выполнении простых программ различной структуры;
уровень приложений: комплексная проверка характеристик компьютера при выполнении реальных программ.
Ясно, что задача определения производительности компьютеров сложна и на сегодня еще далека от своего решения. Слишком много параметров, зачастую противоречивых, приходится учитывать при конструировании реальных тестовых программ. Состав операций, коммуникационный профиль, требуемый размер памяти на каждом уровне иерархии, простота переноса между вычислительными платформами, время работы, базовые вычислительные конструкции, простота интерпретации результатов — все это, как и многое другое, должно приниматься в расчет авторами тестов.
