В компьютерной архитектуре ускорение — это число, которое измеряет относительную производительность двух систем, обрабатывающих одну и ту же задачу. Более технически, это улучшение скорости выполнения задачи, выполняемой на двух схожих архитектурах с разными ресурсами. Понятие ускорения было установлено законом Амдаля , который был особенно сосредоточен на параллельной обработке . Однако ускорение может использоваться в более общем смысле, чтобы показать влияние на производительность после любого улучшения ресурсов.
Ускорение можно определить для двух различных типов величин: задержки и пропускной способности . [1]
Задержка архитектуры — это величина, обратная скорости выполнения задачи:
где
Пропускная способность архитектуры — это скорость выполнения задачи:
где
Задержка часто измеряется в секундах на единицу рабочей нагрузки выполнения. Пропускная способность часто измеряется в единицах рабочей нагрузки выполнения в секунду. Другая единица пропускной способности — это инструкции за цикл (IPC), а ее обратная величина — циклы за инструкцию (CPI) — это еще одна единица задержки.
Ускорение не имеет размерности и определяется по-разному для каждого типа величины, поэтому оно является единой метрикой.
Ускорение задержки определяется по следующей формуле: [2]
где
Ускорение задержки можно предсказать с помощью закона Амдаля или закона Густафсона .
Ускорение пропускной способности определяется по формуле: [3]
где
Мы тестируем эффективность предиктора ветвлений при выполнении программы. Сначала мы выполняем программу со стандартным предиктором ветвлений на процессоре, что дает время выполнения 2,25 секунды. Затем мы выполняем программу с нашим модифицированным (и, как мы надеемся, улучшенным) предиктором ветвлений на том же процессоре, что дает время выполнения 1,50 секунды. В обоих случаях рабочая нагрузка на выполнение одинакова. Используя нашу формулу ускорения, мы знаем
Наш новый предсказатель ветвлений обеспечил ускорение в 1,5 раза по сравнению с оригиналом.
Мы также можем измерить ускорение в циклах на инструкцию (CPI), что является задержкой. Сначала мы выполняем программу со стандартным предсказателем ветвлений, что дает CPI 3. Затем мы выполняем программу с нашим модифицированным предсказателем ветвлений, что дает CPI 2. В обоих случаях рабочая нагрузка выполнения одинакова, и обе архитектуры не являются конвейерными и не параллельными. Использование формулы ускорения дает
Мы также можем измерить ускорение в инструкциях за цикл ( IPC ), что является пропускной способностью и обратной величиной CPI. Использование формулы ускорения дает
Мы достигли того же 1,5-кратного ускорения, хотя измеряли разные величины.
Пусть S — ускорение выполнения задачи, а s — ускорение выполнения части задачи, которая выигрывает от улучшения ресурсов архитектуры. Линейное ускорение или идеальное ускорение достигается, когда S = s . При запуске задачи с линейным ускорением удвоение локального ускорения удваивает общее ускорение. Поскольку это идеально, это считается очень хорошей масштабируемостью .
Эффективность — это показатель использования ресурсов улучшенной системы, определяемый как
Его значение обычно находится в диапазоне от 0 до 1. Программы с линейным ускорением и программы, работающие на одном процессоре, имеют эффективность 1, в то время как многие труднораспараллеливаемые программы имеют эффективность, такую как 1/ln( s ) [ необходима ссылка ] , которая стремится к 0 по мере увеличения числа процессоров A = s .
В инженерном контексте кривые эффективности чаще используются для графиков, чем кривые ускорения, поскольку
В маркетинговом контексте кривые ускорения используются чаще, в основном потому, что они идут вверх и вправо и поэтому кажутся более понятными менее информированным людям.
Иногда при параллельных вычислениях наблюдается ускорение более чем на A при использовании процессоров A , что называется сверхлинейным ускорением . Сверхлинейное ускорение случается редко и часто сбивает с толку новичков, которые считают, что теоретически максимальное ускорение должно быть A при использовании процессоров A.
Одной из возможных причин сверхлинейного ускорения в низкоуровневых вычислениях является эффект кэша, возникающий из-за различных иерархий памяти современного компьютера: в параллельных вычислениях изменяется не только количество процессоров, но и размер накопленных кэшей от разных процессоров. При большем размере накопленного кэша больше или даже весь рабочий набор может поместиться в кэши, а время доступа к памяти резко сокращается, что приводит к дополнительному ускорению в дополнение к ускорению от реальных вычислений. [4]
Аналогичная ситуация возникает при поиске больших наборов данных, таких как геномные данные, искомые реализациями BLAST . Там накопленная оперативная память от каждого из узлов в кластере позволяет перемещать набор данных с диска в оперативную память, тем самым радикально сокращая время, необходимое, например, mpiBLAST для поиска. [5]
Сверхлинейное ускорение может также возникать при выполнении возврата параллельно: исключение в одном потоке может привести к тому, что несколько других потоков выполнят возврат раньше, прежде чем они сами достигнут исключения. [6]
Сверхлинейное ускорение может также возникать при параллельной реализации метода ветвей и границ для оптимизации: [7] обработка одного узла одним процессором может повлиять на работу, которую должны выполнить другие процессоры для других узлов.