Lars Fischer on Thu, 20 Jan 2005 22:58:20 +0100

 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

```