Si asumo que el primer elemento de la matriz que se busca en el caché D es a[0][0]
, para la asociatividad 4, por favor, dígame qué elemento en qué matriz escribirá sobre a[0][0]
en el caché D . Dado que la fórmula para establecer asociatividad es
En un caché asociativo de conjuntos, se proporciona el conjunto que contiene un bloque de memoria por (Número de bloque) módulo (Número de conjuntos en el caché)
¿Cómo puedo saber de este código, compilado y ejecutado como ensamblaje MIPS en un MIPS? simulador , ¿qué elemento escribirá sobre a[0][0]
?
/* matris.c */
#include <stdio.h>
#include <idt_entrypt.h>
#define MATRIXSIZE 16
#define MATRIXSIZE_ROWS 16
#define MATRIXSIZE_COLS 16
/*
* addera two matriser
*/
void matrisadd( int res[MATRIXSIZE_ROWS][MATRIXSIZE_COLS],
int a[MATRIXSIZE_ROWS][MATRIXSIZE_COLS],
int b[MATRIXSIZE_ROWS][MATRIXSIZE_COLS] )
{
int i,j;
for(i=0; i < MATRIXSIZE; ++i) /* variera rad-index */
for(j=0; j < MATRIXSIZE; ++j) /* variera kolumn-index */
res[i][j] = a[i][j] + b[i][j];
}
int main()
{
static int a[MATRIXSIZE_ROWS][MATRIXSIZE_COLS];
static int b[MATRIXSIZE_ROWS][MATRIXSIZE_COLS];
static int res[MATRIXSIZE_ROWS][MATRIXSIZE_COLS];
int i,j, Time;
/*
* initiera matris a och b
*/
for( i=0; i<MATRIXSIZE; ++i)
for( j=0; j<MATRIXSIZE; ++j)
{
a[i][j] = i+j;
b[i][j] = i-j;
}
flush_cache(); /* toem cachen */
timer_start(); /* nollstall tidmatning */
matrisadd( res, a, b);
Time = timer_stop(); /* las av tiden */
printf("Time: %d\n",Time);
}