Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

recherche code multi thread java pour test de primalite

16 réponses
Avatar
remy
bonjour

vous ne connaitriez pas un bout de code multi thread
java qui ferait un test de primalit=E9
histoire de me servir de tous les coeurs de la machine
c'est pour booster un peu le code

http://cjoint.com/data/mwlRFNicX7.htm

vu que la m=EAme impl=E9mentation en c
http://cjoint.com/data/mwlL3wfBsX.htm

c'est av=E9r=E9e moins rapide
=E0 titre perso je ne m'attendais pas =E0 un =E9cart aussi grand



merci remy
--=20
http://remyaumeunier.chez-alice.fr/

10 réponses

1 2
Avatar
Yliur
Le Tue, 22 Dec 2009 11:52:21 +0100
remy a écrit :

bonjour

vous ne connaitriez pas un bout de code multi thread
java qui ferait un test de primalité
histoire de me servir de tous les coeurs de la machine
c'est pour booster un peu le code

http://cjoint.com/data/mwlRFNicX7.htm

vu que la même implémentation en c
http://cjoint.com/data/mwlL3wfBsX.htm

c'est avérée moins rapide
à titre perso je ne m'attendais pas à un écart aussi grand



merci remy



La version C est *moins* rapide ?
Quel est l'écart ?

Et pour le test, comment le fais-tu ? Ça ne devrait pas être difficile
à distribuer.
Avatar
remy
Yliur a écrit :
Le Tue, 22 Dec 2009 11:52:21 +0100
remy a écrit :

bonjour

vous ne connaitriez pas un bout de code multi thread
java qui ferait un test de primalité
histoire de me servir de tous les coeurs de la machine
c'est pour booster un peu le code

http://cjoint.com/data/mwlRFNicX7.htm

vu que la même implémentation en c
http://cjoint.com/data/mwlL3wfBsX.htm

c'est avérée moins rapide
à titre perso je ne m'attendais pas à un écart aussi grand



merci remy



La version C est *moins* rapide ?
Quel est l'écart ?



il te faut la libgmp voir avec synaptic et gcc


gcc -o jumeaux jumeaux.c -lgmp
time ./jumeaux

real 0m34.833s
user 0m34.230s
sys 0m0.000s
:~/Bureau/cJumeaux$

javac jumeaux.java
time java jumeaux

real 0m12.011s
user 0m12.429s
sys 0m0.416s
:~/Bureau/cJumeaux$



Et pour le test, comment le fais-tu ? Ça ne devrait pas être diffic ile
à distribuer.




disons que j'ai actuellement la flemme de coder mon propre test de
primalité donc j'utilise celui qui est fourni de base
dans gmp et biginteger ce qui si j'en crois mes lectures ils utilisent
tous les 2 un test de primalité Miller-Rabin

http://fr.wikipedia.org/wiki/Test_de_primalit%C3%A9_de_Miller-Rabin


remy


--
http://remyaumeunier.chez-alice.fr/
Avatar
Yliur
Le Tue, 22 Dec 2009 12:17:43 +0100
remy a écrit :

Yliur a écrit :
> Le Tue, 22 Dec 2009 11:52:21 +0100
> remy a écrit :
>
>> bonjour
>>
>> vous ne connaitriez pas un bout de code multi thread
>> java qui ferait un test de primalité
>> histoire de me servir de tous les coeurs de la machine
>> c'est pour booster un peu le code
>>
>> http://cjoint.com/data/mwlRFNicX7.htm
>>
>> vu que la même implémentation en c
>> http://cjoint.com/data/mwlL3wfBsX.htm
>>
>> c'est avérée moins rapide
>> à titre perso je ne m'attendais pas à un écart aussi grand
>>
>>
>>
>> merci remy
>
> La version C est *moins* rapide ?
> Quel est l'écart ?

il te faut la libgmp voir avec synaptic et gcc


gcc -o jumeaux jumeaux.c -lgmp
time ./jumeaux

real 0m34.833s
user 0m34.230s
sys 0m0.000s
:~/Bureau/cJumeaux$

javac jumeaux.java
time java jumeaux

real 0m12.011s
user 0m12.429s
sys 0m0.416s
:~/Bureau/cJumeaux$



