Как рассчитать пиковую производительность процессора
Аннотация: Цель лекции: изучение методов и средств оценки производительности микропроцессоров и микропроцессорных систем различных классов.
Краткий обзор
Статья описывает характеризацию (прим. переводчика — характеризация — выявление характерных признаков) и методологию оптимизации 3D алгоритма конечных разностей (3DFD), который используется для решения акустического волнового уравнения с константной или переменной плотностью изотропной среды (Iso3DFD). Начиная с простейшей реализации 3DFD, мы опишем методологию для оценки наилучшей производительности, которая может быть получена для данного алгоритма, с помощью его характеризации на конкретной вычислительной системе.
Оценка производительности
- Пиковое значение производительности и пропускной способности памяти (теоретические): 2420 GFLOP/s в одинарной точности и 352 GB/s для Intel Xeon Phi 7120A; 1036 GFLOP/s в одинарной точности и 119 GB/s для 2 процессоров Intel Xeon E5-2697v2 с 1866 MHz DDR3 памятью.
- Значения полученные на Linpack (или GEMM) and STREAM triad бенчмарках дают нам соответствующие показатели максимальной производительности на платформе: 2178 GFLOP/s и 200 GB/s для Intel Xeon Phi 7120A; 930 GFLOP/s и 100 GB/s для 2 процессоров Intel Xeon E5-2697v2 с 1866 MHz DDR3 памятью.
- Арифметическая интенсивность приложения рассчитывается на базе количества сложений и умножений (ADD, MUL) чисел с плавающей запятой и количества байт пересланных из памяти и определенной количеством загрузок и записей в память (LOAD, STORE).
Последний пункт следует из предположения, что вычислительная система имеет кэш с бесконечной пропускной способностью памяти и размером, а также имеет нулевую задержку на доступ к данным (latency). Это определяет своего рода безупречную подсистему памяти, где любой массив загружается полностью даже в том случае, если требуется всего 1 элемент.
Несколько других факторов также могут влиять на производительность всего приложения, использующая 3DFD ядро – выбор граничных условий, IO схема при обращении во времени, а также технология или модель параллельного программирования. Однако, в приведенном здесь анализе мы не рассматриваем граничные условия и IO. Параллельная реализация решения данной задачи использует метод domain decomposition для распределенных систем с использованием MPI стандарта вместе с параллелизмом по потокам на вычислительном узле с использованием OpenMP. В данной работе рассматривается вычисления в подобласти на одном узле вычислительной системы.
Арифметическая интенсивность платформы
Наша тестовая система состоит из двух CPU Xeon E5-2697 (2S-E5) с 12 ядрами на один CPU, каждый запущен с частотой 2.7 ГГц без турбо режима. Данные процессоры поддерживают AVX расширение набора инструкций с 256-битной шириной векторных регистров. Данные инструкции могут выполнять вычисления с 8 числами с плавающей запятой в одинарной точности (32 бита) одновременно (за один такт CPU). Таким образом, теоретическую пиковую производительность можно посчитать как 2.7 (GHz) x 8 (SP FP) x 2 (ADD/MULL) x 12 (cores) x 2 (CPUs) = 1036,8 GFLOP/s. Пиковая пропускная способность рассчитывается с помощью частоты памяти (1866 ГГц), количества каналов памяти [4], количества байт пересылаемых в один такт (8), что дает 1866 x 4 x 8 x 2(CPUs) = 119 GB/s для двухпроцессорного узла 2S-E5. Также, нам необходимо оценить реально достижимые значения пропускной способности и производительности для характеризации поведения приложения. В качестве первого приближения допустим, что производительность любого реального приложения может быть ограничена пропускной способностью памяти (totally bandwidth bound), что в данной работе оценивается с помощью Stream triad или быстродействием процессора (totally FLOP/s bound или compute bound или CPU bound), что показывает бенчмарк Linpack. Выбор именно этих двух бенчмарков является чисто гипотетическим, но мы можем утверждать, что если они и далеки от идеальных оценок, то уж точно они лучше подходят в качестве приближения, чем пиковые теоретические значения вычислительной системы.
На 2S-E5 системе Linpack дает 930 GFLOP/s, а Stream triad 100 GB/s. Далее мы можем посчитать арифметическую интенсивность (AI) для теоретических и реальных максимальных показателей соответственно, как:
AI (theoretical, CPU) = 1036,8 / 119 = 8,7 FLOP/byte
AI (achievable, CPU) = 930 / 100 = 9,3 FLOP/byte
С данными значениями мы можем характеризовать любое вычислительное ядро следующим образом: если арифметическая интенсивность ядра больше (меньше) чем 9,3 FLOP/byte мы можем сказать, что это ядро ограничено быстродействием процессора — CPU bound (пропускной способностью памяти – memory bound).
Аналогичные расчеты на Linpack и Stream triad для Xeon Phi дают 2178 GFLOP/s и 200 GB/s соответственно. Теоретические пиковые оценки — 2420 GFLOP/s и 352 GB/s. Таким образом, арифметическая интенсивность будет равна:
AI (theoretical, Phi) = 2420,5 / 352 = 6,87 FLOP/byte
AI (achievable, Phi) = 2178 / 200 = 10,89 FLOP/byte
Арифметическая интенсивность вычислительного ядра
Roofline модель также требует вычисления арифметической интенсивности данного приложения. Она может быть получена через подсчет количества арифметических операций и доступов в память путем визуальной инспекции кода или с помощью специальных средств имеющих доступ к счетчикам вычислительной системы. В рамках стандартного вычислительного ядра схемы конечных разностей [5] мы можем найти 4 загрузки (coeff, prev, next, vel), 1 запись (next), 51 сложение (вычисления индексов не берутся в расчет) и 27 умножений (рисунок 3).
Рисунок 3. Исходный код вычислительного ядра с cache blocking
Арифметическая интенсивность может быть рассчитана по формуле:
Это дает арифметическую интенсивность, равную 3,9 FLOP/byte, которую мы умножим на теоретическую пропускную способность каждой платформы для получения первой оценки максимально достижимой производительности для данного алгоритма. Получим 1372,8 GFLOP/s на Xeon Phi и 461,1 GFLOP/s на 2S-E5. Однако теоретическое пиковое значение производительности предполагает параллельное использование двух конвейеров (один для ADD, другой для MUL), что невозможно в данном вычислительном ядре из-за дисбаланса между сложениями и умножениями, таким образом, данный код не сможем достичь этого оцененного максимального значения. А это значит, что достижимое максимальное значение следует усреднить с помощью:
что отражает отношение общего возможного количества операций при 16 операциях с плавающей запятой на такт (ops/cycle) и максимально количества сложений и умножений, которые исполняются при 8 ops/cycle, предполагая использование одной 256-битной AVX SIMD вычислительной единицы. Это даст теоретическую оценку пиковой производительности, учитывающую дисбаланс сложений и умножений.
Рисунки 1 и 2 показывают Roofline модель с верхними границами в 354,9 GFLOP/s и 1049,8 GFLOP/s для 2S-E5 и Xeon Phi соответственно, полученных с помощью этой усредненной версией арифметической интенсивности.
Более реалистичная roofline модель может быть получена при использовании пропускной способности Stream triad бенчамарка умноженной на арифметическую интенсивность вычислительного ядра (390 GFLOP/s и 780 GFLOP/s соответственно). Еще более реалистичную модель можно получить, если учесть некоторый дисбаланс сложений и умножений (с помощью (2)), что показано красной пунктирной линией. Новая верхняя граница будет равна около 298 GFLOP/s для 2S-E5 и 596 GFLOP/s для Xeon Phi. Так как наша модель основана на безупречной модели кэш-памяти, мы предполагаем, что получившиеся значения все еще являются грубой оценкой максимально достижимых значений производительности. Как продемонстрировано в [2], можно улучшить получившийся roofline добавлением некоторых новых сущностей в характеризацию вычислительной системы, как, например, влияние и ограничения кэш памяти.
Как вычислить пиковую производительность данных с одинарной точностью и данных с двойной точностью для процессора Intel (R) Core (TM) i7-3770. "cat / proc / cpuinfo" linux находится ниже, он последний:
Был подобный вопрос под названием « Как вычислить теоретическую пиковую производительность ЦП» , ответ дал формулы для вычисления пиковой производительности, и он обеспечивает пиковую производительность двойной точности. Итак, как вычислить производительность одинарной точности? Может ли кто-нибудь дать две формулы для вычисления как данных одинарной точности, так и данных двойной точности соответственно.
Данные с плавающей запятой выполняются модулем SSE, один из i7-3770 - SSE4.1 / 4.2, AVX , поэтому другой вопрос заключается в том, что разные версии SSE предоставляют разные инструкции ЦП за цикл для данных с одинарной точностью и с двойной точностью. ? где я могу найти подробный документ.
Для новейших x86 с SIMD пиковая производительность одинарной точности в два раза превышает пиковую производительность двойной точности.
Пиковая производительность процессора Intel (R) Core (TM) i7-3770 с частотой одинарной точности при 3,40 ГГц составляет 3,4 ГГц * 2 (сложение, сложение) * 4 (одинарная точность SIMD) * 4 (физическое ядро) = 108,8 Гфлопс?
Для системы с одним процессором (и одним сокетом) вот уравнение:
GFLOPS = количество ядер × частота ядра (ГГц) × количество операций за такт
Для уравнения вы используете физические ядра, а не логические (потоки). Кроме того, количество операций, которые ядро процессора может выполнять в секунду, зависит от архитектуры рассматриваемого процессора и от того, нужны ли вам числа с одинарной или двойной точностью. Я объясню это немного подробнее ниже.
Расчет производительности FLOP для старых архитектур процессоров немного сложнее, чем для более новых чипов, к которым мы привыкли. Если вы не планируете рассчитывать FLOP / цикл для любого чипа старше K8 или Core2, то вы можете упустить этот раздел. Тем не менее, одна вещь, которую следует извлечь из этого, заключается в том, что такие расширения набора инструкций могут влиять на количество FLOP / цикл, которое может выполнить чип. Например, Pentium 4 без расширений набора команд может выполнять в лучшем случае 1 FLOP / цикл с одинарной точностью. Однако при использовании SSE он может выполнять 4 FLOP / цикл с одинарной точностью. Вдобавок двойная точность для Pentium 4 увеличивается вдвое с 1 FLOP / цикл без расширений до 2 FLOP / цикл с использованием SSE2.
Если поддерживаются инструкции SSE, за каждый такт может выполняться 4 FLOP. Это относится как к процессорам Intel, так и к процессорам AMD, которые поддерживают инструкции SSE.
Инструкции SSE2 допускают 2 FLOP на каждый цикл для арифметических операций с двойной точностью. SSE2 не влияет на одинарную точность. Опять же, это относится к обоим поставщикам, хотя имейте в виду. Ограниченный модельный ряд процессоров AMD поддерживал SSE2 на ранней стадии внедрения, и именно здесь вступает в силу последний набор инструкций .
3DNow! инструкции используются только частями AMD. В пределах FLOPs / цикл функциональность идентична инструкциям SSE. Поэтому чипы AMD, поддерживающие 3DNow! но без поддержки SSE, все еще может выполнять 4 FLOP за такт для одинарной точности. 3DNow! не влияет на двойную точность. Существуют также модели AMD, поддерживающие как 3DNow! и инструкции SSE. Почему ты спрашиваешь? Функциональность этих инструкций выходит за рамки улучшений FLOP, и одна предлагает функции, которых нет в другой, и наоборот. Это выходит за рамки того, о чем вы спрашиваете, но я счел необходимым уточнить, чтобы избежать путаницы.
И Intel, и AMD любят рассчитывать FLOP / цикл при включенных расширениях набора инструкций, поэтому я бы посоветовал вам сделать то же самое.
С новыми архитектурами это не должно вызывать беспокойства. Все семейства Intel от Pentium III поддерживают SSE, а от Pentium 4 - SSE2. Все семейства AMD от K6-2 поддерживают 3DNow !, а от Athlon XP / MP, Duron и Sempron поддерживают SSE. Поддержка SSE2 в чипах AMD появилась только в Athlon 64 и его собратьях, Sempron и Turion 64.
(Обратите внимание, что следующий список содержит имена архитектур, а не имена семейств процессоров.)
- P5 и P6 (без ISE) + Pentium Pro и Pentium II = 1 (одиночный); 1 (двойной)
- P6 (только Pentium III) = 4 (одиночный); 1 (двойной)
- NetBurst = 4 (одиночный); 2 (двойной)
- Pentium M и Enhanced Pentium M = 4 (одиночный); 2 (двойной)
- Core, Penryn, Nehalem & Westmere = 8 (одиночный); 4 (двойной)
- Sandy Bridge и Ivy Bridge = 16 (одиночный); 8 (двойной)
- Haswell, Broadwell, Skylake (LGA1151 и мобильные устройства), Kaby Lake и Coffee Lake = 32 (одиночный); 16 (двойной)
- Skylake ("Skylake-X" Core i7 и Core i9 [LGA2066]) = 128 (одиночный); 64 (двойной)
- Skylake ("Skylake-SP" Xeon Bronze & Xeon Silver) = 64 (одиночный); 32 (двойной)
- Skylake ("Skylake-SP" Xeon Gold & Xeon Platinum) = 128 (одиночный); 64 (двойной)
- Bonnell, Saltwell, Silvermont & Airmont = 6 (одиночный); 1,5 (двойной)
- MIC ("Knights Corner" Xeon Phi) = 32 (одиночный); 16 (двойной)
- MIC («Приземление рыцарей» Xeon Phi) = 64 (одиночный); 32 (двойной)
- K5 и K6 = 0,5 (одиночные); 0,5 (двойной)
- K6-2 и K6-III = 4 (одиночные); 0,5 (двойной)
- K7 и K8 = 4 (одиночные); 2 (двойной)
- K10 / Stars = 8 (одиночный); 4 (двойной)
- Хаски = 8 (одиночный); 4 (двойной)
- [Примечание] Bulldozer, Piledriver, Steamroller & Excavator = 8 (single); 4 (двойной)
- Дзен и Дзен + = 16 (одиночный); 8 (двойной)
- Дзен 2 = 32 (одиночный); 16 (двойной)
- Bobcat = 4 (одиночный); 1,5 (двойной)
- Ягуар, Пума и Пума + = 8 (одиночные); 3 (двойной)
Примечание. Общие FPU означают, что на каждые два ядра приходится один FPU. Несмотря на то, что распространяется в Интернете, AMD утверждает, что A10-7850K на базе Steamroller способен обрабатывать 856 гигафлопов SP; 737 из них - это встроенная графика Radeon R7, а 119 - для процессора. Для достижения 119 SP GFLOP требуется 8 FLOP на цикл. Это должно относиться ко всем вариантам Bulldozer, так как конструкция FPU во всем осталась идентичной.
Я пытаюсь понять расчет пределов производительности для доступа к DRAM, но мои тесты для достижения этих пределов не очень близки к числам, которые можно найти в спецификациях. Конечно, нельзя ожидать достижения теоретического предела, но могут быть некоторые объяснения, почему это так далеко.
Например, я измеряю около 11 ГБ / с для доступа к DRAM в моей системе, но WikiChip или спецификация JEDEC указывают пиковую производительность для двухканальной системы DDR4-2400 на уровне 38,4 ГБ / с.
Мои измерения ошибочны или это просто неправильные числа для расчета пиковой производительности памяти?
это случай, который lshw показывает две memory записи
поэтому эти два должны работать в "двухканальном" режиме (это происходит автоматически?).
Я настроил систему, чтобы уменьшить шум измерения с помощью
- отключение частотного масштабирования
- отключение рандомизации адресного пространства
- установка scaling_governor на performance
- использование, cpuset чтобы изолировать тест на собственном ядре
- установка приятности -20
- использование безголовой системы с минимальным количеством запущенных процессов
Затем я начал с ScanWrite256PtrUnrollLoop тестирования программы pmbw - Parallel Memory Bandwidth Benchmark / Measurement :
Внутренний цикл можно исследовать с помощью
Похоже, что этот тест создает «поток» AVX256-инструкций vmovdqa Move Aligned Packed Integer Values для насыщения подсистемы памяти процессора.
В качестве аналогичного теста в Юлии я придумал следующее:
При исследовании внутреннего цикла этой fill! функции
Все эти тесты так или иначе показывают разные «плато производительности» для трех кешей и основной памяти:
но что интересно, все они привязаны к скорости около 11 ГБ / с для тестов большего размера:
использование нескольких потоков и (повторная) активация масштабирования частоты (которая удваивает частоту процессора) влияет на меньшие тесты, но не меняет эти результаты для больших.
В Julia это можно сделать vstorent из пакета SIMD.jl :
который для ширины вектора 4 × Float64 и коэффициента развертки 16 компилируется
который достигает до 34 ГБ / с почти 90% от теоретического максимума 38,4 ГБ / с.
Достигнутая полоса пропускания, похоже, зависит от разных вещей: например, от количества потоков и от того, включено ли масштабирование частоты:
Измеренная пиковая производительность в моей системе может быть достигнута с помощью одного потока, когда частота масштабируется на максимум (4 ГГц «турбо» вместо 1,8 ГГц «no_turbo» ), но это не может быть достигнуто без масштабирования частоты (например, на 1,8 ГГц). - даже не с несколькими потоками.
Аннотация: Данная лекция описывает сферы применения и типы многопроцессорных вычислительных систем. Приводятся определения пиковой и реальной производительности вычислительной системы, а также способы их оценки.
В настоящее время сфера применения многопроцессорных вычислительных систем (МВС) непрерывно расширяется, охватывая все новые области в различных отраслях науки, бизнеса и производства. Стремительное развитие кластерных систем создает условия для использования многопроцессорной вычислительной техники в реальном секторе экономики.
Если традиционно МВС применялись в основном в научной сфере для решения вычислительных задач, требующих мощных вычислительных ресурсов, то сейчас из-за бурного развития бизнеса резко возросло количество компаний, отводящих использованию компьютерных технологий и электронного документооборота главную роль. В связи с этим непрерывно растет потребность в построении централизованных вычислительных систем для критически важных приложений, связанных с обработкой транзакций , управлением базами данных и обслуживанием телекоммуникаций. Можно выделить две основные сферы применения описываемых систем: обработка транзакций в режиме реального времени ( OLTP , on-line transaction processing ) и создание хранилищ данных для организации систем поддержки принятия решений ( Data Mining , Data Warehousing, Decision Support System ). Система для глобальных корпоративных вычислений — это, прежде всего, централизованная система, с которой работают практически все пользователи в корпорации, и, соответственно, она должна все время находиться в рабочем состоянии. Как правило, решения подобного уровня устанавливают в компаниях и корпорациях, где даже кратковременные простои сети могут привести к громадным убыткам. Поэтому для организации такой системы не подойдет обыкновенный сервер со стандартной архитектурой, вполне пригодный там, где нет жестких требований к производительности и времени простоя. Высокопроизводительные системы для глобальных корпоративных вычислений должны отличаться такими характеристиками как повышенная производительность , масштабируемость , минимально допустимое время простоя.
Наряду с расширением области применения по мере совершенствования МВС происходит усложнение и увеличение количества задач в областях, традиционно использующих высокопроизводительную вычислительную технику . В настоящее время выделен круг фундаментальных и прикладных проблем, эффективное решение которых возможно только с использованием сверхмощных вычислительных ресурсов. Этот круг, обозначаемый понятием "Grand challenges", включает следующие задачи:
- предсказания погоды, климата и глобальных изменений в атмосфере;
- науки о материалах;
- построение полупроводниковых приборов;
- сверхпроводимость;
- структурная биология;
- разработка фармацевтических препаратов;
- генетика;
- квантовая хромодинамика;
- астрономия;
- транспортные задачи;
- гидро- и газодинамика;
- управляемый термоядерный синтез;
- эффективность систем сгорания топлива;
- геоинформационные системы;
- разведка недр;
- наука о мировом океане;
- распознавание и синтез речи;
- распознавание изображений.
Многопроцессорные вычислительные системы могут существовать в различных конфигурациях. Наиболее распространенными типами МВС являются:
- системы высокой надежности ;
- системы для высокопроизводительных вычислений ;
- многопоточные системы .
Отметим, что границы между этими типами МВС до некоторой степени размыты, и часто система может иметь такие свойства или функции, которые выходят за рамки перечисленных типов. Более того, при конфигурировании большой системы, используемой как система общего назначения , приходится выделять блоки, выполняющие все перечисленные функции.
МВС являются идеальной схемой для повышения надежности информационно-вычислительной системы. Благодаря единому представлению, отдельные узлы или компоненты МВС могут незаметно для пользователя заменять неисправные элементы, обеспечивая непрерывность и безотказную работу даже таких сложных приложений как базы данных .
Катастрофоустойчивые решения создаются на основе разнесения узлов многопроцессорной системы на сотни километров и обеспечения механизмов глобальной синхронизации данных между такими узлами.
МВС для высокопроизводительных вычислений предназначены для параллельных расчетов. Имеется много примеров научных расчетов, выполненных на основе параллельной работы нескольких недорогих процессоров, обеспечивающих одновременное проведение большого числа операций.
МВС для высокопроизводительных вычислений обычно собраны из многих компьютеров. Разработка таких систем – процесс сложный, требующий постоянного согласования таких вопросов как инсталляция , эксплуатация и одновременное управление большим числом компьютеров, технических требований параллельного и высокопроизводительного доступа к одному и тому же системному файлу (или файлам), межпроцессорной связи между узлами и координации работы в параллельном режиме. Эти проблемы проще всего решаются при обеспечении единого образа операционной системы для всего кластера. Однако реализовать подобную схему удается далеко не всегда, и обычно она применяется лишь для небольших систем.
Многопоточные системы используются для обеспечения единого интерфейса к ряду ресурсов, которые могут со временем произвольно наращиваться (или сокращаться). Типичным примером может служить группа web-серверов.
Главной отличительной особенностью многопроцессорной вычислительной системы является ее производительность , т.е. количество операций, производимых системой за единицу времени. Различают пиковую и реальную производительность . Под пиковой понимают величину, равную произведению пиковой производительности одного процессора на число таких процессоров в данной машине. При этом предполагается, что все устройства компьютера работают в максимально производительном режиме. Пиковая производительность компьютера вычисляется однозначно, и эта характеристика является базовой, по которой производят сравнение высокопроизводительных вычислительных систем . Чем больше пиковая производительность , тем (теоретически) быстрее пользователь сможет решить свою задачу. Пиковая производительность есть величина теоретическая и, вообще говоря, недостижимая при запуске конкретного приложения. Реальная же производительность, достигаемая на данном приложении, зависит от взаимодействия программной модели, в которой реализовано приложение, с архитектурными особенностями машины, на которой приложение запускается.
Существует два способа оценки пиковой производительности компьютера. Один из них опирается на число команд, выполняемых компьютером за единицу времени. Единицей измерения, как правило, является MIPS (Million Instructions Per Second ). Производительность , выраженная в MIPS , говорит о скорости выполнения компьютером своих же инструкций. Но, во-первых, заранее не ясно, в какое количество инструкций отобразится конкретная программа , а во-вторых, каждая программа обладает своей спецификой, и число команд от программы к программе может меняться очень сильно. В связи с этим данная характеристика дает лишь самое общее представление о производительности компьютера.
Другой способ измерения производительности заключается в определении числа вещественных операций, выполняемых компьютером за единицу времени. Единицей измерения является Flops (Floating point operations per second ) – число операций с плавающей точкой , производимых компьютером за одну секунду. Такой способ является более приемлемым для пользователя, поскольку ему известна вычислительная сложность программы, и, пользуясь этой характеристикой, пользователь может получить нижнюю оценку времени ее выполнения.
Однако пиковая производительность получается только в идеальных условиях, т.е. при отсутствии конфликтов при обращении к памяти при равномерной загрузке всех устройств. В реальных условиях на выполнение конкретной программы влияют такие аппаратно-программные особенности данного компьютера как: особенности структуры процессора, системы команд, состав функциональных устройств, реализация ввода/вывода, эффективность работы компиляторов.
Одним из определяющих факторов является время взаимодействия с памятью, которое определяется ее строением, объемом и архитектурой подсистем доступа в память . В большинстве современных компьютеров в качестве организации наиболее эффективного доступа к памяти используется так называемая многоуровневая иерархическая память . В качестве уровней используются регистры и регистровая память, основная оперативная память , кэш-память, виртуальные и жесткие диски, ленточные роботы. При этом выдерживается следующий принцип формирования иерархии: при повышении уровня памяти скорость обработки данных должна увеличиваться, а объем уровня памяти – уменьшаться. Эффективность использования такого рода иерархии достигается за счет хранения часто используемых данных в памяти верхнего уровня, время доступа к которой минимально. А поскольку такая память обходится достаточно дорого, ее объем не может быть большим. Иерархия памяти относится к тем особенностям архитектуры компьютеров, которые имеют огромное значение для повышения их производительности.
Для того чтобы оценить эффективность работы вычислительной системы на реальных задачах, был разработан фиксированный набор тестов . Наиболее известным из них является LINPACK – программа, предназначенная для решения системы линейных алгебраических уравнений с плотной матрицей с выбором главного элемента по строке. LINPACK используется для формирования списка Top500 – пятисот самых мощных компьютеров мира. Однако LINPACK имеет существенный недостаток: программа распараллеливается, поэтому невозможно оценить эффективность работы коммуникационного компонента суперкомпьютера.
В настоящее время большое распространение получили тестовые программы , взятые из разных предметных областей и представляющие собой либо модельные, либо реальные промышленные приложения. Такие тесты позволяют оценить производительность компьютера действительно на реальных задачах и получить наиболее полное представление об эффективности работы компьютера с конкретным приложением.
Наиболее распространенными тестами, построенными по этому принципу, являются: набор из 24 Ливерморских циклов (The Livermore Fortran Kernels, LFK) и пакет NAS Parallel Benchmarks ( NPB ), в состав которого входят две группы тестов , отражающих различные стороны реальных программ вычислительной гидродинамики. NAS тесты являются альтернативой LINPACK , поскольку они относительно просты и в то же время содержат значительно больше вычислений, чем, например, LINPACK или LFK.
Однако при всем разнообразии тестовые программы не могут дать полного представления о работе компьютера в различных режимах. Поэтому задача определения реальной производительности многопроцессорных вычислительных систем остается пока нерешенной.
Введение
Метод конечных разностей во временной области – широко применяемая техника моделирования волн, например, для анализа волновых явлений и сейсморазведки. Этот метод популярен при использовании таких техник сейсмического анализа, как обратная временная миграция (reverse time migration) и полноволновая инверсия (full waveform inversion). Разновидности метода включают рассмотрение волн как акустических или упругих, а среда распространения может являться анизотропной, при этом плотность может также варьироваться.
Как известно, выбор конкретной численной схемы для аппроксимации частных производных имеет сильное влияние на производительность реализации [1]. В частности, это влияет на арифметическую интенсивность (число операций с плавающей запятой на каждое пересланное машинное слово) 3DFD алгоритма. Данная арифметическая интенсивность может быть далее связана с ожидаемой производительностью, используя методологию roofline моделирования [2]. Эта методология позволяет оценить уровень производительности реализации относительно максимально достижимой на конкретной вычислительной системе. То есть, roofline модель устанавливает рамки роста производительности, которая может быть достигнута с помощью оптимизации исходного кода программы. После того, как производительность реализации достигла определенного уровня, дальнейший рост производительности может быть получен только с помощью изменения самого алгоритма.
Для любого данного компьютера, его спецификация определяет пиковые значения для количества операций с плавающей запятой (FLOP/s) и для пересылок данных из памяти или в память (пропускная способность памяти). Соответствующие максимально достижимые показатели могут быть получены путем запуска стандартных бенчмарков как LINPACK [3] и STREAM triad [4].
Первая часть статьи будет нацелена на оценку максимально достижимой производительности ядра алгоритма Iso3DFD на двухсокетном сервере и сопроцессоре. Далее мы опишем несколько техник которые могут иметь важное влияние на производительность. Как обычно, такие оптимизации могут потребовать некоторых усилий и модификации исходного кода. После этого мы покажем вспомогательное средство для нахождения, если не наилучшего, то в какой-то степени оптимального набора параметров для компиляции и запуска приложения.
Методы и средства оценки производительности микропроцессоров и микропроцессорных систем
Большое разнообразие представленных на рынке микропроцессоров и систем, построенных на их основе, требует системного подхода к выбору той или иной аппаратной платформы и конфигурации. Критерии выбора определяются конкретными требованиями к системе и базируются на ряде общих требований, предъявляемых к ее характеристикам. К ним относятся стоимость , надежность , энергопотребление , масштабируемость и ряд других, которые важны в тех или иных областях. Но выбор микропроцессора и МПС для любого применения не может обойтись без оценки важнейшего показателя - производительности.
Казалось бы, основной мерой оценки производительности микропроцессора должна выступать его тактовая частота . Однако начиная с некоторого момента развития микропроцессорной техники рост тактовой частоты и производительность микропроцессора начинают идти разными, все больше расходящимися дорогами. На начальном этапе развития, когда частоты различных микропроцессоров не очень различались между собой, главным показателем производительности были архитектура МП, которая во многом определялась именем фирмы-разработчика, и разрядность . Именно они и выносились в название микропроцессора (например, знаменитые I-8080 фирмы Intel или Z-80 фирмы Zilog). С появлением первых 32-разрядных микропроцессоров Intel в их название помимо прочей информации стала вноситься тактовая частота . Трудно сказать, было ли это началом так называемой "войны мегагерц", однако со временем сложилась такая ситуация, что потребитель обращал внимание скорее на рост тактовой частоты , нежели на изменение архитектуры процессоров или технологий их производства.
В то же время с развитием архитектуры, появлением суперскалярных микропроцессоров, возможностей обработки данных по схеме SIMD , оптимизации структуры кэш-памяти тактовая частота становится скорее показателем уровня совершенства технологического процесса, но отнюдь не производительности. Более того, линейки микропроцессоров, например, Pentium 4, имеют несколько процессоров с одной тактовой частотой, хотя предназначены для абсолютно различных рынков.
Первой переход от указания тактовой частоты в названии своих микропроцессоров к указанию рейтинга производительности (PR) выполнила фирма AMD . Для своего микропроцессора Athlon XP она ввела PR, определявшийся как реальный уровень производительности в сравнении с конкурирующими процессорами (конечно же, это был прежде всего процессор фирмы Intel - Pentium 4), работающими на более высокой частоте. Введение такой маркировки прежде всего показывало, что компания по -прежнему занимает место на рынке рядом с лидером.
Прежде этому мешало указание именно реальной тактовой частоты процессоров AMD .
MIPS и MFLOPS
С подходом, основанным на сравнении производительности микропроцессоров по их рабочим частотам, тесно связан подход по оценке производительности системы по тому, насколько быстро система может выполнять команды процессора.
Однако это весьма расплывчатый показатель. Скорость работы процессора, обычно выражаемая в миллионах операций в секунду (millions of INsTRuctions per second - MIPS ), сильно привязана к его тактовой частоте .
Кроме того, оценка производительности в MIPS существенно зависит от системы команд микропроцессора: одна команда в микропроцессоре одного типа может быть эквивалентна по вычислительной мощности нескольким командам другого МП. К тому же различные операции , особенно в CISC -микропроцессорах, требуют разного времени для их выполнения. Следовательно, MIPS -оценка существенно зависит от того, какие команды принимаются в расчет. Таким образом, MIPS является полезным показателем лишь при сравнении процессоров одного производителя. Такие процессоры должны поддерживать одинаковую систему команд. Кроме того, следует применять одинаковые компиляторы. Существенная слабость MIPS как показателя производительности часто являлась поводом для шутки: MIPS - это аббревиатура выражения "MeanINgless INdicator of Processor Speed " ("бессмысленный показатель скорости процессора").
Аналогичным подходом является измерение производительности работы процессора в миллионах операций с плавающей точкой в секунду (millions of floatINg- poINT operations per second - MFLOPS ). Обычно скорость в MFLOPS вычисляют для смеси операций сложений и умножений с плавающей точкой. Но поскольку микропроцессоры становятся все быстрее и быстрее, значение максимума MFLOPS перестает быть полезным в качестве разумной меры производительности операций с плавающей точкой: ограничивающим фактором становится пропускная способность каналов памяти (насколько быстро данные можно перемещать из процес сора и в процессор ).
Методы и средства оценки производительности микропроцессоров и микропроцессорных систем
Большое разнообразие представленных на рынке микропроцессоров и систем, построенных на их основе, требует системного подхода к выбору той или иной аппаратной платформы и конфигурации. Критерии выбора определяются конкретными требованиями к системе и базируются на ряде общих требований, предъявляемых к ее характеристикам. К ним относятся стоимость , надежность , энергопотребление , масштабируемость и ряд других, которые важны в тех или иных областях. Но выбор микропроцессора и МПС для любого применения не может обойтись без оценки важнейшего показателя - производительности.
Казалось бы, основной мерой оценки производительности микропроцессора должна выступать его тактовая частота . Однако начиная с некоторого момента развития микропроцессорной техники рост тактовой частоты и производительность микропроцессора начинают идти разными, все больше расходящимися дорогами. На начальном этапе развития, когда частоты различных микропроцессоров не очень различались между собой, главным показателем производительности были архитектура МП, которая во многом определялась именем фирмы-разработчика, и разрядность . Именно они и выносились в название микропроцессора (например, знаменитые I-8080 фирмы Intel или Z-80 фирмы Zilog). С появлением первых 32-разрядных микропроцессоров Intel в их название помимо прочей информации стала вноситься тактовая частота . Трудно сказать, было ли это началом так называемой "войны мегагерц", однако со временем сложилась такая ситуация, что потребитель обращал внимание скорее на рост тактовой частоты , нежели на изменение архитектуры процессоров или технологий их производства.
В то же время с развитием архитектуры, появлением суперскалярных микропроцессоров, возможностей обработки данных по схеме SIMD , оптимизации структуры кэш-памяти тактовая частота становится скорее показателем уровня совершенства технологического процесса, но отнюдь не производительности. Более того, линейки микропроцессоров, например, Pentium 4, имеют несколько процессоров с одной тактовой частотой, хотя предназначены для абсолютно различных рынков.
Первой переход от указания тактовой частоты в названии своих микропроцессоров к указанию рейтинга производительности (PR) выполнила фирма AMD . Для своего микропроцессора Athlon XP она ввела PR, определявшийся как реальный уровень производительности в сравнении с конкурирующими процессорами (конечно же, это был прежде всего процессор фирмы Intel - Pentium 4), работающими на более высокой частоте. Введение такой маркировки прежде всего показывало, что компания по -прежнему занимает место на рынке рядом с лидером.
Прежде этому мешало указание именно реальной тактовой частоты процессоров AMD .
Тестовые программы
Вследствие недостатков рассмотренных выше подходов к измерению производительности вычислительных систем, в настоящее время для этих целей обычно используют так называемые бенчмарки ( benchmark ) - тестовые программы, которые измеряют производительность при типовой рабочей нагрузке. Зафиксировав рабочую нагрузку, можно варьировать базовые системные параметры и сравнивать производительность системы в разных конфигурациях и разные системы между собой.
Существует три вида тестовых программ :
- компоненто-зависимые инструменты (подобные программе LINpack и смесям SPEC cpu для универсальных МП и BDTImark для ЦСП);
- средства оценки всей системы, например, набор ТРС для эмуляции коммерческих сред и SPEC hpc для оценки производительности в области высокопроизводительных вычислений; и наконец, 3) программы, разработанные пользователем.
Тестовая программа LINpack
LINpack является одной из первых тестовых программ , принятых IT-сообществом на вооружение. Она, так же как и при измерениях производительности в MIPS и MFLOPS, измеряет время и количество операций, но делает это при выполнении конкретной практической задачи: решении плотной системы линейных уравнений методом исключения Гаусса.
Существует несколько версий LINpack , различающихся по размеру системы линейных уравнений , которые они решают, а также по числовой точности и основным нормам для тестирования. Наиболее часто применяли версию с матрицей 100 х 100, с результатами двойной точности, с компиляцией текста на Фортране с запретом оптимизации.
Сердцевиной тестовой программы LINpack 100 х 100 является подпрограмма, которая умножает вектор на константу и добавляет его к другому вектору. На каждой итерации этого цикла выполняются две операции с плавающей точкой (умножение и сложение) и три операции с памятью (два чтения и запись).
Когда кэш-память микропроцессоров увеличилась настолько, что смогла полностью вмещать все данные тестовой программы, оценки, получаемые с помощью LINpack 100 х 100, перестали быть полезными: структуры данных для всей программы составляют только 320 Кбайт.
В дополнение к тесту LINpack 100 х 100 был разработан тест LINpack 1000 х 1000, в котором система уравнений может быть решена с помощьюлюбого метода по выбору производителя. Более мощный LINpack - это важная тестовая программа , поскольку она дает корректный верхний предел для производительности операций с плавающей точкой. Это актуально при решении очень больших высокооптимизированных научных задач в конкретной системе. Эти тесты могут выполняться на компьютерах при разном числе процессоров, давая также оценки качества распараллеливания.
Тесты SPECcpu
В конце 1980-х годов был сформирован Консорциум по оценке производительности систем (Systems Performance Evaluation Cooperative - SPEC ). SPEC выполняет две основные функции:
- разрабатывает тестовые пакеты;
- собирает и публикует официальные результаты тестирования.
Членами SPEC являются все ведущие в области производства микропроцессоров, компьютеров и программного обеспечения компании (всего свыше 40): Advanced Micro Devices ( AMD ), Compaq, Hewlett Packard, IBM, Intel, Microsoft, Sun Microsystems и другие.
Первая тестовая программа SPEC для микропроцессора была названа SPEC89. В настоящее время действует уже пятая версия этих тестов - SPEC 2006. Одной из главных причин, требующих необходимости регулярного пересмотра тестов SPEC cpu , является рост емкости кэш-памяти современных микропроцессоров. Вследствие этого с течением времени многие тесты из состава SPEC cpu оказываются хорошо локализуемыми в кэше, что для серьезных современных приложений, вообще говоря, не характерно. За счет выпуска новых версий тестов организация SPEC не отстает от новейших тенденций в аппаратных средствах и в разработке компиляторов, не давая производителям "подгонять" свои системы под хорошие результаты тестирования.
В состав тестов SPECcpu входят реальные приложения из различных областей. При этом совокупность тестов подбирается таким образом, чтобы они по возможности покрывали различные характеристики микроархитектуры процессоров, влияющие на производительность. Исходные программные коды тестов SPEC cpu имеют большой объем, а время прогона всех тестов составляет много часов. Все эти тесты должны быть хорошо переносимы, то есть должны успешно работать на различных типах компьютеров с различными операционными системами и компиляторами.
Тестовый пакет SPECcpu предназначен для оценки производительности микропроцессоров и вычислительных систем. Он состоит из двух групп тестов: CINTcpu для оценки производительности на целочисленных операциях и CFPcpu для оценки производительности на операциях с плавающей точкой. Буква "C" в названиях тестов означает, что тесты являются "компонентными" (component-level), в отличие от тестов производительности системы в целом. Группы тестов CINT и Cfp ориентированы на оценку работы микропроцессоров, подсистемы кэш-памяти и оперативной памяти, а также компиляторов. Эти тесты не имеют отношения к оценке производительности сети, дисков или графической подсистемы .
Результаты тестов представляются в четырех вариантах ("метриках"), определяемых при различных способах компиляции программ и организации вычислений:
- метрики типа "base" получаются на тестах, которые должны компилироваться так же, как пользователи будут компилировать свои программы, то есть с некоторыми базовыми опциями оптимизации, одинаковыми для всех тестов в тестовом пакете. Другая группа метрик, без приставки "base", соответствует наилучшей оптимизации, которую производитель может обеспечить для каждого конкретного теста;
- метрики типа " rate " позволяют оценить суммарный объем вычислений, который компьютер может выполнить за определенное время. То есть на SMP -компьютере позволяется запустить несколько копий одного теста и в качестве результата выдать суммарное количество итераций, выполненное всеми процессорами за определенное фиксированное время. В противном случае, на тестах без приставки " rate ", оценивается просто "скорость" вычислений.
Разработчики тестов SPECcpu отказались от использования стандартных абсолютных единиц типа MFLOPS или MIPS. Вместо этого используются собственные относительные единицы SPEC. Результаты "нормализуются" по отношению к аналогичным результатам на так называемой "эталонной" машине. Для тестов SPECcpu2006 это рабочая станция SunULTRa/296 МГц. На данной машине прогон всех тестов SPECcpu2000 занимает примерно двое суток.
Тестовые наборы SPECcpu состоят из нескольких независимых тестовых программ , каждая из которых дает отдельный показатель производительности. Для усреднения результатов по отдельным тестам в данном тестовом наборе используется среднее геометрическое от нормализованных результатов всех тестов.
Состав тестов SPECINT2006 представлен в табл. 18.1, а тестов SPECfp2006 - в табл. 18.2.
При переходе от тестов SPECcpu2000 к тестам SPECcpu2006 в их составе произошло резкое увеличение доли программ на С++ (с одной до трех). Более того, четыре программы на С++ (из 17) появились даже в SPECfp2006. И хотя Фортран в SPECfp2006 остался основным языком, его доля существенно уменьшилась.
Читайте также: