pari

Bugs

Modérateur : xcasadmin

Répondre
frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

pari

Message par frederic han » mer. janv. 14, 2009 9:25 pm

Salut,
J'ai un probleme avec certains retours de pari:

sur un xcas recent. (Je n'ai plus de version intermediaires, mais avec 0.7.1 tout marche)

pari()
p:=nextprime(10^4)
znprimroot(p)
donne bien
5 % 10007

en revanche a partir de 10^10, le retour est un modulaire trop gros:
p:=nextprime(10^10) (qui vaut 10000000019)
znprimroot(p) donne
2 % 6056184894185275394

a+

Fred

parisse
Messages : 5114
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » jeu. janv. 15, 2009 8:05 am

En effet, c'est un probleme de conversion des entiers de pari vers xcas. Peut-etre dans mpz_import, je remets en vigueur l'ancien code de conversion plus lent. Je suis en train de mettre a jour la version linux.
a+

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Message par frederic han » ven. janv. 16, 2009 9:53 am

ca remarche, mais l'arret en cas de *** the PARI stack overflows !
est tres brutal, on quitte xcas completement.

pari()
la ca marche
p:=10000000000129;
g:=pari_znprimroot(p);
pari_znlog(3,Mod(g,p));
ifactor(p-1);

mais si l'on donne un exemple fait expres pour depasser la memoire pari:
p:=40000000011053;
g:=pari_znprimroot(p);
pari_znlog(3,Mod(g,p));

alors ca plante brutalement.
avec pour message:
*** the PARI stack overflows !
current stack size: 10000000 (9.537 Mbytes)
[hint] you can increase GP stack with allocatemem()

*** znlog: the PARI stack overflows !
current stack size: 10000000 (9.537 Mbytes)
[hint] you can increase GP stack with allocatemem()

*** segmentation fault: bug in PARI or calling program.
Error in PARI subsystem
terminate called after throwing an instance of 'std::runtime_error'
what(): Bad Argument Value

a+

Fred

parisse
Messages : 5114
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » ven. janv. 16, 2009 11:57 am

Pour ca, je ne sais pas quoi faire, avec la version linkee dynamiquement il n'y a pas d'arret brutal sur ma machine, alors que la version liee statiquement plante effectivement.
Heureusement, c'est la version dynamique qui est intallee au concours!

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Message par frederic han » dim. févr. 08, 2009 1:20 pm

Maintenant avec la version statique, une erreur en mode pari ne quitte plus brutalement, mais ca tourne fou, et je n'arrive plus a recuperer la main sous xcas

Ex:
pari()
pari(2+m2);

parisse
Messages : 5114
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » lun. févr. 09, 2009 10:11 am

je ne vois pas de solution. En compilant avec les options de debuggage, le segmentation fault vient au moment de l'appel de pthread_exit, je suppose que c'est le mecanisme de gestion d'erreur de PARI (avec un longjmp) qui s'emmele les pinceaux avec la gestion des threads, peut-etre parce que la machine ou je compile statiquement a une version de la libpthread avec un bug. Heureusement, le probleme n'apparait pas avec la version dynamique (package debian). J'ajoute le backtrace au cas ou ca inspirerait une idee de remediation a quelqu'un d'autre:

Code : Tout sélectionner

(gdb) bt
#0  0x60032e81 in ?? ()
#1  0x4012f4bc in ?? () from /usr/local/lib/libgcc_s.so.1
#2  0x4012ae9e in _Unwind_FindEnclosingFunction ()
   from /usr/local/lib/libgcc_s.so.1
#3  0x4012b7d6 in _Unwind_RaiseException () from /usr/local/lib/libgcc_s.so.1
#4  0x4012b8dd in _Unwind_ForcedUnwind () from /usr/local/lib/libgcc_s.so.1
#5  0x4003101a in _Unwind_ForcedUnwind () from /lib/tls/libpthread.so.0
#6  0x4002f1c3 in __pthread_unwind () from /lib/tls/libpthread.so.0
#7  0x4002bbc1 in pthread_exit () from /lib/tls/libpthread.so.0
#8  0x083c8976 in giac::in_thread_eval (arg=0x9a3887c) at global.cc:2484
#9  0x4002ab63 in start_thread () from /lib/tls/libpthread.so.0
#10 0x4020818a in clone () from /lib/tls/libc.so.6

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Message par frederic han » lun. févr. 09, 2009 10:32 am

Je viens de tester la version sur la clef agreg 5.1 ca le fait aussi.

mais si je fais
ldd /usr/bin/xcas
je vois beaucoup plus de librairies qu'avec xcas_root, mais je
ne vois pas libpari.so.2

mais avec une version que j'ai compile le 15 jan la ca marche.

parisse
Messages : 5114
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » lun. févr. 09, 2009 3:12 pm

Je viens de tester avec le .deb que je viens de mettre a jour, et ca marche, il faudra demander a Francois Boisson comment ca marche sur les PC de l'agreg. Le mystere reste entier. En tous cas, il faut conseiller aux etudiants de faire une sauvegarde avant de lancer une commande pari.

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Message par frederic han » mar. févr. 10, 2009 11:27 am

Aie,

je suis sous debian etch, le paquet tout en un .deb ne marche pas pour moi.
(le 0.8.1 marche)
J'ai essaye de compiler depuis les sources, ca fait pareil.



En revanche sur la machine sous freeBSD, la version compilee depuis les sources marche bien.

Fred

parisse
Messages : 5114
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » mar. févr. 10, 2009 12:21 pm

bon, je crois que j'ai trouve une semi-parade, en tout cas ca ne plante plus tout de suite avec la version statique. Par contre une erreur survenant ensuite pose probleme, mais on a alors eu le temps de sauvegarder et relancer. Apparemment c'est un probleme d'incompatibilite entre les gestionnaires d'erreurs de pari et de la libstdc++, je n'ai pas d'autre idee pour regler definitivement le probleme.
Je te laisse essayer la mise a jour de xcas_root ou user.

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Message par frederic han » mar. févr. 10, 2009 12:49 pm

Super, je viens de faire un test pour moi ca marche, et j'arrive a refaire du pari meme apres une erreur:

Ex
pari()
pari(2+m2) je recupere bien la main
pari(2+2)

Je ferai un test sur la clef 5.1 un peu plus tard

Fred

Répondre