Введение

Компьютерная программа для тестирования производительности

Dhrystone – это синтетическая программа для тестирования вычислительной производительности, разработанная в 1984 году Рейнхольдом П. Вайкером и предназначенная для моделирования системного (целочисленного) программирования. Dhrystone стал показателем общей производительности процессора (CPU). Название "Dhrystone" является игрой слов, основанной на названии другого эталонного алгоритма – Whetstone, который акцентирует внимание на производительности операций с плавающей точкой. Используя Dhrystone, Вайкер собрал метаданные из широкого спектра программного обеспечения, включая программы, написанные на FORTRAN, PL/1, SAL, ALGOL 68 и Pascal. Затем он проанализировал эти программы с точки зрения часто встречающихся конструкций: вызовов процедур, косвенной адресации указателей, присваиваний и т.д. На основе этого анализа он создал эталон Dhrystone, отражающий типичное сочетание этих конструкций. Dhrystone был опубликован на языке Ada, а версия на языке C для Unix, разработанная Риком Ричардсоном ("версия 1.1"), значительно способствовала его популярности.

Дристон против Уэтстоуна

Эталонный тест Dhrystone не содержит операций с плавающей точкой, поэтому его название – игра слов, основанная на популярном в то время тесте Whetstone, предназначенном для операций с плавающей точкой. Результатом теста является количество Dhrystones в секунду (число итераций основного цикла кода за секунду). И Whetstone, и Dhrystone – это синтетические тесты, то есть простые программы, тщательно разработанные для статистического моделирования загрузки процессора типичными программами. Whetstone, разработанный в 1972 году, изначально был призван моделировать типичные программы на Algol 60, основываясь на измерениях 1970 года, но в итоге наибольшую популярность приобрел в версии на Fortran, что отражает сильную ориентацию вычислений на числовые задачи в 1960-х годах.

Вопросы, которые решает Dhrystone

Значимость Dhrystone как индикатора производительности новых компьютеров общего назначения ("целочисленных") сделала его целью для разработчиков коммерческих компиляторов. Различные современные методы статического анализа кода компилятора (например, исключение неиспользуемого кода: например, кода, который использует процессор, но генерирует внутренние результаты, которые не используются или выводятся) затрудняют использование и разработку синтетических тестов. Версия 2.0 теста, выпущенная Вайкером и Ричардсоном в марте 1988 года, содержала ряд изменений, направленных на противодействие различным компиляторным методикам. Однако она была тщательно разработана так, чтобы не изменять базовый тест. Эти попытки противодействия компиляторам оказались лишь частично успешными. Dhrystone 2.1, выпущенный в мае того же года, содержал некоторые незначительные изменения и по состоянию на 2010 год остается действующим определением Dhrystone. Помимо проблем, связанных с оптимизацией компилятора, с Dhrystone были выявлены и другие недостатки. Большинство из них, включая небольшой размер кода и небольшой объем данных, были понятны уже во время публикации в 1984 году. Более тонким является небольшое перекос в сторону строковых операций, которое во многом связано с языком: и Ada, и Pascal имеют строки как обычные переменные языка, в то время как C – нет, поэтому простое присваивание переменных в эталонных тестах превратилось в операции копирования буфера в библиотеке C. Другой проблемой является то, что публикуемый результат не содержит критически важной информации для сравнения систем, такой как используемый компилятор и примененные оптимизации. Dhrystone остается удивительно устойчивым в качестве простого теста, но его ценность в определении реальной производительности вызывает сомнения. Он прост в использовании, хорошо документирован, полностью самодостаточен, хорошо понятен и может работать практически на любой системе. В частности, он по-прежнему широко используется в мире встраиваемых вычислений, хотя недавно разработанные наборы тестов EEMBC, автономный тест CoreMark, HINT, Stream и даже Bytemark широко цитируются и используются, а также более специализированные тесты для подсистемы памяти (Cachebench), TCP/IP (TTCP) и многих других.

Результаты

Dhrystone может представлять результат более осмысленно, чем MIPS (миллион инструкций в секунду), поскольку сравнение количества инструкций между различными архитектурами (например, RISC и CISC) может искажать простые сопоставления. Например, одна и та же задача высокого уровня может потребовать значительно больше инструкций на машине RISC, но при этом выполняться быстрее, чем одна инструкция CISC. Таким образом, показатель Dhrystone учитывает только количество завершенных итераций программы в секунду, позволяя каждой машине выполнять этот расчет специфичным для нее способом. Другим распространенным способом представления результатов теста Dhrystone является DMIPS (Dhrystone MIPS), получаемый путем деления результата Dhrystone на 1757 (количество Dhrystone в секунду, достигнутое на VAX 11/780, который номинально считается машиной с производительностью 1 MIPS). Еще один способ представления результатов – в DMIPS/MHz, где значение DMIPS дополнительно делится на частоту процессора, чтобы упростить сравнение процессоров, работающих на разных тактовых частотах.