Введение
Процесс повышения производительности между двумя системами, решающими одну и ту же задачу.
В компьютерной архитектуре ускорение – это величина, измеряющая относительную производительность двух систем при решении одной и той же задачи. В более строгом смысле, это прирост скорости выполнения задачи при использовании двух схожих архитектур с различными ресурсами. Понятие ускорения было сформулировано законом Амдаля, который изначально был ориентирован на параллельную обработку. Однако ускорение может быть использовано в более общем виде для оценки влияния на производительность после любого улучшения ресурсов.
Использование времени исполнения
Мы тестируем эффективность предсказателя ветвлений при выполнении программы. Сначала мы запускаем программу со стандартным предсказателем ветвлений на процессоре, что дает время выполнения 2,25 секунды. Затем мы запускаем программу с нашим модифицированным (и, будем надеяться, улучшенным) предсказателем ветвлений на том же процессоре, что приводит к времени выполнения 1,50 секунды. В обоих случаях рабочая нагрузка одинакова. Используя нашу формулу для вычисления ускорения, мы знаем, что наш новый предсказатель ветвлений обеспечил ускорение в 1,5 раза по сравнению с исходным.
Our new branch predictor has provided a 1.5x speedup over the original.
Использование циклов на инструкцию и инструкций на цикл
Мы также можем измерить ускорение в циклах на инструкцию (CPI), что является показателем задержки. Сначала мы выполняем программу со стандартным предсказателем ветвлений, что даёт CPI равным 3. Затем мы выполняем программу с нашим модифицированным предсказателем ветвлений, что даёт CPI равным 2. В обоих случаях рабочая нагрузка одинакова, и обе архитектуры не конвейерные и не параллельные. Используя формулу ускорения, получаем:
Мы также можем измерить ускорение в инструкциях на цикл (IPC), что является показателем пропускной способности и величиной, обратной CPI. Используя формулу ускорения, получаем:
Мы достигаем того же ускорения в 1,5 раза, хотя измеряли разные параметры.
Суперлинейный ускоритель
Иногда в параллельных вычислениях наблюдается ускорение более чем в A раз при использовании A процессоров, которое называется суперлинейным ускорением. Суперлинейное ускорение встречается редко и часто сбивает с толку начинающих, которые полагают, что теоретический максимум ускорения должен составлять A при использовании A процессоров. Одной из возможных причин суперлинейного ускорения в задачах низкого уровня является эффект кэширования, возникающий из-за различных иерархий памяти современных компьютеров: в параллельных вычислениях изменяется не только количество процессоров, но и общий размер кэшей, доступных от разных процессоров. Благодаря большему общему объему кэша, в кэш может поместиться больший объем данных или даже весь рабочий набор, что значительно сокращает время доступа к памяти и обеспечивает дополнительное ускорение сверх ускорения, полученного от самих вычислений. Аналогичная ситуация возникает при поиске в больших наборах данных, например, при поиске геномных данных с помощью реализаций BLAST. В этом случае объединенная оперативная память всех узлов кластера позволяет переместить набор данных с диска в оперативную память, что значительно сокращает время, необходимое, например, mpiBLAST для поиска. Суперлинейное ускорение также может возникать при параллельном выполнении поиска с возвратом: исключение в одном потоке может привести к тому, что несколько других потоков начнут возврат раньше, чем столкнутся с исключением самостоятельно. Суперлинейное ускорение также возможно в параллельных реализациях алгоритма ветвей и границ для оптимизации: обработка одного узла одним процессором может повлиять на объем работы, который другим процессорам необходимо выполнить для других узлов.