Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

This is program to find cahc memory hit rate but not running.....suggest anu ide

ID: 3904865 • Letter: T

Question

This is program to find cahc memory hit rate but not running.....suggest anu idea!!!

include <stdio.h>

#include <ctype.h>

#include <stdlib.h>

#define CACHESIZE 16

struct cache{

    unsigned int address;

    char         state;

};

unsigned int events = 0;

struct cache myCache[CACHESIZE];

enum values { VALID = 0, INVALID, EMPTY };

unsigned int GetAddr (FILE *fp)

{

    char                 c;                         /* Character read */

   unsigned int         address;

    do {

        c = getc (fp);                          /* Get next character */

        if ( c == '#' )                           /* Skip the comment */

            do {

                c = getc (fp);

            } while ( c != ' ');

    } while (!isxdigit(c) && !feof(fp));

    ungetc(c, fp);                /* Return the character to the file */

    fscanf(fp, "%x ",&address);

    return (address);

}

float CacheAccess (unsigned int adress){

    static unsigned int hit = 0;

    return (hit/(float)events);

}

int main (int argc, const char * argv[]) {

    FILE         *fp;                    /* Pointer to the input file */

    unsigned int ref;

    /* Initialize the cache */

    for (int i=0; i < CACHESIZE; i++){

        myCache[i].state = INVALID;

        myCache[i].address = EMPTY;

    }

    fp = fopen ("trace(1).txt","r");         /* Open file for read operation */

    while (!feof(fp)) {

        ref = GetAddr(fp);

        CacheAccess(ref);

        events++;

    }

    printf("Hit rate is %d hits and misses",hit);/* Print the hit rate of the cache */

}

}

for(i=0;i<N;i++) {

   for(j=0;j<N;j++) {

      dest[i][j] = 0;

      for( k==;k<N;i++) {

         dest[i][j] += src1[i][k] * src2[k][j];

      }

   }

}

int itemsPerCacheLine = CacheLineSize / sizeof(elemType);

for(i=0;i<N;i++) {

   for(j=0;j<N;j += itemsPerCacheLine ) {

      for(jj=0;jj<itemsPerCacheLine; jj+) {

         dest[i][j+jj] = 0;

      }

      for( k==;k<N;i++) {

         for(jj=0;jj<itemsPerCacheLine; jj+) {

            dest[i][j+jj] += src1[i][k] * src2[k][j+jj];

         }

      }

   }

}

Explanation / Answer

Solution:- I've modified the program and fixed some compilation errors, Now please check if your program is working fine or not, One More Thing, in the enum part of the code i've set the values of INVALID as 1 and EMPTY as 2. Please comment f you need any modification.

============CODE BEGINS==================

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define CACHESIZE 16

struct cache{

unsigned int address;

char state;

};

unsigned int events = 0;

struct cache myCache[CACHESIZE];

enum values { VALID = 0, INVALID = 1, EMPTY= 2};

unsigned int GetAddr (FILE *fp)

{
char c; /* Character read */

unsigned int address;

do {

c = getc (fp); /* Get next character */

if ( c == '#' ) /* Skip the comment */

do {

c = getc (fp);

} while ( c != ' ');

} while (!isxdigit(c) && !feof(fp));

ungetc(c, fp); /* Return the character to the file */

fscanf(fp, "%x ",&address);

return (address);

}

float CacheAccess (unsigned int adress){

static unsigned int hit = 0;

return (hit/(float)events);

}

int main (int argc, const char * argv[]) {

FILE *fp; /* Pointer to the input file */

unsigned int ref;

/* Initialize the cache */

for (int i=0; i < CACHESIZE; i++){

myCache[i].state = INVALID;

myCache[i].address = EMPTY;

}

fp = fopen ("trace(1).txt","r"); /* Open file for read operation */

while (!feof(fp)) {

ref = GetAddr(fp);

CacheAccess(ref);

events++;

}

printf("Hit rate is %d hits and misses",hit);/* Print the hit rate of the cache */

}

}

for(i=0;i<N;i++) {

for(j=0;j<N;j++) {

dest[i][j] = 0;

for( k==;k<N;i++) {

dest[i][j] += src1[i][k] * src2[k][j];

}

}

}

int itemsPerCacheLine = CacheLineSize / sizeof(elemType);

for(i=0;i<N;i++) {

for(j=0;j<N;j += itemsPerCacheLine) {

for(jj=0;jj<itemsPerCacheLine; jj+) {

dest[i][j+jj] = 0;

}

for( k=0;k<N;k++) {

for(jj=0;jj<itemsPerCacheLine; jj++) {

dest[i][j+jj] += src1[i][k] * src2[k][j+jj];

}

}

}

}

====================CODE ENDS====================

Note:- I've not pasted the screenshot as i didnot know what are the contents of trace(1).txt.

Please upvote if it helped. Thanks!

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote