Parallel integer multiplication
Abstract
Multiplication is a fundamental step in many algorithms. If the multiplication of two integers of n words has a complexity of M (n), divisions and squares can be computed in O(M (n)) as well and the greatest common divisor can be computed in O(M (n) log n). Thus being able to have a small value for M (n) is extremely important. To this day, the best known algorithm for reachable values is the Schönhage-Strassen algorithm which is implemented by a few arithmetic libraries. Asymptotically faster algorithms exist, however no computer is able to hold numbers big enough for those algorithms to outrun Schönhage-Strassen. The GNU Multiple Precision (GMP) library has a sequentialonly implementation of Schönhage-Strassen. However some algorithms contains a step which is a single big multiplication. Thus when trying to parallelize such an algorithm, one requires a parallel algorithm for multiplication. An example of such an algorithm is the batch factorization for Number Field Sieve. Thus people trying to implement a parallel version of such algorithms need to find an arithmetic library that implements a parallel integer multiplication. An example of such a library is the Flint (Fast LIbrary for Number Theory) library that contains a parallel implementation of Schönhage-Strassen. In this article we present an implementation of Schönhage-Strassen, that reaches a speedup of 20 for the multiplication of two integers of 10 7 words of 64 bits using a Xeon Gold with 32 cores.
Domains
Computer Science [cs]
Origin : Files produced by the author(s)