On 11 November 2014 00:53, Fredrik Johansson <fredrik.johans...@gmail.com> wrote: > > > On Tuesday, November 11, 2014 12:21:12 AM UTC+1, William wrote: >> >> On Mon, Nov 10, 2014 at 3:08 PM, Ursula Whitcher <whit...@uwec.edu> wrote: >> > On 11/5/2014 8:24 AM, William Stein wrote: >> > >> >> * By "we write up" above, I mean you write up something very, very >> >> rough, post it here, and get feedback. >> > >> > >> > Done! >> > >> > http://people.uwec.edu/whitchua/notes/sagebugprocess.pdf >> >> Wow, that's really nice! I really like the tone and length. >> >> > I stuck with Ticket 14032 as my example; I think the tradeoff of >> > interesting >> > algorithm vs. boring bug is OK for a general math audience. >> > >> > Questions: >> > >> > * Who found the bug corresponding to ticket 14032? Was the computation >> > in >> > service of an interesting research question? >> > >> >> Jeroen Demeyer reported it -- did you also *find* it Jeroen? >> >> > * Originally, William said "working modulo a few additional primes". >> > Does >> > this mean doing p-adic lifting again, or just black-box computing det A >> > (mod >> > p), as I have implied? >> >> Just black-box computing det A, as you implied. >> >> One thing that isn't technically 100% correct about the p-adic lifting >> part of what you say is that one in fact >> works modulo several distinct primes lifting p-adically a bit, rather >> than modulo only one prime. You might just say in parens that the >> actual implementation is slightly more subtle than what you describe >> and cite https://cs.uwaterloo.ca/~astorjoh/iml.html >> I've cc'd Arne Storjohann (co-author of IML) and Clement Pernet on this >> message. >> >> As Sage is switching to FLINT very soon by default for integer matrix >> determinants (due to Marc Masdue's recent patch), I wonder what >> algorithm FLINT uses for this problem? It would be good to be aware >> at least. >> > > I wrote the determinant code in FLINT. It uses cofactor expansion up to size > 4, the Bareiss algorithm (fraction-free Gaussian elimination) up to size 24, > and the multimodular algorithm (compute modulo small primes whose product > exceeds twice the Hadamard bound) up to size 59. The determinants mod p are > computed using recursive LU decomposition, with Strassen matrix > multiplication for sufficiently large matrices, and some tricks like delayed > reduction to make the mod p arithmetic fast. > > From size 60, FLINT uses the multimodular algorithm, but if the matrix has > small entries (max bits <= matrix size) it uses the trick of computing a > divisor of the determinant by solving a "random" linear system using p-adic > lifting -- some quick testing I did suggested that this trick is slower than > the straight multimodular algorithm when the matrix has very large entries. > > Either the p-adic lifting or the determinants modulo small primes can be a > bottleneck. IML is faster for very large matrices (from around size 500-1000 > and up the last time I checked). One reason for this is that FLINT does not > yet use BLAS for mod p linear algebra. I think IML also uses a better > lifting strategy. > > The determinant code in FLINT isn't optimized for singular matrices. Instead > of going all the way up to the Hadamard bound, you could stop if the > determinant is zero modulo the first prime you try, and then verify that the > matrix really is singular by computing a certified rref. At least I think > this might be faster in practice. One of our two GSoC students this year, > Alex Best, implemented the mod p + certification algorithm for the > fmpz_mat_rref, fmpz_mat_rank and fmpz_mat_nullspace functions, which makes > them vastly faster than what we had before for large matrices. Alex's code > has been merged into the git trunk and will be included in the next FLINT > release.
Point of info: Alex Best graduated recently from Warwick with a 3-year degree in Discrete Mathematics though he had also covered several extra courses from our 4-year mathematics degree, As well as his amazing work for GSoC he was also simultabeously doing a summer research project with Lassina Dembele. He is now doing the Cambridge "Part III" course and will be looking for a PhD place for next year.... If he is reading this, I hope Alex does not mind me saying all this! John > > Another thing FLINT doesn't optimize for is matrices that are triangular, > diagonal, or extremely sparse. These probably constitute a decent fraction > of real-world input, so it would probably be worth the very slight overhead > to check for them... > > Fredrik > > -- > You received this message because you are subscribed to the Google Groups > "sage-devel" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sage-devel+unsubscr...@googlegroups.com. > To post to this group, send email to sage-devel@googlegroups.com. > Visit this group at http://groups.google.com/group/sage-devel. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.