Skip to content
Extraits de code Groupes Projets
Valider 1c99e464 rédigé par Laurent Paucot's avatar Laurent Paucot
Parcourir les fichiers

Readme

parent be9e9751
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #7721 réussi
# 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
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter