Baixe o app para aproveitar ainda mais
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)); }
Compartilhar