Réponse

Résolu/Fermé
raya - Modifié le 29 déc. 2020 à 11:18
_Ritchi_ Messages postés 21293 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 26 novembre 2024 - 29 déc. 2020 à 11:23
Bonjour,

puis-je avoir la réponse de cet exercice?


Enoncé :
Une manière de déterminer les nombres premiers dans un intervalle est de découper l'espace
de recherche en plusieurs sous-intervalles et d'affecter la recherche dans chaque intervalle à
un processus créé par le père.
Ainsi si on découpe l'intervalle [1, N] en p sous-intervalles, le processus père lance p fils et le
fils k recherche l'intervalle [kN/p + 1, (k + 1)N/p], k = 0,...,p - 1. Cette technique permet, si
on dispose d'une machine équipée de p processeurs, de paralléliser la recherche (et d'essayer
de retourner le résultat p fois plus vite). Elle a cependant l'inconvénient d'affecter des espaces
de recherche dont les temps d'exploration sont inégaux. Ainsi le processus 0 terminera la
recherche sur [1, N/p] bien avant le processus p - 1. Il sera donc oisif (passif) jusqu'à la fin du
programme dont il fait partie. La charge de travail entre les processus (et donc les
processeurs) est inégalement repartie.
Une solution (celle que vous devez programmer) pour répartir la charge de travail, consiste à
utiliser un « pool » de p processus esclaves à qui un processus maître affecte successivement
des travaux de recherche de nombres premiers dans de petits intervalles (taille T << N/p).
Quand un processus esclave a fini sa recherche, le maître lui affecte la recherche dans un
intervalle encore inexploré et ainsi de suite jusqu’à la terminaison totale de la recherche.
Hypothèses à prendre en compte pour votre implantation :
 Le maître est le processus père;
 Les p processus esclaves sont des fils « forkés » par le père (fonction fork)
 Pour communiquer avec ses fils, le père utilise un tube différent pour chaque fils
 Pour communiquer avec le père, les fils utilisent un tube commun
 Le protocole de communication est défini comme suit :
o Le processus père communique à un de ses processus fils les bornes de
l'intervalle de recherche par le tube associé au fils
o Le processus père transmet deux entiers de valeur 0 pour indiquer à un
processus fils qu'il peut se terminer
o Un processus fils renvoie à son processus père les nombres premiers trouvés et
0 pour indiquer qu'il a terminé l'exploration de l'intervalle
o Pour s'identifier auprès de son processus père, un processus fils fait précéder
chaque nombre envoyé par son numéro.

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
29 déc. 2020 à 11:21
Salut,

Mais bien sûr : tout est là ;-))

0
_Ritchi_ Messages postés 21293 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 26 novembre 2024 6 080
29 déc. 2020 à 11:23
Bonjour,

Je ne pense pas que tu auras la réponse: ce site d'entraide n'est pas fait pour soulager les élèves/étudiants qui ne veulent pas travailler ou réfléchir avec leurs propres connaissances.

Écrit d'abord ton code, propose-le ici et si il ne marche pas à cause d'une erreur d'encodage ou d’algorithme, alors on pourra te suggérer des pistes afin que tu découvres le pourquoi de ton souci et donc que tu apprennes des choses.

Ritchi
0