Je n'ai pas vérifié les deux implémentations, mais c'est étrange. s ur
ce genre de calculs en général ça va plus vite en C. Mais c'est
difficile à comparer en utilisant des bibliothèques externes,
peut-être que ce sont elles qui sont en cause. Enfin ce n'est pas
très important...

Par contre pour des programmes qui ont besoin de faire des calculs plus
rapides, tu pourrait ajouter -O2 dans ta compilation avec gcc et
-server dans le lancement de ta JVM.


>
> Et pour le test, comment le fais-tu ? Ça ne devrait pas être
> difficile à distribuer.
>

disons que j'ai actuellement la flemme de coder mon propre test de
primalité donc j'utilise celui qui est fourni de base
dans gmp et biginteger ce qui si j'en crois mes lectures ils utilisent
tous les 2 un test de primalité Miller-Rabin

http://fr.wikipedia.org/wiki/Test_de_primalit%C3%A9_de_Miller-Rabin


remy



Et tu as regardé ce qui consommait du temps exactement ?
Est-ce que ta boucle est répétée beaucoup de fois ? Tu ne pourrais pas
lancer plusieurs itérations en même temps plutôt qu'utiliser un aut re
algo de test pour tes nombres premiers ?
Avatar
Yliur
Le Tue, 22 Dec 2009 13:33:31 +0100
batyann811 a écrit :

Yliur a écrit :
>
> Je n'ai pas vérifié les deux implémentations, mais c'est étrang e.
> sur ce genre de calculs en général ça va plus vite en C. Mais c'e st
> difficile à comparer en utilisant des bibliothèques externes,
> peut-être que ce sont elles qui sont en cause. Enfin ce n'est pas
> très important...
>

Après un rapide coup d'oeil sur la libgmp il semblerait que le type
mpz_t cache de l'allocation dynamique (d'ailleurs il manque les
appels à mpz_clear pour libérer la mémoire). Dans un cas comme ça il
n'est pas impossible que Java avec son JIT puisse s'avèrer plus
efficace.

> Et tu as regardé ce qui consommait du temps exactement ?
> Est-ce que ta boucle est répétée beaucoup de fois ? Tu ne pourrais
> pas lancer plusieurs itérations en même temps plutôt qu'utiliser un
> autre algo de test pour tes nombres premiers ?
>

Moi je me demande si les 2 codes font la même chose...

extrait du code C :

if(mpz_probab_prime_p(val1,500)>0)
{
if(mpz_probab_prime_p(val2,500)>0)

extrait du code Java :

if (val1.isProbablePrime(100))
{
if (val2.isProbablePrime(100))

Rien ne dit que les valeurs 100 en java et 500 en C vont provoquer le
même nombre de tests...

D'ailleurs la doc de GMP précise pour ce paramètre : '5 to 10 is a
reasonable number'. Alors 500...


Bref il faut comparer ce qui est comparable.



Oui, j'ai eu la flemme de lire les deux codes en entier pour en tirer
quelque chose :) . Mais à part l'écart qu'il avait noté et qui
m'intriguait, il cherchait comment utiliser les différents coeurs de
sa machine. C'est à ça que je pensais dans ce paragraphe sur sa
boucle : au lieu de trouver une autre implémentation de ses
bibliothèques qui utiliserait plusieurs coeurs, il pourrait peut-être
paralléliser son algo à lui.
Avatar
JKB
Le 22-12-2009, ? propos de
Re: recherche code multi thread java pour test de primalite,
remy ?crivait dans fr.comp.lang.java :
Yliur a écrit :
Le Tue, 22 Dec 2009 11:52:21 +0100
remy a écrit :

bonjour

vous ne connaitriez pas un bout de code multi thread
java qui ferait un test de primalité
histoire de me servir de tous les coeurs de la machine
c'est pour booster un peu le code

http://cjoint.com/data/mwlRFNicX7.htm

vu que la même implémentation en c
http://cjoint.com/data/mwlL3wfBsX.htm

c'est avérée moins rapide
à titre perso je ne m'attendais pas à un écart aussi grand



merci remy



La version C est *moins* rapide ?
Quel est l'écart ?



il te faut la libgmp voir avec synaptic et gcc



Je t'ai déjà dit de commencer par coller in -O3 sur la compilation
de la libgmp et la même chose sur ton code (encore qu'en
l'occurrence, ça ne devrait pas changer grand'chose pour ton code).
Avoir une telle différence tend à montrer qu'il y a un loup.

gcc -o jumeaux jumeaux.c -lgmp
time ./jumeaux

real 0m34.833s
user 0m34.230s
sys 0m0.000s
:~/Bureau/cJumeaux$

javac jumeaux.java
time java jumeaux

real 0m12.011s
user 0m12.429s
sys 0m0.416s
:~/Bureau/cJumeaux$



Et pour le test, comment le fais-tu ? Ça ne devrait pas être difficile
à distribuer.




disons que j'ai actuellement la flemme de coder mon propre test de
primalité donc j'utilise celui qui est fourni de base
dans gmp et biginteger ce qui si j'en crois mes lectures ils utilisent
tous les 2 un test de primalité Miller-Rabin

http://fr.wikipedia.org/wiki/Test_de_primalit%C3%A9_de_Miller-Rabin



Je t'ai déjà dit aussi qu'avec le même algorithme de base, on peut
coder des choses qui ont des performances parfaitement divergentes.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
Yliur
Le Tue, 22 Dec 2009 15:06:16 +0100
remy a écrit :

Yliur a écrit :
> Le Tue, 22 Dec 2009 12:17:43 +0100
> remy a écrit :
>
>> Yliur a écrit :
>>> Le Tue, 22 Dec 2009 11:52:21 +0100
>>> remy a écrit :
>>>
>>>> bonjour
>>>>
>>>> vous ne connaitriez pas un bout de code multi thread
>>>> java qui ferait un test de primalité
>>>> histoire de me servir de tous les coeurs de la machine
>>>> c'est pour booster un peu le code
>>>>
>>>> http://cjoint.com/data/mwlRFNicX7.htm
>>>>
>>>> vu que la même implémentation en c
>>>> http://cjoint.com/data/mwlL3wfBsX.htm
>>>>
>>>> c'est avérée moins rapide
>>>> à titre perso je ne m'attendais pas à un écart aussi grand
>>>>
>>>>
>>>>
>>>> merci remy
>>> La version C est *moins* rapide ?
>>> Quel est l'écart ?
>> il te faut la libgmp voir avec synaptic et gcc
>>
>>
>> gcc -o jumeaux jumeaux.c -lgmp
>> time ./jumeaux
>>
>> real 0m34.833s
>> user 0m34.230s
>> sys 0m0.000s
>> :~/Bureau/cJumeaux$
>>
>> javac jumeaux.java
>> time java jumeaux
>>
>> real 0m12.011s
>> user 0m12.429s
>> sys 0m0.416s
>> :~/Bureau/cJumeaux$
>
> Je n'ai pas vérifié les deux implémentations, mais c'est étrang e.
> sur ce genre de calculs en général ça va plus vite en C. Mais c'e st
> difficile à comparer en utilisant des bibliothèques externes,
> peut-être que ce sont elles qui sont en cause. Enfin ce n'est pas
> très important...
>
> Par contre pour des programmes qui ont besoin de faire des calculs
> plus rapides, tu pourrait ajouter -O2 dans ta compilation avec gcc
> et -server dans le lancement de ta JVM.
>
>

o2 me retourne une tripotée erreur

[... plein d'erreurs]



Non, pas comme ça :)
Il faut garder le -o pour créer les objets, mais ajouter -O2 (avec un O
majuscule) pour activer les optimisations lors de la compilation.
Après si c'est une bibliothèque externe qui consomme le temps de
calcul ça ne changera pas grand chose.


et avec
:~/Bureau/cJumeaux$ time java -server jumeaux

nb de pas 381
qt nb premier consecutif 45
1497271467298031313236780933978888894922017474242792191470119801708427842 6205606579
1497271467298031313236780933978888894922017474242792191470119801708427842 6205606581

real 0m11.506s
user 0m11.893s
sys 0m0.416s
:~/Bureau/cJumeaux$



Tiens, ça n'a rien changé ?
Avatar
remy
JKB a écrit :
Le 22-12-2009, ? propos de
Re: recherche code multi thread java pour test de primalite,
remy ?crivait dans fr.comp.lang.java :
Yliur a écrit :
Le Tue, 22 Dec 2009 11:52:21 +0100
remy a écrit :

bonjour

vous ne connaitriez pas un bout de code multi thread
java qui ferait un test de primalité
histoire de me servir de tous les coeurs de la machine
c'est pour booster un peu le code

http://cjoint.com/data/mwlRFNicX7.htm

vu que la même implémentation en c
http://cjoint.com/data/mwlL3wfBsX.htm

c'est avérée moins rapide
à titre perso je ne m'attendais pas à un écart aussi grand



merci remy


La version C est *moins* rapide ?
Quel est l'écart ?


il te faut la libgmp voir avec synaptic et gcc



Je t'ai déjà dit de commencer par coller in -O3 sur la compi lation
de la libgmp et la même chose sur ton code (encore qu'en
l'occurrence, ça ne devrait pas changer grand'chose pour ton code ).
Avoir une telle différence tend à montrer qu'il y a un loup.

gcc -o jumeaux jumeaux.c -lgmp
time ./jumeaux

real 0m34.833s
user 0m34.230s
sys 0m0.000s
:~/Bureau/cJumeaux$

javac jumeaux.java
time java jumeaux

real 0m12.011s
user 0m12.429s
sys 0m0.416s
:~/Bureau/cJumeaux$


Et pour le test, comment le fais-tu ? Ça ne devrait pas êtr e difficile
à distribuer.



disons que j'ai actuellement la flemme de coder mon propre test de
primalité donc j'utilise celui qui est fourni de base
dans gmp et biginteger ce qui si j'en crois mes lectures ils utilisent
tous les 2 un test de primalité Miller-Rabin

http://fr.wikipedia.org/wiki/Test_de_primalit%C3%A9_de_Miller-Rabin



Je t'ai déjà dit aussi qu'avec le même algorithme de ba se, on peut
coder des choses qui ont des performances parfaitement divergentes.

JKB



arrêt de prendre le gens pour des con


--
http://remyaumeunier.chez-alice.fr/
Avatar
Yliur
> >> Et pour le test, comment le fais-tu ? Ça ne devrait pas être
>> difficile à distribuer.
>>
>
> disons que j'ai actuellement la flemme de coder mon propre test de
> primalité donc j'utilise celui qui est fourni de base
> dans gmp et biginteger ce qui si j'en crois mes lectures ils
> utilisent tous les 2 un test de primalité Miller-Rabin
>
> http://fr.wikipedia.org/wiki/Test_de_primalit%C3%A9_de_Miller-Rabin

Je t'ai déjà dit aussi qu'avec le même algorithme de base, on
peut coder des choses qui ont des performances parfaitement
divergentes.

JKB




La deuxième partie de son message ne concernait pas les performances,
il cherchait comment paralléliser son calcul pour utiliser tous les
coeurs de sa machine.
Avatar
JKB
Le 22-12-2009, ? propos de
Re: recherche code multi thread java pour test de primalite,
Yliur ?crivait dans fr.comp.lang.java :
Le Tue, 22 Dec 2009 15:06:16 +0100
remy a écrit :

Yliur a écrit :
> Le Tue, 22 Dec 2009 12:17:43 +0100
> remy a écrit :
>
>> Yliur a écrit :
>>> Le Tue, 22 Dec 2009 11:52:21 +0100
>>> remy a écrit :
>>>
>>>> bonjour
>>>>
>>>> vous ne connaitriez pas un bout de code multi thread
>>>> java qui ferait un test de primalité
>>>> histoire de me servir de tous les coeurs de la machine
>>>> c'est pour booster un peu le code
>>>>
>>>> http://cjoint.com/data/mwlRFNicX7.htm
>>>>
>>>> vu que la même implémentation en c
>>>> http://cjoint.com/data/mwlL3wfBsX.htm
>>>>
>>>> c'est avérée moins rapide
>>>> à titre perso je ne m'attendais pas à un écart aussi grand
>>>>
>>>>
>>>>
>>>> merci remy
>>> La version C est *moins* rapide ?
>>> Quel est l'écart ?
>> il te faut la libgmp voir avec synaptic et gcc
>>
>>
>> gcc -o jumeaux jumeaux.c -lgmp
>> time ./jumeaux
>>
>> real 0m34.833s
>> user 0m34.230s
>> sys 0m0.000s
>> :~/Bureau/cJumeaux$
>>
>> javac jumeaux.java
>> time java jumeaux
>>
>> real 0m12.011s
>> user 0m12.429s
>> sys 0m0.416s
>> :~/Bureau/cJumeaux$
>
> Je n'ai pas vérifié les deux implémentations, mais c'est étrange.
> sur ce genre de calculs en général ça va plus vite en C. Mais c'est
> difficile à comparer en utilisant des bibliothèques externes,
> peut-être que ce sont elles qui sont en cause. Enfin ce n'est pas
> très important...
>
> Par contre pour des programmes qui ont besoin de faire des calculs
> plus rapides, tu pourrait ajouter -O2 dans ta compilation avec gcc
> et -server dans le lancement de ta JVM.
>
>

o2 me retourne une tripotée erreur

[... plein d'erreurs]



Non, pas comme ça :)
Il faut garder le -o pour créer les objets, mais ajouter -O2 (avec un O
majuscule) pour activer les optimisations lors de la compilation.
Après si c'est une bibliothèque externe qui consomme le temps de
calcul ça ne changera pas grand chose.



Le gros du calcul étant fait dans la libgmp, il faudrait aussi
regarder de près les options de compilation de ladite bibliothèque.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
JKB
Le 22-12-2009, ? propos de
Re: recherche code multi thread java pour test de primalite,
remy ?crivait dans fr.comp.lang.java :
JKB a écrit :
Le 22-12-2009, ? propos de
Re: recherche code multi thread java pour test de primalite,
remy ?crivait dans fr.comp.lang.java :
Yliur a écrit :
Le Tue, 22 Dec 2009 11:52:21 +0100
remy a écrit :

bonjour

vous ne connaitriez pas un bout de code multi thread
java qui ferait un test de primalité
histoire de me servir de tous les coeurs de la machine
c'est pour booster un peu le code

http://cjoint.com/data/mwlRFNicX7.htm

vu que la même implémentation en c
http://cjoint.com/data/mwlL3wfBsX.htm

c'est avérée moins rapide
à titre perso je ne m'attendais pas à un écart aussi grand



merci remy


La version C est *moins* rapide ?
Quel est l'écart ?


il te faut la libgmp voir avec synaptic et gcc



Je t'ai déjà dit de commencer par coller in -O3 sur la compilation
de la libgmp et la même chose sur ton code (encore qu'en
l'occurrence, ça ne devrait pas changer grand'chose pour ton code).
Avoir une telle différence tend à montrer qu'il y a un loup.

gcc -o jumeaux jumeaux.c -lgmp
time ./jumeaux

real 0m34.833s
user 0m34.230s
sys 0m0.000s
:~/Bureau/cJumeaux$

javac jumeaux.java
time java jumeaux

real 0m12.011s
user 0m12.429s
sys 0m0.416s
:~/Bureau/cJumeaux$


Et pour le test, comment le fais-tu ? Ça ne devrait pas être difficile
à distribuer.



disons que j'ai actuellement la flemme de coder mon propre test de
primalité donc j'utilise celui qui est fourni de base
dans gmp et biginteger ce qui si j'en crois mes lectures ils utilisent
tous les 2 un test de primalité Miller-Rabin

http://fr.wikipedia.org/wiki/Test_de_primalit%C3%A9_de_Miller-Rabin



Je t'ai déjà dit aussi qu'avec le même algorithme de base, on peut
coder des choses qui ont des performances parfaitement divergentes.

JKB



arrêt de prendre le gens pour des con



Le problème, vois-tu, c'est que tu viens de déplacer une discussion
d'un forum à un autre parce que ce qui t'était dit sur fsm ne te
convenait pas. Tu n'as pas l'impression de prendre les gens qui
prennent la peine de te répondre pour eds imbéciles, parfois ?
Est-ce que je ne t'avais pas dit de vérifier ce que faisaient des
routines dans les _deux_ langages, voire de les coder _toi-même_ ?

Quant à la dernière assertion, je persiste et signe.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
1 2