diff --git a/README.md b/README.md index 71d36a3..5149741 100644 --- a/README.md +++ b/README.md @@ -254,8 +254,10 @@ total kB 2828 1612 324 >Soit le [programme](Exo3/ij_ji.c) suivant. >Le temps d'éxecution de ce programme est-il différent pour les deux versions ? Pourquoi ? ->Le temps d'éxecution de ce programme entre les deux versions est différente, elle est plus importante dans la deuxième. Car lors de la boucle `for`, dans la première version, le compilateur a optimisé le code en mettant la valeur de `j` dans un registre, alors que dans la deuxième version, il a mis la valeur de `j` est dans la mémoire, donc il faut aller la chercher à chaque fois, vu que la mémoire est plus lente que le registre, la deuxième version est donc plus lente. +>Le temps d'éxecution de ce programme est différent pour les deux versions car dans la première version, les éléments du tableau sont accédés de manière séquentielle, alors que dans la deuxième version, le cache est rempli car on lit les éléments du tableau par colonne, donc il y a plus de cache miss vu qu'on fait des incréments bien plus grands que dans la première version. ## Exercice 4 >Le programme [sum_array.c](Exo4/sum_array.c) fait la somme des éléments d'un tableau en accédant aux éléments séquentiellement (`-c` croissant, `-d` décroissant) ou de manière aléatoire (`-a`). -Testez en faisant varier la taille du tableau. Expliquez. \ No newline at end of file +Testez en faisant varier la taille du tableau. Expliquez. + +>La raison de pourquoi la manière aléatoire est plus lente que la manière croissante ou décroissante (qui sont aussi rapide l'une que l'autre), est que la manière aléatoire fait plus de cache miss que les deux autres, car elle accède aux éléments du tableau de manière aléatoire, donc il y a plus de chance que l'élément ne soit pas dans le cache, alors que dans les deux autres, les éléments sont accédés de manière séquentielle, donc il y a plus de chance que l'élément soit dans le cache. Ce qui force la lecture de la RAM. \ No newline at end of file