I am interested to learn about the time complexity for multiplying large integers modulo a (large) constant using multiple processors. What this boils down to is basically just integer multiplication, since division and remainder can also be implemented using multiplication (e.g. reciprocal multiplication or Barrett reduction).
I know that the runtime of currently known integer multiplication algorithms is roughly bounded by the lower bound o(n * log n)
. My research has failed to find out if this is for a single core or multi core machine. However, I am thinking this is for a single core machine as the algorithms seem to use a divide-and-conquer approach.
Now my question is, what is the currently known lower bound for the time complexity of a parallel integer multiplication algorithm implemented on m
cores? Can a time complexity with lower bound of o(n)
or less be achieved, given enough cores? (i.e. if m
depends on n
?) Here o(n)
describes the input size of the integers at hand.
So far in my research I have read several papers claiming a speedup using parallel FFT multiplication. Unfortunately these only claim empirical speedups (e.g. "a 56% speed improvement using 6 cores on a such and such computer") and then fail to explain the theoretical speedup expressed in time complexity bounds.
I am aware the "fastest" integer multiplication algorithm has not yet been found, this is an unsolved problem in computer science. I am merely inquiring about the currently known bounds for such parallel algorithms.
Update #1: User @delnan linked to a wiki page about the NC complexity class. That wiki page mentions integer multiplication is in NC, meaning there exists an O((log n)^c)
algorithm on O(n^k)
processors. This is helpful towards getting closer to an answer. The part that's left unanswered for now is what are the c
and k
constants for integer multiplication and which parallel algorithm lends itself to this purpose?
Update #2: According to page 12 of 15 in this PDF file from a Computer Science course at Cornell University, integer multiplication in the NC complexity class takes O(log n)
time on O(n^2)
processors. It also explains an example algorithm on how to go about this. I'll write up a proper answer for this question shortly.
One last question to satisfy my curiosity: might anyone know something about the currently known time complexity for "just" O(n)
, O(sqrt(n))
or O(log n)
processors?