Характеристики вычислительных процессов
Для того чтобы вычислительная система имела высокую производительность, она должна состоять из большого числа одновременно работающих функциональных устройств (ФУ). Для оценки качества их работы предложено много различных характеристик. Нередко одни и те же по смыслу характеристики вводятся по-разному. И не всегда легко понять, отражают ли эти различия существо дело или же они связаны с какими-то другими причинами. Показательной в этом отношении является такая характеристика как производительность системы. Различных ее определений введено столь много и они столь сильно отличаются друг от друга, что объявляемая производительность вычислительной системы воспринимается лишь как элемент рекламы.
Тем не менее, характеристики процессов работы системы в целом и отдельных ее элементов очень важны, поскольку позволяют находить и устранять узкие места. Общий недостаток всех вводимых ранее характеристик - это отсутствие четкого обоснования. Именно их обоснованию и будет посвящена данная лекция. Будем рассматривать характеристики в рамках некоторой модели процесса работы устройств, вполне достаточной для практического применения. Мы не будем интересоваться содержанием операций, выполняемых функциональными устройствами. Они могут означать арифметические или логические функции, ввод-вывод данных, пересылку данных в память и извлечение данных из нее или что-либо иное. Более того, допускается, что при разных обращениях операции могут означать разные функции. Для нас сейчас важны лишь времена выполнения операций и то, на устройствах какого типа они реализуются.
Пусть введена система отсчета времени и установлена его единица, например, секунда. Будем считать, что длительность выполнения операций измеряется в долях единицы. Все устройства, реальные или гипотетические, основные или вспомогательные, могут иметь любые времена срабатывания. Единственное существенное ограничение состоит в том, что все срабатывания одного и того же ФУ должны быть одинаковыми по длительности. Всегда мы будем интересоваться работой каких-то конкретных наборов ФУ. По умолчанию будем предполагать, что все другие ФУ, необходимые для обеспечения процесса функционирования этих наборов, срабатывают мгновенно. Поэтому, если не сделаны специальные оговорки, мы не будем в таких случаях принимать во внимание факт их реального существования. Времена срабатываний изучаемых ФУ будем считать положительными.
Назовем функциональное устройство простым, если никакая последующая операция не может начать выполняться раньше, чем закончится предыдущая. Простое ФУ может вьполнять операции одного типа или разные операции. Разные ФУ могут вьполнять операции, в том числе одинаковые, за разное время. Примером простого ФУ могут служить обычные сумматоры или умножители. Эти ФУ реализуют только один тип операции. Простым устройством можно считать многофункциональный процессор, если он не способен вьполнять различные операции одновременно, и мы не принимаем во внимание различия во временах реализации операций, предполагая, что они одинаковы. Основная черта простого ФУ только одна: оно монопольно использует свое оборудование для выполнения каждой отдельной операции.
В отличие от простого ФУ конвейерное ФУ распределяет свое оборудование для одновременной реализации нескольких операций. Очень часто оно конструируется как линейная цепочка простых элементарных ФУ, имеющих одинаковые времена срабатывания. На этих элементарных ФУ последовательно реализуются отдельные этапы операций. В случае конвейерного ФУ, выполняющего операцию сложения чисел с плавающей запятой, соответствующие элементарные устройства последовательно реализуют такие операции как сравнение порядков, сдвиг мантиссы, сложение мантисс и т.п. Ничто не мешает считать конвейерным ФУ линейную цепочку универсальных процессоров и рассматривать каждый из процессоров как элементарное ФУ. Принцип конвейерности остается одним и тем же. Сначала на первом элементарном ФУ выполняется первый этап первой операции, и результат передается второму элементарному ФУ. Затем на втором элементарном ФУ реализуется второй этап первой операции. Одновременно на освободившемся первом ФУ реализуется первый этап второй операции. После этого результат срабатывания второго ФУ передается третьему ФУ, результат срабатывания первого ФУ передается второму ФУ. Освободившееся первое ФУ готово для выполнения первого этапа третьей операции и т. д. После прохождения всех элементарных ФУ в конвейере операция оказывается выполненной. Элементарные ФУ называются ступенями конвейера, число ступеней в конвейере - длиной конвейера. Простое ФУ всегда можно считать конвейерным с длиной конвейера, равной 1. Как уже говорилось, конвейерное ФУ часто является линейной цепочкой простых ФУ, но возможны и более сложные конвейерные конструкции.
Поскольку конвейерное ФУ уже само является системой связанных устройств, необходимо установить наиболее общие правила работы систем ФУ. Будем считать, что любое ФУ не может одновременно выполнять операцию и сохранять результаты предыдущих срабатываний, т.е. оно не имеет собственной памяти. Однако будем допускать, что результат последнего срабатывания может сохраняться в ФУ до момента начала очередного его срабатывания, включая сам этот момент. После начала очередного срабатывания ФУ результат предыдущего срабатывания пропадает. Предположим, что все ФУ работают по индивидуальным командам. В момент подачи команды конкретному ФУ на его входы передаются аргументы выполняемой операции либо как результаты срабатывания других ФУ с их выходов, либо как входные данные, либо как-нибудь иначе. Сейчас нам безразлично, как именно осуществляется их подача. Важно то, что в момент начала очередного срабатывания ФУ входные данные для него доступны, а сам процесс подачи не приводит к задержке общего процесса. Любое функциональное устройство может начинать выполнение операции в любой момент времени, начиная с момента готовности ее аргументов. Конечно, мы предполагаем, что программы, определяющие работу всех ФУ, составлены корректно и не приводят к тупиковым или неправильным ситуациям.
При определении различных характеристик, связанных с работой ФУ,
приходится иметь дело с числом операций, выполняемых за какое-то
время. Это число должно быть целым. Если отрезок времени равен , а
длительность операции есть
, то за время
можно выполнить порядка
операций. Чтобы не загромождать выкладки и формулы символами
целочисленности и различными членами малого порядка, мы будем всюду
приводить результаты в главном, что эквивалентно переходу к пределу
при
. Говоря иначе, все характеристики и соотношения будут
носить асимптотический характер. Данное обстоятельство нисколько не
снижает практическую ценность получаемых результатов, но делает их
более наглядными.
Назовем стоимостью операции время ее реализации, а стоимостью
работы - сумму стоимостей всех выполненных операций. Стоимость работы
- это время последовательной реализации всех рассматриваемых операций
на простых ФУ с аналогичными временами срабатываний. Загруженностью
устройства на данном отрезке времени будем называть отношение
стоимости реально выполненной работы к максимально возможной
стоимости. Ясно, что загруженность всегда удовлетворяет условиям
. Также очевидно, что максимальная стоимость работы, которую
можно выполнить за время
, равна
для простого ФУ и
для
конвейерного ФУ длины
.
Будем называть реальной производительностью системы устройств
количество операций, реально выполненных в среднем за единицу времени. Пиковой производительностью будем называть максимальное количество
операций, которое может быть выполнено той же системой за единицу
времени при отсутствии связей между ФУ. Из определений вытекает, что
как реальная, так и пиковая производительность системы равна сумме
соответственно реальных или пиковых производительностей всех
составляющих систему устройств. Пусть система состоит из устройств,
в общем случае простых или конвейерных. Если устройства имеют пиковые
производительности
и работают с загруженностями
, то реальная производительность
системы выражается
формулой.
![r=\sum_{i=1}^s p_i\pi_i](/sites/default/files/tex_cache/56f4e9b49549fe06a5eb3a2aee64fe40.png)
Поскольку реальная производительность системы равна сумме реальных
производительностей всех ФУ, то достаточно рассмотреть одно
устройство. Пусть для выполнения одной операции на ФУ требуется время и за время
выполнено
операций. Независимо от того, каков тип
устройства, стоимость выполненной работы равна
. Если устройство
простое, то максимальная стоимость работы равна
. Поэтому
загруженность устройства равна
. По определению реальная
производительность ФУ есть
, а его пиковая производительность равна
. Поэтому соотношение выполняется. Предположим теперь, что
устройство конвейерное длины
. Максимальная стоимость работы в данном
случае равна
. Поэтому загруженность устройства равна
.
Реальная производительность снова есть
, a пиковая
производительность будет равна
. И соотношение снова
выполняется.
Если суть соответственно реальная производительность,
пиковая производительность и загруженность одного устройства, то имеет
место равенство
. Отсюда видно, что для достижения наибольшей
реальной производительности устройства нужно обеспечить наибольшую его
загруженность. Для практических целей понятие производительности
наиболее важно, потому что именно оно показывает, насколько эффективно
устройство вьшолняет полезную работу. По отношению к
производительности понятие загруженности является вспомогательным. Тем
не менее, оно полезно в силу того, что указывает путь повышения
производительности, причем через вполне определенные действия.
Хотелось бы и для системы устройств ввести понятие загруженности,
играющее аналогичную роль. Его можно определять по-разному. Например,
как и для одного ФУ, можно было бы считать, что загруженность системы
ФУ есть отношение стоимости реально выполненной работы к максимально
возможной стоимости. Такое определение вполне приемлемо и позволяет
сделать ряд полезных выводов. Однако имеются и возражения. В этом
определении медленные и быстрые устройства оказываются равноправными и
если необходимо повысить загруженность системы, то не сразу видно, за
счет какого ФУ это лучше сделать. К тому же, в данном случае не всегда
будет иметь место равенство с соответствующими характеристиками
системы.
Правильный путь введения понятия загруженности системы подсказывает
полученное соотношение. Пусть система состоит из s устройств, в общем
случае простых или конвейерных. Если устройства имеют пиковые
производительности и работают с загруженностями
,
то будем считать по определению, что загруженность системы есть
величина
![p=\sum_{i=1}^s \alpha_i p_i,\;\alpha_i=\frac{\pi_i}{\sum_{j=1}^s \pi_j}.](/sites/default/files/tex_cache/ac301377ca8b34193bea09fd785e27ef.png)
![\sum_{i=1}^s \alpha_i=1,\ \alpha \ge 1,\ 1\le i \le s](/sites/default/files/tex_cache/3d208919f36d7db8dc365fa096eba19b.png)
![0 \le р \le 1](/sites/default/files/tex_cache/6bfbcaea0c5c30ee728edae93d056447.png)
![s=1](/sites/default/files/tex_cache/73bbe012edfb61eca43444d61fefe937.png)
![\pi](/sites/default/files/tex_cache/4f08e3dba63dc6d40b22952c7a9dac6d.png)
![\pi_1+\ldots+\pi_s](/sites/default/files/tex_cache/91067536038d1d78d723180c58d02168.png)
![r=p\pi](/sites/default/files/tex_cache/3234311db8046dc81b07e840bdd8ba1b.png)