Paralléliser les tris à l'aide de fork

Paralléliser les tris à l'aide de fork - C - Programmation

Marsh Posté le 03-02-2019 à 12:55:43    

Bonjour,
J'ai clairement besoin d'aide concernant la parallélisation de taches sous linux grâce aux forks,
 
Mon programme réalise un tri sur un énorme fichier qu'il va découper en sous fichiers, les tries indépendamment puis les merger, puis supprime les sous fichiers.
L'idée est de paralléliser les tris des différents sous-fichiers. Voici la fonction qui tri les sous-fichiers :  

Code :
  1. void projectV2_sortFiles(unsigned long nb_split, const char ** filenames, const char ** filenames_sort){
  2.   unsigned long cpt = 0;
  3.     for(cpt = 0; cpt < nb_split; ++cpt){
  4.       int * values = NULL;
  5.       unsigned long nb_elem = SU_loadFile(filenames[cpt], &values);
  6.       SU_removeFile(filenames[cpt]);
  7.       fprintf(stderr, "Inner sort %lu: Array of %lu elem by %d\n", cpt, nb_elem, getpid());
  8.       SORTALGO(nb_elem, values);
  9.       SU_saveFile(filenames_sort[cpt], nb_elem, values);
  10.       free(values);
  11.     }
  12. }


Afin de paralléliser les tris j'ai rajouté ce qui suit :

Code :
  1. void projectV2_sortFiles(unsigned long nb_split, const char ** filenames, const char ** filenames_sort){
  2.   unsigned long cpt = 0;
  3.   pid_t pid = fork();
  4.   if (pid==-1){
  5.     exit(EXIT_FAILURE);
  6.   } else if (pid==0) {
  7. /** code de la fonction (du for -> au free) */
  8.   } else{
  9.     for(cpt = 0; cpt < nb_split; ++cpt){
  10.       wait(NULL);
  11.     }
  12.   }
  13. }


Le tri fonctionne, il est réalisé plus rapidement mais j'ai une erreur à la suppression d'un des sous fichiers.
Concrètement je veux juste savoir si j'ai bien compris le principe ou si je fais n'importe quoi,
(j'ai une autre question si jamais ce que j'ai fais est ok)
 
Merci d'avance,

Reply

Marsh Posté le 03-02-2019 à 12:55:43   

Reply

Marsh Posté le 05-02-2019 à 10:09:07    

Pose-toi les questions:
- Combien de fils as-tu ?
- Quelle plage de fichiers sont couverts pour chaque fils ?

Reply

Sujets relatifs:

Leave a Replay

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