Откуда происходит сверхлинейное ускорение?
В параллельных вычислениях теоретически суперлинейное ускорение невозможно. Но на практике мы видим такие случаи. Одна из причин - эффект кеша, но я не понимаю, что он играет. Кроме того, есть и другие вещи, но что это такое? Итак,
Как возможны сверхлинейные ускорения?
Я начинаю с точки зрения параллельных вычислений.
Ответы
Ответ 1
Предположим, что у вас есть процессор с 8 процессорами, каждый процессор имеет 1 МБ кеш, а в вашем вычислении используется 6 МБ данных.
На 1 процессоре вычисление будет осуществлять много перемещений данных между CPU, кешем и оперативной памятью. На 8 процессорах вычисление будет только перемещать данные между ЦП и кешем. Таким образом, вы можете добиться сверхлинейного ускорения.
Эти цифры и этот анализ были упрощены для изложения для новичка.
Ответ 2
Короче говоря, суперлинейное ускорение достигается, когда общий объем рабочих процессоров строго меньше, чем общая работа, выполняемая одним процессором.
Это может произойти тремя способами:
-
Первоначальный последовательный алгоритм был действительно плохим, использование параллельной версии алгоритма на одном процессоре обычно устраняет сверхлинейное ускорение.
-
Параллельный алгоритм использует некоторый поиск, например, случайное блуждание, тем больше ходущих процессоров, тем меньше расстояние нужно пройти, прежде чем вы достигнете того, что ищете.
-
Современные процессоры имеют более быструю и медленную память. Обычно он пытается сохранить данные, которые вы используете в быстрой памяти. Мы можем с уверенностью сказать, что ваш объем данных больше, чем объем быстрой памяти. Если вы используете n процессоров, у вас в n раз больше памяти. Дополнительные данные подходят для быстрой памяти, что позволяет сократить время (при этом объем работы) по одной и той же задаче.