mpn_mul is embarrassingly slow

Torbjörn Granlund tg at gmplib.org
Wed Apr 25 11:47:58 UTC 2018


nisse at lysator.liu.se (Niels Möller) writes:

  For n x 20, n pretty large, what strategy does mpn_mul use? I would
  expect repeated toom32, but maybe that gives too much overhed. It seems
  we don't have any MUL_TOOM32_TO_BASECASE threshold?

I believe this is the logic triggered in this case:

	  if (4 * un < 5 * vn)
	    mpn_toom22_mul (prodp, up, un, vp, vn, scratch);
	  else if (4 * un < 7 * vn)
	    mpn_toom32_mul (prodp, up, un, vp, vn, scratch);
	  else
	    mpn_toom42_mul (prodp, up, un, vp, vn, scratch);

It might even loop around a toom42 first.

(I think I'll redo the "New Toom multiplication code for unbalanced
operands" diagrams but also make a grayscale of time(best)/time(mpn_mul)
which hides behind the coloured diagram.  I am not a web expert, but if
the coloured diagram is a hyperlink to the grayscale diagram, one should
be able to flip between them and get the whole picture.)

-- 
Torbjörn
Please encrypt, key id 0xC8601622


More information about the gmp-devel mailing list