From 533d7685ca69f5470f14e224c2d8eec04dafb407 Mon Sep 17 00:00:00 2001 From: vaisse Date: Wed, 10 Sep 2025 16:37:41 +0200 Subject: [PATCH] taf fait --- VAISSE_compte_rendu | 18 ++++++++++++++++++ bubblesort.c | 2 +- gmon.out | Bin 0 -> 3820 bytes student_rank | Bin 0 -> 21944 bytes student_rank.c | 23 ++++++++++++----------- 5 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 VAISSE_compte_rendu create mode 100755 gmon.out create mode 100755 student_rank diff --git a/VAISSE_compte_rendu b/VAISSE_compte_rendu new file mode 100644 index 0000000..a847b86 --- /dev/null +++ b/VAISSE_compte_rendu @@ -0,0 +1,18 @@ +GPROF : FONCTIONNEMENT + +Deux métriques sont utilisés lors des mesures : le temps, et le nombre d'appels. +Dans un premier tableau, dit Flat Profile, il donne la consommation du temps en pourcentage par rapport au temps d'exécution total, ainsi que le nombre d'appels sur ce même temps. Il fait cela en mesurant tous les centièmes de secondes. + +D'après ce premier tableau, on constate que le tri bulle consomme nettement plus +que n'importe quelle autre fonction du programme, avec une consommation d'à peu près 80% du temps total d'exécution. La deuxième fonction consommant le plus est find_rank_student, avec une consommation de 20%. + +On a aussi le callgraph, qui permet de hiérarchiser les fonctions selon qui appelle qui, en indiquant le nombre d'appels et les temps d'exécution individuels de chaque sous-fonctions. + +Ici, on voit que la fonction bubblesort est appelé 1 million de fois par find_rank_student; c'est sûrement ce qui pose un problème. + +Cela nous permet de voir qu'il y a un appel en trop de bubblesort dans find_rank_student. Une fois retiré, et Gprof relancé, bubblesort n'est appelé plus que mille fois. Mais, l'algorithme reste toujours trop lourd, et continue de consomer près de 80% du temps d'exécution total. En replaçant l'algorithme par un plus optimisé, comme le heapsort, les performances sont largement meilleures. Il n'y a plus qu'une dizaines d'opérations effectuées, et le temps de consommation est quasiment nulle pour toutes les fonctions. + +L'ensemble de ces résultats sont valables pour 1000 étudiants et 1000 notes chacuns. Pour 10000 et 10000, même avec un tri par tas, l'exécution consomme bien plus. + + +On va donc devoir changer l'algorithmie. \ No newline at end of file diff --git a/bubblesort.c b/bubblesort.c index a848827..13a8435 100644 --- a/bubblesort.c +++ b/bubblesort.c @@ -14,7 +14,7 @@ void bubblesort(int* array, int length) tmp = array[i-1]; array[i-1] = array[i]; array[i] = tmp; - swapped++; + swapped=1; } } } while(swapped==1); diff --git a/gmon.out b/gmon.out new file mode 100755 index 0000000000000000000000000000000000000000..98de536fc5fd5ef8c652749084affd62b9b79d06 GIT binary patch literal 3820 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 khhYv62= 0; i--) { if(grades_array[i] == student_grade) @@ -73,16 +73,16 @@ void sort_students(int** students_rank, int** students_array, int students_numbe for(i = 0; i < grades_number; i++) { int * grades = (int*) malloc(students_number*sizeof(int)); - for(j = 0; j < students_number; j++) - { - grades[j] = students_array[j][i]; - } - bubblesort(grades,students_number); - for(j = 0; j < students_number; j++) - { - students_rank[j][i] = find_rank_student(students_array[j][i],grades,students_number); - } - free(grades); + for(j = 0; j < students_number; j++) + { + grades[j] = students_array[j][i]; + } + heapsort(grades,students_number); + for(j = 0; j < students_number; j++) + { + students_rank[j][i] = find_rank_student(students_array[j][i],grades,students_number); + } + free(grades); } } @@ -93,6 +93,7 @@ int main(int argc, char** argv) int students_length = 0; int grades_length = 0; int debug_mode = 0; + int* ranker = NULL; if(argc != 4) {