diff --git a/README.md b/README.md index 8d3b946e2b3617f1ec094be92c532b28227852be..6fc406017f0302b75bc1ecf3a9b33c6eb5c824e9 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,69 @@ -# lepl1503-2020-groupe-M2 +# Projet LEPL1503 - Prime factorization -Pour compiler le programme : make fact +"Prime factorization" est un programme écrit en langage C. Il prend en entrée un fichier texte de nombres et renvoie un nouveau fichier texte avec, à chaque ligne, le nombre à factoriser et la liste de ses diviseurs premiers. Le programme fonctionne en "muli-threading" et le nombre de threads est paramétrable. -Pour exécuter le fichier exécutable "fact" : ./fact [-N nombre_de_threads] input output +## Installation -Pour compiler et tester (suite de tests unitaires) le programme : make test +Les packages suivants doivent être installés : -Pour compiler et effectuer une analyse avec "Valgrind" : make val +* [CUnit](https://sites.uclouvain.be/SystInfo/notes/Outils/html/cunit.html) +* Valgrind : sudo apt-get install valgrind +* Cppcheck : sudo apt-get install cppcheck -Pour compiler, et obtenir le rapport d'analyse .xml de "Valgrind" : make val_xml +## Utilisation -Pour effectuer une analyse avec "cppcheck" : make cpp +* Pour compiler le programme : make fact -Pour compiler et obtenir le rapport d'analyse .xml de "cppcheck" : make cpp_xml +* Pour exécuter le fichier exécutable "fact" : ./fact [-N nombre_de_threads] input output -Pour nettoyer les fichiers auxiliaires générés et l'exécutable : make clean +* Pour compiler et tester (suite de tests unitaires) le programme : make test +* Pour compiler et effectuer une analyse avec "Valgrind" : make val -Architecture du programme: +* Pour compiler, et obtenir le rapport d'analyse .xml de "Valgrind" : make val_xml + +* Pour effectuer une analyse avec "cppcheck" : make cpp + +* Pour compiler et obtenir le rapport d'analyse .xml de "cppcheck" : make cpp_xml + +* Pour nettoyer les fichiers auxiliaires générés et l'exécutable : make clean + + +## Architecture du programme: Le travail est décomposé en 3 sections coordonnées via un double problème du producteur-consommateur : - -> 1 thread s'occupe de: - § lire le fichier input - - § stocker chacune des lignes sous forme de chaine de charactère dans un 1er tableau +* 1 thread s'occupe de: + * lire le fichier input + + * stocker chacune des lignes sous forme de chaine de charactère dans un 1er tableau - -> N threads s'occupent de : - § récupérer les chaines de caractères dans le premier tableau +* N threads s'occupent de : + * récupérer les chaines de caractères dans le premier tableau - § les convertir en 'unsigned long long' et calculer leur liste de diviseurs premiers + * les convertir en 'unsigned long long' et calculer leur liste de diviseurs premiers - § Stocker ces listes dans un 2e tableau + * Stocker ces listes dans un 2e tableau - -> 1 thread s'occupe de : - § récupérer les listes de diviseurs dans le 2e tableau +* 1 thread s'occupe de : + * récupérer les listes de diviseurs dans le 2e tableau - § Retranscrire dans le bon format le nombre à factoriser et ses diviseurs premiers dans le fichier output + * Retranscrire dans le bon format le nombre à factoriser et ses diviseurs premiers dans le fichier output Note : - § Les accès aux tableaux sont coordonnés par des mutex (1 par tableau) et des sémaphores + * Les accès aux tableaux sont coordonnés par des mutex (1 par tableau) et des sémaphores - § Les diviseurs premiers d'un même nombre sont stockés dans une circular linked list + * Les diviseurs premiers d'un même nombre sont stockés dans une circular linked list -Architecture des tests : +## Architecture des tests : 6 tests sont réalisés afin de tester: - § La fonction is_div - § La fonction is_prime (2 tests) - § Le fonctionnement complet pour un fichier vide (N = 4) - § Le fonctionnement complet pour un fichier d'une ligne : check du format et des diviseurs (N = 4) - § Le fonctionnement complet pour un fichier de 100 lignes : check du nombre de lignes (réalisé avec N = 4 puis N = 1) + * La fonction is_div + * La fonction is_prime (2 tests) + * Le fonctionnement complet pour un fichier vide (N = 4) + * Le fonctionnement complet pour un fichier d'une ligne : check du format et des diviseurs (N = 4) + * Le fonctionnement complet pour un fichier de 100 lignes : check du nombre de lignes (réalisé avec N = 4 puis N = 1) # lepl1503-2020-groupe-M2 \ No newline at end of file