Lars Fischer on Thu, 20 Jan 2005 22:58:20 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
infinite loop using qflllgram on an opteron |
Hi,I am running into trouble using qflllgram on an Opteron machine, while the same calculation on 32-bit AMD-XP and Athlon-64 works without problems.
I have several thousand 70x70 matrices G_i with integer entries. Each entry is about 100 digits long.
On an Opteron with pari-2.2.9: qflllgram(G_i) takes about 2 minutes for 95 percent of the i's .But in 5 percent of my matrices, the calculation runs for hours, without any result.
Now I tried several things with some of the problem matrices:-On a 32 bit Desktop AMD-XP and a Athlon-64 the calculation finished without Problem.
-I compiled pari without optimizations -O0, no change.-Using pari-2.2.8 on the Opteron, some of my problem matrices finished also, but the rest did not.
I found http://pari.math.u-bordeaux.fr/archives/pari-dev-0301/msg00048.htmlIt is suggested to increase the memory. I tried it with 130, 230, 330, 500, 800 and 1000 MB. Always the same: an infinite loop. (And for 95 percent of the matrices 130 MB was enough.)
I inserted \gm 2, as also suggested. The output ends like *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 52. *** qflllgram: collecting garbage in lllfp[2], kmax = 63. *** qflllgram: collecting garbage in lllfp[1], kmax = 63. *** qflllgram: collecting garbage in lllfp[1], kmax = 69. *** qflllgram: collecting garbage in lllfp[1], kmax = 63. *** qflllgram: collecting garbage in lllfp[2], kmax = 2. *** qflllgram: collecting garbage in lllfp[1], kmax = 68. *** qflllgram: collecting garbage in lllfp[1], kmax = 60. *** qflllgram: collecting garbage in lllfp[1], kmax = 55. *** qflllgram: collecting garbage in lllfp[2], kmax = 2. *** qflllgram: collecting garbage in lllfp[2], kmax = 2. *** qflllgram: collecting garbage in lllfp[2], kmax = 2.The last line repeats until I interrupt. Comparing this output with the output on a Desktop AMD-XP, the line with lllfp[2], kmax = 2, seems related to my problem: It occurs only when the calculation loops forever.
In another run (varying memory and problem-matrix) the output ends like: *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[2], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 69. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 64. *** qflllgram: collecting garbage in lllfp[2], kmax = 2. *** qflllgram: collecting garbage in lllfp[1], kmax = 60. *** qflllgram: collecting garbage in lllfp[1], kmax = 64. *** qflllgram: collecting garbage in lllfp[2], kmax = 2. *** qflllgram: collecting garbage in lllfp[1], kmax = 61. *** qflllgram: collecting garbage in lllfp[1], kmax = 64. *** qflllgram: collecting garbage in lllfp[2], kmax = 2. *** qflllgram: collecting garbage in lllfp[1], kmax = 60. *** qflllgram: collecting garbage in lllfp[1], kmax = 64. *** qflllgram: collecting garbage in lllfp[2], kmax = 2. *** qflllgram: collecting garbage in lllfp[1], kmax = 61. *** qflllgram: collecting garbage in lllfp[1], kmax = 64. and the last six lines repeat. At home on my 32 bit AMD-XP the output of the last calculation ends with: *** qflllgram: collecting garbage in lllfp[1], kmax = 69. *** qflllgram: collecting garbage in lllfp[1], kmax = 69. *** qflllgram: collecting garbage in lllfp[1], kmax = 69. *** qflllgram: collecting garbage in lllfp[1], kmax = 69. *** qflllgram: collecting garbage in lllfp[1], kmax = 69. *** qflllgram: collecting garbage in lllfp[2], kmax = 69. *** qflllgram: collecting garbage in lllfp[1], kmax = 69. *** qflllgram: collecting garbage in lllfp[1], kmax = 69. *** qflllgram: collecting garbage in lllfp[2], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[1], kmax = 70. *** qflllgram: collecting garbage in lllfp[2], kmax = 70. And here it has successfully finished. Has anybody noticed the same problem? Can you give me advice how to avoid it?(I have to use Opterons, since they belong to a computation cluster and I have too many matrices. I cannot do the calculations at home.)
Thanks, Lars Fischer