Subscribe
Issue No.02  February (2011 vol.60)
pp: 165175
Niels Möller , GNU GMP, Stockholm
Torbjörn Granlund , KTH  Royal Institute of Technology, Stockholm
DOI Bookmark: http://doi.ieeecomputersociety.org/10.1109/TC.2010.143
ABSTRACT
This paper considers the problem of dividing a twoword integer by a singleword integer, together with a few extensions and applications. Due to lack of efficient division instructions in current processors, the division is performed as a multiplication using a precomputed singleword approximation of the reciprocal of the divisor, followed by a couple of adjustment steps. There are three common types of unsigned multiplication instructions: we define full word multiplication (umul), which produces the twoword product of two singleword integers; low multiplication (umullo), which produces only the least significant word of the product; and high multiplication (umulhi), which produces only the most significant word. We describe an algorithm that produces a quotient and remainder using one umul and one umullo. This is an improvement over earlier methods, since the new method uses cheaper multiplication operations. It turns out that we also get some additional savings from simpler adjustment conditions. The algorithm has been implemented in version 4.3 of the gmp library. When applied to the problem of dividing a large integer by a single word, the new algorithm gives a speedup of roughly 30 percent, benchmarked on amd and Intel processors in the x86_64 family.
INDEX TERMS
Computer arithmetic, multiple precision arithmetic, efficiency.
CITATION
Niels Möller, Torbjörn Granlund, "Improved Division by Invariant Integers", IEEE Transactions on Computers, vol.60, no. 2, pp. 165175, February 2011, doi:10.1109/TC.2010.143
REFERENCES
