Newer
Older
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
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
§ Stocker ces listes dans un 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
Note :
§ 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
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)
# lepl1503-2020-groupe-M2