Мне интересно узнать о временной сложности умножения больших целых чисел по модулю (большой) константы с использованием нескольких процессоров. В основном это сводится к целочисленному умножению, поскольку деление и остаток также могут быть реализованы с помощью умножения (например, взаимное умножение или редукция Барретта).
Я знаю, что время выполнения известных в настоящее время алгоритмов умножения целых чисел примерно ограничено по нижней границе o(n * log n)
. Моему исследованию не удалось выяснить, относится ли это к одноядерной или многоядерной машине. Однако я думаю, что это для одноядерной машины, поскольку алгоритмы, похоже, используют подход «разделяй и властвуй».
Теперь мой вопрос: какова известная в настоящее время нижняя граница временной сложности алгоритма параллельного целочисленного умножения, реализованного на m
ядрах? Можно ли достичь временной сложности с нижней границей o(n)
или меньше при достаточном количестве ядер? (т.е. если m
зависит от n
?) Здесь o(n)
описывает входной размер имеющихся целых чисел.
До сих пор в своем исследовании я прочитал несколько статей, в которых утверждалось, что ускорение происходит с помощью параллельного умножения БПФ. К сожалению, они заявляют только об эмпирическом ускорении (например, «улучшение скорости на 56% при использовании 6 ядер на таком-то компьютере»), а затем не могут объяснить теоретическое ускорение, выраженное в пределах временной сложности.
Я знаю, что "самый быстрый" алгоритм целочисленного умножения еще не найден, это нерешенная проблема в компьютере наука. Я просто интересуюсь известными в настоящее время пределами для таких параллельных алгоритмов.
Обновление №1: пользователь @delnan связался с вики-страницей о Класс сложности ЧПУ. На этой вики-странице упоминается, что целочисленное умножение выполняется в NC, что означает, что существует O((log n)^c)
алгоритм на O(n^k)
процессорах. Это помогает приблизиться к ответу. На данный момент без ответа остается вопрос: каковы константы c
и k
для целочисленного умножения и какой параллельный алгоритм подходит для этой цели?
Обновление №2: согласно странице 12 из 15 в этот PDF-файл из курса компьютерных наук в Корнельском университете, целочисленное умножение в классе сложности ЧПУ занимает O(log n)
времени на O(n^2)
процессорах. Он также объясняет пример алгоритма того, как это сделать. Я скоро напишу правильный ответ на этот вопрос.
Последний вопрос, удовлетворяющий мое любопытство: может ли кто-нибудь что-нибудь знать о известной в настоящее время временной сложности для «только» O(n)
, O(sqrt(n))
или O(log n)
процессоров?
O(n * log n)
БПФ это становитсяO(log n)
временем наO(n)
процессорах (см. Страницы 5-6 в этот PDF). Я не уверен, как это влияет на все известные в настоящее время алгоритмы умножения, но можно с уверенностью сказать, что те, которые используют БПФ, будут придерживаться известной в настоящее время нижней границы БПФ. - person webdevelopersdiary   schedule 02.10.2014