Откуда происходит сверхлинейное ускорение?

В параллельных вычислениях теоретически суперлинейное ускорение невозможно. Но на практике мы видим такие случаи. Одна из причин - эффект кеша, но я не понимаю, что он играет. Кроме того, есть и другие вещи, но что это такое? Итак,

Как возможны сверхлинейные ускорения?

Я начинаю с точки зрения параллельных вычислений.

Ответ 1

Предположим, что у вас есть процессор с 8 процессорами, каждый процессор имеет 1 МБ кеш, а в вашем вычислении используется 6 МБ данных.

На 1 процессоре вычисление будет осуществлять много перемещений данных между CPU, кешем и оперативной памятью. На 8 процессорах вычисление будет только перемещать данные между ЦП и кешем. Таким образом, вы можете добиться сверхлинейного ускорения.

Эти цифры и этот анализ были упрощены для изложения для новичка.

Ответ 2

Короче говоря, суперлинейное ускорение достигается, когда общий объем рабочих процессоров строго меньше, чем общая работа, выполняемая одним процессором.

Это может произойти тремя способами:

  • Первоначальный последовательный алгоритм был действительно плохим, использование параллельной версии алгоритма на одном процессоре обычно устраняет сверхлинейное ускорение.

  • Параллельный алгоритм использует некоторый поиск, например, случайное блуждание, тем больше ходущих процессоров, тем меньше расстояние нужно пройти, прежде чем вы достигнете того, что ищете.

  • Современные процессоры имеют более быструю и медленную память. Обычно он пытается сохранить данные, которые вы используете в быстрой памяти. Мы можем с уверенностью сказать, что ваш объем данных больше, чем объем быстрой памяти. Если вы используете n процессоров, у вас в n раз больше памяти. Дополнительные данные подходят для быстрой памяти, что позволяет сократить время (при этом объем работы) по одной и той же задаче.