Programming Forums

Programming Forums (http://www.programmingforums.org/forumindex.php)
-   C (http://www.programmingforums.org/forum60.html)
-   -   cache simulator..PLZ HELP (http://www.programmingforums.org/showthread.php?t=15694)

Natsoumi_Maya Apr 25th, 2008 4:41 AM

cache simulator..PLZ HELP
 
What im trying to do is implement the cache using C. I have to find out the hit and miss rate of the cache. my code is pretty long so i'll just show u the parts i've implemented and the parts i need help with. If u have any inqueries PLZ feel free to ask. Thank you in advance for any help provided.
This is the part i have implemented. The code basically implements the Full associative, set associative and direct mapped cache.

cache - array of SETS
:

int i;
if(MAX_SET==1)        // Fully Associative Cache
{
    i = 0;
    while (i <=BLOCKS_PER_SET)  // Dividing the SET into
                                                      //Blocks of size "BYTES_PER_BLOCK"

    {
        cache[i].block = (struct BLOCK *)malloc(BYTES_PER_BLOCK)    // Not Sure about "  cache[i].block "
        i ++;
      }
      cache --;
}
else
{
    while (cache )  //THINK OF CONDITION: while the array of SETS is not FULL
    {
        if (MAX_SET == BLOCKS_PER_SET) //Direct Mapped Cache
        {
            while (MAX_SET != 0)
            {
                i = 0;
        while (i <=BLOCKS_PER_SET) // Dividing the SET into BLOCKS
                                                              //of size "BYETS_PER_BLOCK"
        {
            cache[i].block = (struct BLOCK *)malloc
                    BYTES_PER_BLOCK)    //CHECK the "cache[i].block"
            i ++;
        }
        MAX_SET --;
            }
        }
        else // Set Associative Cache
        {
            while (MAX_SET != 0)
            {
        i = 0;
        while (i <=BLOCKS_PER_SET) // Dividing the SET into BLOCKS of
                                                              //size "BYTES_PER_BLOCK"
        {
            cache[i].block = (struct BLOCK *)malloc(BLOCKS_PER_SET)                        i ++;
        }
        MAX_SET --;
              }
          }
          cache --;
        }
}


Since my program is incomplete, im not able to test it, SO i was wondering if In the part i implemented
cache[i].block = (struct BLOCK *)malloc(BLOCKS_PER_SET)
is correct (Syntax wise).

This is the part i need help with. I have the algorithim down but im not sure how to implement. Again, any help is most appreciated:

:

BOOL simulate(unsigned int address)
{
        /* Algorithm:
    * - Find the index for current address
        * - For that set, search all valid blocks for matching tags
        * - If a match is found, you have a hit:
          *  + update timestamp of block and LRU of set
        *  + return true
        * - If there is no match, you have a miss:
        *  + Search for an invalid block and use it to store new block
        *  + If there are no invalid blocks, replace the LRU block
        *  + update timestamp of block and LRU of set
        *  + return false
        */
        /******* Fully Associative Cache*******/
       
        /********* Direct Mapped Cache*********/
        /******** SET Associative Cache********/
}



All times are GMT -5. The time now is 4:24 AM.

Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC