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.html
It 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