Skip to content
Extraits de code Groupes Projets
README.md 3,34 ko
Newer Older
  • Learn to ignore specific revisions
  • Laurent Paucot's avatar
    Laurent Paucot a validé
    # Projet LEPL1503 - Prime factorization
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    "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.
    
    
    ## Objectif du projet
    Convertir et optimiser un programme python en langage C et retourner les diviseurs premiers de chaque entier d'une liste de nombres.
    
    ## Fichier
    * **Makefile** :Permet l'exécution de commandes (compilation du code, exécution des tests).
    * **run.c** : Contient les fonctions du programme ainsi que le *run* pour lancer le programme.
    * **run.h** :Contient la déclaration des fonctions de base du programme. 
    * **test.c** :Contient des tests en CUnit permettant de tester le programme. 
    * **Test_file** :Fichier contenant différents input et output pour divers exemples de nombres (entiers,petits,grands).
    
    ## Librairies utilisées
    - Librairies standards en C
    - Librairie pthreads et semaphores: exécution des threads et des semaphores
    - Librairie Cunit: utiliser pour les tests unitaires
    - Librairie time: calcule le temps d'exécution du programme
    
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    ## Installation
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    Les packages suivants doivent être installés :
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * [CUnit](https://sites.uclouvain.be/SystInfo/notes/Outils/html/cunit.html) 
    * Valgrind : sudo apt-get install valgrind
    * Cppcheck : sudo apt-get install cppcheck
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    ## Utilisation
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * Pour compiler le programme : make fact
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * Pour exécuter le fichier exécutable "fact" : ./fact [-N nombre_de_threads] input output
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * Pour compiler et tester (suite de tests unitaires) le programme : make test 
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * Pour compiler et effectuer une analyse avec "Valgrind" : make val
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * 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:
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    Le travail est décomposé en 3 sections coordonnées via un double problème du producteur-consommateur :
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * 1 thread s'occupe de:
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        * lire le fichier input 
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        * stocker chacune des lignes sous forme de chaine de charactère dans un 1er tableau
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * N threads s'occupent de :
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        * récupérer les chaines de caractères dans le premier tableau
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        * les convertir en 'unsigned long long' et calculer leur liste de    diviseurs premiers
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        * Stocker ces listes dans un 2e tableau
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * 1 thread s'occupe de :
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        * récupérer les listes de diviseurs dans le 2e tableau
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        * Retranscrire dans le bon format le nombre à factoriser et ses      diviseurs premiers dans le fichier output
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    Note : 
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * Les accès aux tableaux sont coordonnés par des mutex (1 par tableau) et des sémaphores
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * Les diviseurs premiers d'un même nombre sont stockés dans une circular linked list
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    ## Architecture des tests :
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    6 tests sont réalisés afin de tester:
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    * 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)
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    # lepl1503-2020-groupe-M2