Buscar

pratica

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define byte unsigned char
//Funções usadas
int copiarParaCache( byte *cache, byte *RAM, int endereco );
int acessaCache( byte *cache, int end );
void imprimircaches(int cacheHit, int cacheMiss);
//Progama principal
void main (){
	byte *RAM, *cache;
	int valor, end, cacheMiss = 0, cacheHit = 0, i, j;
	//aloca na RIP
	//1<<24 = 2^24, o bit 1 deslocado 24 vezes
	RAM = (byte *)malloc((1<<24)*sizeof(byte)); //Acalocando 2^24 para RAM
	cache = (byte*)malloc((1<<14)*5*sizeof(byte)); //Acalocando 2^14 para cache
	printf("\nAcesso Aleatório\n");
	srand(time(NULL));
	for(i = 0; i< 1024; i++){
		end = rand()%(1<<24);
		valor = acessaCache(cache, end);
		if(valor == -1){
			cacheMiss++;
			copiarParaCache(cache, RAM, end);
		}
		else
			cacheHit++;
	}
	imprimircaches(cacheHit, cacheMiss);
	cacheHit = 0;
	cacheHit = 0;
	printf("\nAcesso Sequencial\n");
	for(j=0;j<10;j++){
		end = 0x0F12B8;
		
		for(i = 0; i< 1024; i++){
			valor = acessaCache(cache, end);
			if(valor == -1){
				cacheMiss++;
				copiarParaCache(cache, RAM, end);
			}
			else
				cacheHit++;
			end ++;
		}
	}
	imprimircaches(cacheHit, cacheMiss);
}
//Funções
int copiarParaCache( byte * cache, byte * RAM, int end ){
	int rotulo, linha;
	rotulo = end >> 16 ; //Deslocando o rótulo para pegar as duas primeiras letras
	linha = (end >> 2) & 0x3FFF; //Deslocando 2 e zerando os números da frente 
	cache[5*linha] = rotulo;
	cache[5*linha+1] = RAM[end];
	cache[5*linha+2] = RAM[end+1];
	cache[5*linha+3] = RAM[end+2];
	cache[5*linha+4] = RAM[end+3];
}
int acessaCache( byte * cache, int end ){
	int rotulo, linha, palavra;
	rotulo = end >> 16;
	linha = (end >> 2) & 0x3FFF;
	palavra = end & 3; // 11 em binário retorna a palavra (2 últimos bits)
	if(cache[linha*5] != rotulo)
		return(-1);
	else
		return(cache[linha*5+1+palavra]);
}	
void imprimircaches(int cacheHit, int cacheMiss){
	printf("\n\tResultado\n\nCacheHit = %d\nCacheMiss = %d\nProporção = %f\n\n", cacheHit, cacheMiss, (float) cacheHit/(cacheMiss+cacheHit));
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais