Newer
Older
"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.
* [CUnit](https://sites.uclouvain.be/SystInfo/notes/Outils/html/cunit.html)
* Valgrind : sudo apt-get install valgrind
* Cppcheck : sudo apt-get install cppcheck
* Pour exécuter le fichier exécutable "fact" : ./fact [-N nombre_de_threads] input output
* Pour compiler et tester (suite de tests unitaires) le programme : make test
* Pour compiler et effectuer une analyse avec "Valgrind" : make val
* 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
* 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
* 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
* 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
* 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)