Algorithme Crible d'Ératosthène en distribué (application réparti)

Algorithme Crible d'Ératosthène en distribué (application réparti) - Algo - Programmation

Marsh Posté le 05-03-2009 à 20:15:13    

Salut

 

Je voudrais faire une application réparti sur deux ou plusieurs machines pour le calcule des nombres premiers. J'ai vu qu'il y avais l'algorithme de Crible d'Ératosthène: http://fr.wikipedia.org/wiki/Cribl [...] th%C3%A8ne
mais je ne vois pas comment l'appliquer pour un calcule distribué sur deux machines, vu qu'il n y pas de mémoire commune contenant le tableau.
Avez vous des idées sur comment faire svp ?
Merci d'avance.

 

Voici l'algorithme (code C) de crible d'Eratosthène en séquentiel (non distribué) :

Code :
  1. void premiers(int tableau[], long tailleTableau)
  2. {
  3.    long i, j;
  4.    tableau[0] = tableau[1] = 0;
  5.    for (i = 2 ; i < tailleTableau ; i++)
  6.       tableau[i] = 1;
  7.    for (i = 2 ; i < sqrt(tailleTableau) ; i++)
  8.       if (tableau[i])
  9.          for (j = i*i ; j < tailleTableau ; j += i)
  10.             tableau[j] = 0;
  11.    /*Affichage :
  12.    for (i = 0 ; i < tailleTableau ; i++)
  13.       if (tableau[i]) printf ("%ld ", i);
  14.    Fin Affichage */
  15. }
 

EDIT:
Pour pouvoir répartir le calcule sur plusieurs processus (ce trouvant sur des machines différentes) j'ai pensé à considérer un processus maître qui envoi au autres processus esclaves leur intervalles de calcule (la suite de nombres sur lesquels le processus exécutera l'algorithme) et ce processus maître a lui aussi son intervalle de calcule.

 

Mais même comme ça ce n'est évident car l'algorithme de calcule des nombres premiers que va effectué un processus P1 sur le 1er intervalle de nombres va avoir un impacte sur le reste des nombres (voir l'algorithme de Crible d'Ératosthène) et donc les calcules du processus P2 par exemple pourront être fausse car peut être P1 a éliminé un nombre (non premier) appartenant à l'intervalle de calcule de P2 mais P2 va quand même effectué le calcule sur ce nombre car il n'as pas été informé par P1.

 

Vous pouvez peut être me dire dans ce cas de faire en sorte qu'à chaque fois qu'un processus élimine un nombre (non premier), il envoi un message au autres processus (ou au processus concerné) afin les informé que ce nombre est non premier pour qu'ils ne le traitent pas. Mais le problème dans ce cas serai: si le processus P2 (par exemple) a déjà traité le nombre en question avant qu'il ne reçoi le message provenant de P1 lui disant de ne pas le traiter (car non premier).

 

Des idées pour régler ces problèmes svp ?


Message édité par tomap le 06-03-2009 à 02:29:45
Reply

Marsh Posté le 05-03-2009 à 20:15:13   

Reply

Marsh Posté le 06-03-2009 à 00:26:00    

up


Message édité par tomap le 06-03-2009 à 00:47:08
Reply

Marsh Posté le 06-03-2009 à 11:39:45    


Bonjour fluminis, le code de ce lien est un programme qui crée des threads (en utilisant "openmp" ) qui vont faire le calcule en parallèle sur une même machine, ce n'est pas exactement ce que je cherche.

 

Ce que je veux c'est une version distribué (réparti sur plusieurs machines) de l'algorithme de calcule de nombres premiers. Les processus se trouvant sur les différentes machines communiques entre eux via l'envoi de messages (ça sera via sockets lors de l'implémentation).


Message édité par tomap le 06-03-2009 à 11:41:13
Reply

Marsh Posté le 06-03-2009 à 12:06:07    

Oui, le but de mon lien etait :
- que tu t'inspire de l'algo pour faire ce que souhaite faire
- dire que le Crible d'Ératosthène n'est pas forcement l'algo qu'il te faut si tu fait du multithread, ou alors qu'il faut que tu le modifies...


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 06-03-2009 à 12:20:19    

fluminis a écrit :

Oui, le but de mon lien etait :
- que tu t'inspire de l'algo pour faire ce que souhaite faire
- dire que le Crible d'Ératosthène n'est pas forcement l'algo qu'il te faut si tu fait du multithread, ou alors qu'il faut que tu le modifies...


Merci fluminis,
J'ai rapidement lu le code source du lien mais c'est un peut codé à l'arrache (et en C++), je n'ai pas bien compris son principe, peux tu me le transcrire en Algorithme clairement parlé ?
Sinon pour le Crible d'Ératosthène justement je cherche à le modifié de façon a ce qu'il soi distribué.

Reply

Marsh Posté le 06-03-2009 à 13:08:07    

euh c plsu du C que du C++ hein [:dawa]

Reply

Marsh Posté le 06-03-2009 à 13:11:07    

Joel F a écrit :

euh c plsu du C que du C++ hein [:dawa]


Même pas, ce n'est pas du standard. Enfin peut importe un algo claire et bien fait sans utiliser quelque chose comme openmp serai bien mieux (indépendamment de la spécificité de tel ou tel langage de programmation).


Message édité par tomap le 06-03-2009 à 13:51:17
Reply

Marsh Posté le 06-03-2009 à 13:13:36    

bon tu as surtout envie qu'on fasse ton travail à ta place.  
Les pragma openMP ne changent rien à la sémantique du code qu'ils entourent donc t'as un bete nid de boucle à dépioter.
 
Hint % c'ets modulo :o

Reply

Marsh Posté le 06-03-2009 à 13:16:21    

Joel F a écrit :

bon tu as surtout envie qu'on fasse ton travail à ta place...


Non, le truc c'est que je ne voudrais pas changé d'algorithme, je voudrais utilisé quand même le Crible d'Ératosthène.

 

J'ai trouvé quelque chose qui parle de ce que je veux faire (Crible d'Ératosthène version distribué): http://hal.archives-ouvertes.fr/do [...] leRoue.pdf
Mais c'est expliqué juste dans un petit paragraphe j'arrive pas faire le pseudo-code algorithmique.


Message édité par tomap le 06-03-2009 à 13:51:55
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed