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 :
- void projectV2_sortFiles(unsigned long nb_split, const char ** filenames, const char ** filenames_sort){
- unsigned long cpt = 0;
- for(cpt = 0; cpt < nb_split; ++cpt){
- int * values = NULL;
- unsigned long nb_elem = SU_loadFile(filenames[cpt], &values);
- SU_removeFile(filenames[cpt]);
- fprintf(stderr, "Inner sort %lu: Array of %lu elem by %d\n", cpt, nb_elem, getpid());
- SORTALGO(nb_elem, values);
- SU_saveFile(filenames_sort[cpt], nb_elem, values);
- free(values);
- }
- }
|
Afin de paralléliser les tris j'ai rajouté ce qui suit :
Code :
- void projectV2_sortFiles(unsigned long nb_split, const char ** filenames, const char ** filenames_sort){
- unsigned long cpt = 0;
- pid_t pid = fork();
- if (pid==-1){
- exit(EXIT_FAILURE);
- } else if (pid==0) {
- /** code de la fonction (du for -> au free) */
- } else{
- for(cpt = 0; cpt < nb_split; ++cpt){
- wait(NULL);
- }
- }
- }
|
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,