Bonsoir,
je suis entrain de developpée une TP de Architecture avec la programmation en C mais j'ai bloquée dans une partie en effet j'explique tous le cas :

Le cache de données est caractérisé par les paramètres suivants :
• Taille du cache : 8 Koctets ou 16 Koctets ou 32 Koctets
• Taille de ligne : 16 octets ou 32 octets ou 64 octets
• Associativité : 1 ligne/ensemble (correspondance directe) ou 2 lignes/ensemble ou 4 lignes
par ensemble
L’écriture est allouée (sur un défaut en écriture, le bloc est chargé dans le cache avant l’écriture).
Politique de remplacement : pour les caches associatifs par ensemble, la politique de
remplacement est le LRU.
La performance du cache est définie par le taux d’échec, qui est le rapport du nombre d’échecs
(défauts) de cache sur le nombre d’accès mémoire.
Tous les programmes permettent d’obtenir le taux d’échec pour les 27 configurations
(taille de cache – taille de ligne – associativité). La taille des vecteurs ou des matrices est donnée
par #define N. Pour utiliser une autre taille de vecteurs ou de matrices, il faut recompiler le programme.

ma question est pour les 27 configurations de cache données, a ce que possible aidée pour trouve le taux d’échecs pour les valeurs suivantes :
de N : 1000, 64, 512, 1024, 2048

et voici la partie code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
 
 
#include <stdio.h>
#define mway 4	/* Nombre max de bloc par ensemble*/
#define mnsets 1024	/* Nombre max d'ensembles*/
#define N 1000	/* Taille  des matrices et vecteurs*/
 
 
double x[N], y[N], s=0;
 
FILE *stream, *results;
 
int am=0, dc=0, BC[mnsets][mway], LRU[mnsets][mway];
int line, taille, way, nsets;
/* nombre d'acces memoire, nombre de defauts de cache, memoire d'etiquettes
 et memoire donnant l'anciennete des blocs*/
 
 
int iba (int index)
{
	/* renvoie l'indice du bloc le plus ancien*/
	int j,s, i=0;
	s=LRU[index][0];
for (j=1;j<way;j++)
	if (s>LRU[index][j])
	{	s=LRU[index][j];i=j;}
return (i);
}
 
int cache( unsigned long ad)
{	/* acces cache, gestion des etiquettes et anciennete, renvoie 1 si
	defaut de cache*/
	int index,tag,set,j;
	ad=ad/line;
	tag = ad/nsets;
	index=ad%nsets;
	for (set=0;set<way;set++)
		if (BC[index][set]==tag)
		{LRU[index][set]=am;
		return (0);}
 
		j= iba(index);
		BC[index][j]=tag;
		LRU[index][j]=am;
		return (1);
 
}
 
 
void ac(unsigned long z)
{	/* acces cache pour l'adresse z*/
	am++;
	dc+=cache(z);
 
}
 
int min (int a, int b)
{if (a<b) return a;
else return b;}
 
 
void main()
{
int i,j,k;
results = fopen( "courbes", "w+" );
 
/** Initialisation des vecteurs**/
 
for (i=0;i<N;i++)
	{for (j=0;j<N;j++)
		{
		x[i]=i+j;
		y[i]=i-j;
		}
	}	
 
/*taille = 16*1024;
line = 64;
way= 1;*/
 
for (taille=4*1024; taille <20000;taille+=taille)
for (line=16;line <100;line+=line)
for (way=1;way<8;way+=way)
{
nsets= taille /(way*line);
 
/**RAZ des memoires etiquettes et LRU**/
am =0, dc=0;
for (j=0; j<nsets;j++)
	for (k=0;k<way;k++)
	{
			LRU[j][k]=0; BC[j][k]=0;
	}
 
s=0;
for (i=0;i<N;i++)
 
{
			ac((unsigned long) &x[i]);ac((unsigned long) &y[i]);
			s = s + x[i]*y[i];
}
 
 
fprintf(results,"%d \t %d \t %d \t %d \t %f \t \n",taille,way, line, N,(float)dc/(float)am);
}
 
}
et merci d'avance pour tous aidée ou bien des proposition j'accepte tous les réponse