Вычислительная мощность компьютера
Вычислительная мощность компьютера (англ. computer performance) — совокупная величина, характеризующая объём полезной работы, выполняемой компьютерной системой.
Описание
За пределами узких технических контекстов вычислительная мощность оценивается по точности, эффективности и скорости исполнения инструкций компьютерных программ. Достижение высокой вычислительной мощности связано с рядом факторов, среди которых:
- Короткое время отклика для заданной задачи;
- Высокая пропускная способность (скорость обработки заданий);
- Низкая загрузка вычислительных ресурсов;
- Быстрая (или очень компактная) компрессия данных и их декодирование;
- Высокая доступность вычислительной системы или приложения;
- Высокая пропускная способность;
- Короткое время передачи данных.
Технические и нетехнические определения
Производительность любой компьютерной системы может быть определена количественно, с помощью одного или нескольких приведённых выше показателей. Такой подход позволяет:
- Сравнивать производительность относительно других систем или той же системы после изменений;
- Оценивать показатели в абсолютных величинах, например, для исполнения контрактных обязательств.
Если приведённое определение носит строгий технический характер, то следующее определение, предложенное Арнольдом Алленом, описывает понятие для широкой аудитории:
Слово «производительность» в термине «вычислительная мощность» означает то же, что и в других областях, а именно — «насколько хорошо компьютер выполняет работу, которую от него требуют?»[1]
Производительность программного обеспечения, в частности время отклика приложений, — важная составляющая качества ПО, особенно в задачах человеко-компьютерного взаимодействия.
Инженерия производительности
Инженерия производительности в рамках системной инженерии включает комплекс ролей, навыков, практик, инструментов и результатов, применяемых на всех этапах жизненного цикла разрабатываемых решений для обеспечения требуемой производительности.
Работа инженеров производительности всегда связана с компромиссами между различными типами производительности. Иногда разработчикам удаётся добиться общего роста производительности, улучшая один из параметров, не снижая другие. Однако чрезмерное стремление улучшить одну характеристику часто приводит к деградации производительности по другим показателям — например, увеличение частоты (см. миф о мегагерцах) ценой ухудшения других параметров.
Инженерия производительности приложений (Application Performance Engineering, APE) — специализированная методология в рамках инженерии производительности, ориентированная на задачи эффективности приложений в условиях мобильных, облачных и наземных распределённых ИТ-сред. Она охватывает все этапы жизненного цикла приложений, обеспечивая соблюдение нефункциональных требований к производительности.
Аспекты производительности
Показателями производительности компьютера выступают доступность, время отклика, ёмкость канала, задержка, время выполнения, время обслуживания, пропускная способность, относительная эффективность, масштабируемость, производительность на ватт, коэффициент сжатия, длина пути инструкций и ускорение. Для процессоров существуют специальные сравнительные тесты (бенчмарки)[2].
Доступность системы обычно оценивается как функция её надёжности: с ростом надёжности растёт и доступность (меньше времени простоя). Увеличить доступность, однако, возможно за счёт акцента на тестируемости и ремонтопригодности, а не только на надёжности. Повысить ремонтопригодность, как правило, проще, чем надёжность; оценки времени восстановления бывают точнее, чем оценки надёжности. Однако неопределённость в надёжности обычно столь велика, что именно она становится основной проблемой точности прогноза доступности, даже при высоких уровнях ремонтопригодности.
Время отклика — это общее время, необходимое для ответа на запрошенную операцию. В вычислительной технике услугой может быть любая задача — от простого обмена данными с диском до загрузки сложной веб-страницы. Время отклика складывается из трёх составляющих:[3]
- Время обслуживания — сколько требуется на саму работу;
- Время ожидания — сколько запрос находится в очереди, дожидаясь исполнения;
- Время передачи — сколько требуется на передачу запроса и результата между устройствами.
Скорость обработки измеряется числом инструкций в секунду (instructions per second, IPS) или операций с плавающей точкой в секунду (FLOPS). Большинство потребителей выбирают архитектуру компьютера, опираясь на возможность запуска имеющегося ПО. Нередко выбор конкретного процессора производится по рабочей частоте (см. миф о мегагерцах), хотя этот показатель не всегда отражает реальную производительность.
Проектировщики параллельных систем зачастую ориентируются на соотношение «скорость за единицу стоимости».
Пропускная способность канала — максимальная скорость передачи информации по каналу связи, которую можно обеспечить с определённой надёжностью. Согласно теореме кодирования шумного канала, эта величина определяется как предельная скорость передачи информации при сколь угодно малой вероятности ошибки[4][5].
Определение ёмкости канала и математическое моделирование процессов передачи информации даёт теория информации, созданная Клодом Шенноном во время Второй мировой войны. Емкость канала определяется как максимум взаимной информации между входом и выходом канала для распределения входных сигналов, дающего этот максимум[6].
Задержка — это временное запаздывание между причиной и её эффектом в управляемой системе. Она обусловлена ограниченной скоростью распространения любых физических взаимодействий, всегда меньшей или равной скорости света. Поэтому всякая система с ненулевыми размерами подвержена задержкам.
Точное определение задержки зависит от рассматриваемой системы и природы воздействия. В связи допускаемая нижняя граница задержки определяется используемой технологией. В надёжных двусторонних системах задержка ограничивает максимальную скорость передачи информации, поскольку в любой момент может находиться лишь ограниченное количество данных «в полёте». В человеко-компьютерном взаимодействии заметная задержка существенно влияет на удобство использования и удовлетворённость пользователя.
Операционные системы могут откладывать выполнение процесса из-за наличия других исполняющихся задач; также планировщик ОС сам выбирает, когда выполнять каждое действие. Например, если процесс периодически (1000 Гц) меняет выходное напряжение платы, реальное время переключения зависит от особенностей ОС и аппаратуры.
Проектировщики систем реального времени стремятся гарантировать максимальное время отклика; это проще сделать, когда ЦПУ обладает низкой задержкой прерываний и детерминированностью реакции.
Пропускная способность в компьютерных сетях — это измеряемая скорость передачи или использования ресурсов передачи данных, выражаемая в битах в секунду и их кратных (бит/с, кбит/с, Мбит/с, Гбит/с и т.д.).
Часто под пропускной способностью понимается максимально достижимая скорость передачи данных по каналу (чистый битрейт), что используется, например, при тестировании сетей. Согласно закону Хартли, максимальная скорость передачи может быть пропорциональна полосе частот канала (Гц).
Пропускная способность (throughput) — это скорость выработки или обработки данных системой.
В сетях передачей под throughput понимается реальное потребление полосы пропускания; в беспроводных и сотовых сетях — это эффективность использования спектра с учётом занимаемой площади. В интегральных схемах throughput связывает время прохождения (обработка сообщений) с архитектурой устройства или канала.
Масштабируемость — способность системы, сети или процесса обрабатывать возрастающий объём работы либо расширяться для поддержки такого роста.
Потребляемая энергия становится особенно критичным показателем для устройств с автономным или ограниченным питанием — солнечным, аккумуляторным или даже человеком.
Производительность (скорость) на ватт важна, например, для параллельных вычислительных систем (как оборудование Google), где стоимость энергопитания превышает цену комплектующих[7].
В вычислительной технике для космоса соотношение скорость/ватт даже важнее абсолютной скорости из-за ограниченных энергетических ресурсов[8].
Сжатие эффективно для сокращения использования ресурсов — места на носителях или каналов передачи. Однако процесс декомпрессии требует дополнительных вычислений, что создаёт компромисс между экономией объёма и затратами времени.
Эти факторы критичны для мобильных систем — от смартфонов до встраиваемых устройств и космических аппаратов.
Воздействие вычислительной техники на окружающую среду оценивается по критериям минимизации отходов, токсичных материалов и экологического следа как при производстве, так и при утилизации и эксплуатации.
Количество транзисторов на интегральной схеме — основной показатель сложности ИС.
Бенчмарки
Из-за множества программных и аппаратных характеристик производительности для их сравнения были разработаны специальные методики тестирования — бенчмарки.
Наиболее известны — тесты SPECint и SPECfp, созданные Standard Performance Evaluation Corporation, и бенчмарк EEMBC, разработанный Embedded Microprocessor Benchmark Consortium.
Тестирование производительности программного обеспечения
Тестирование производительности программного обеспечения применяется для оценки отклика и устойчивости систем под заданной нагрузкой. Оно может также обнаруживать, измерять и подтверждать прочие характеристики — масштабируемость, надёжность, использование ресурсов.
Тестирование производительности — частный случай инженерии производительности ПО, нацеленной на реализацию производственных требований на уровне проектирования, реализации и архитектуры.
Профилирование — динамический анализ программ, измеряющий использование памяти, времени исполнения, частоты и длительности вызова функций и др. Наиболее часто эти данные используются для оптимизации.
Профилирование реализуется с помощью инструментов («профайлеров»), модифицирующих исходный код или бинарные файлы приложения и поддерживающих разные методы анализа: событийный, статистический, инструментированный, симуляционный.
Процессор
Центральный процессор (ЦПУ), или основной процессор — ключевой компонент компьютера, реализующий электронное исполнение инструкций компьютерной программы: арифметические, логические, управляющие и операции ввода-вывода[9].
Производительность или скорость процессора зависит, в частности, от тактовой частоты (Гц) и числа инструкций за такт (IPC); эти параметры совместно определяют число инструкций в секунду (IPS), которое ЦПУ способен выполнить[10]. Многие заявляемые значения IPS отражают пиковую производительность на специфических наборах инструкций, но реальные задачи включают широкий спектр операций с разной продолжительностью. Важную роль играет и производительность подсистемы памяти, что редко учитывают при расчётах IPS. Для объективной оценки строятся стандартные тесты — бенчмарки.
Вычислительная мощность увеличивается при использовании многопроцессорных систем, в которых два и более отдельных ядра объединены на одной интегральной схеме. Теоретически двухъядерный процессор должен быть почти вдвое мощнее одноядерного, но на практике выигрыш не превышает примерно 50% из-за особенностей программных алгоритмов и реализации[11]. Увеличение числа ядер расширяет набор параллельно обрабатываемых событий и прерываний, что при избыточной нагрузке может, наоборот, мешать работе. Ядра часто используют совместно одну и ту же задачу, например, при недостатке вычислительных ресурсов на одном ядре. Многозадачность повышается, но прирост скорости нелинейный — из-за затрат на коммуникацию между ядрами часть вычислительной мощности расходуется на координацию[12].
Из-за появления в процессорах таких технологий, как одновременная многопоточность и uncore, мониторинг уровня использования ресурсов стал значительно сложнее[13]. Некоторые современные ЦПУ содержат встроенные аппаратные средства мониторинга (например, технология Intel Performance Counter Monitor), позволяющие программно отслеживать показатели использования[14].
Тонкая настройка производительности
Тонкая настройка производительности — улучшение работы системы, чаще всего компьютерного приложения, но подход применим и к другим сложным системам. Причиной служит реальная или ожидаемая проблема; большинство систем реагируют на рост нагрузки падением производительности. Возможность принимать дополнительную нагрузку связана с масштабируемостью, а её повышение и есть цель настройки.
Типовая последовательность действий такова:
- Оценить проблему и определить допустимые значения критериев.
- Измерить производительность системы до вмешательства.
- Найти проблемное (критическое) место — узкое место.
- Внести изменения в найденную часть системы.
- Снова измерить производительность.
- Если стало лучше — применять. Если хуже — вернуть всё обратно.
Воспринимаемая производительность
Воспринимаемая производительность в вычислительной технике описывает скорость, с которой определённая функция выглядит выполняемой для пользователя. Понятие важно для оценки пользовательского опыта.
Время загрузки приложения или скачивания файла фактически не сокращается, если показывать сплэш-экран или прогресс-индикатор, однако такие меры улучшают субъективную оценку: пользователь получает обратную связь о ходе выполнения задачи.
Чаще всего увеличение реальной мощности увеличивает и воспринимаемую производительность, но при физических ограничениях разработчики могут применять методы исключительно для повышения субъективной скорости.
Уравнение производительности
Время выполнения (t) для конкретной задачи (бенчмарка) определяется выражением
- , иначе
где
- — производительность как обратная величина времени выполнения;
- — число реально исполненных инструкций (длина пути инструкций); существенно зависит от инструкций и их плотности, а также выбора компилятора и параметров оптимизации; N не определяется числом строк кода высокого уровня и не зависит от других процессов на том же процессоре; аппаратно обычно не предоставляется, точно вычисляется только симуляцией (что делается редко);
- — тактовая частота (Гц);
- — среднее число тактов на инструкцию (CPI) для данного задания;
- — средний показатель инструкций на такт (IPC).
Даже на одном компьютере разные компиляторы (или одни и те же с разными опциями) могут существенно менять значения N и CPI. Сократить время исполнения можно либо сокращая N, либо уменьшая CPI, но между этими показателями часто наблюдается компромисс: например, можно использовать немного сложных медленных инструкций или множество простых быстрых — каждая стратегия по-разному влияет на общую производительность.
Иногда разработчики не могут изменить N (например, если требуется поддерживать существующий набор инструкций), тогда фокус смещается на увеличение f (глубже конвейер, быстрее кэш). Если же получается добиться снижения CPI с умеренным снижением частоты, речь идёт о так называемых «умных» (braniac) процессорах, оптимизированных за счёт параллельного исполнения, больших и эффективных кэшей, улучшенного предсказания ветвлений[15]. Оптимум для максимальной однопоточной производительности достигается балансом между этими подходами.