SlideShare a Scribd company logo
1 of 24
Download to read offline
i
Cache Memory Project
Version 1
10/28/2014 3:35:00 PM
iii
Table of Contents
Main Page......................................................................................................................................................................2
Class Index ....................................................................................................................................................................3
File Index.......................................................................................................................................................................4
Class Documentation.....................................................................................................................................................5
CCacheBlock.............................................................................................................................................................5
CCacheManager ........................................................................................................................................................7
CCacheSet .................................................................................................................................................................9
CVirtualAddress ......................................................................................................................................................11
File Documentation .....................................................................................................................................................13
MemoryProject/CommonDef.h ...............................................................................................................................13
MemoryProject/MemoryCache.cpp.........................................................................................................................14
MemoryProject/MemoryCache.h ............................................................................................................................15
MemoryProject/MemoryProject.cpp .......................................................................................................................18
MemoryProject/stdafx.cpp.......................................................................................................................................20
MemoryProject/stdafx.h ..........................................................................................................................................21
MemoryProject/targetver.h......................................................................................................................................22
Index............................................................................................................................................................................23
2
Main Page
PURPOSE: CMPS 5133 Advanced Computer Architecture Assignment #2 - Memory
Given the following benchmark code running in a four-way associatitve data cache with 16 blocks of 32
bytes and knowing that an integer variable occupies 4 bytes, and operations follow the usual priority,
assume that at each operation the leftmost operand is fetched first and the address of A[0] is zero.
Compute the number of cache misses, considering the loop index variable residing in a process register
(and involved in the count of the misses) and that arrays A, B, and C reside consecutively in memory.
int A[512], B[512], C[512]
for (i = 0; i < 511, i++)
{
A[i] = A[i] + B[i] + B[i+1] * C[i]
}
OUTCOME: The executable compiled from the attached C++ achieves the stated purpose and outputs the
results to the console window, with the following caveats:
1. No assumptions were made regarding the address of A[0] being zero. As a result, a more involved and accurate
four-way associative data cache implementation was required.
2. The attached source code has been run on a x64 bit system, but compiled as a 32bit application. It is not
designed or developed for porting or recompilation as a x64 bit executable. There are explicit types, type-casts
and assumptions made throughout the code (i.e. casting memory address to 32-bit types) that limit it to a 32-bit
executable.
3. "Handling Updates to a Block" was not considered at this time and would require further implementation.
4. Efforts were made to meaningfully test and debug the algorithms involved in this implementation. Code was
added to test the validity of the data returned from cache. Due to the added coding precautions taken, an error
was uncovered that would result in an the following:
 Misses: 195 (est)
 Hits: 1850 (est)
 Errors: 12
The error was properly identified and diagnosed to be due to failure to make adjustments to the range of addresses
loaded into cache to insure that they all mapped to the same corresponding "tag" + "index" address fields. This
was corrected with no errors currently detected.
5. CACHE DESIGN
 Block size = 32 bytes
 Block number = 16
 Number of sets = 4
 Block organization = (4 way) Set-associative
 Block replacement policy = FIFO
 Write policy = not implemented
6. Given the assignment formula of 'A[i] = A[i] + B[i] + B[i+1] * C[i]', the operands were accessed in the
following order:
 B[i+1]
 C[i]
 A[i]
 B[i]
7. The current implementation results in the following final computation output:
 Misses:195
 Hits: 1849
 Errors:0
3
Class Index
Class List
Here are the classes, structs, unions and interfaces with brief descriptions:
CCacheBlock (Simulates a logical cache block) .................................................................................5
CCacheManager ..................................................................................................................................7
CCacheSet (Simulates a set of cache blocks) ......................................................................................9
CVirtualAddress (Handles physical to cache address conversions) ...............................................11
4
File Index
File List
Here is a list of all documented files with brief descriptions:
MemoryProject/CommonDef.h (Common type definitions ) ..........................................................13
MemoryProject/MemoryCache.cpp (Four-way set-associative data cache class implementations) 14
MemoryProject/MemoryCache.h (Cache management class interface ) .......................................15
MemoryProject/MemoryProject.cpp (Main source file for implementation of data cache simulation)
................................................................................................................................................................18
MemoryProject/stdafx.cpp (Source file that includes just the standard includes ) .......................20
MemoryProject/stdafx.h (Application header file ) .........................................................................21
MemoryProject/targetver.h ..............................................................................................................22
5
Class Documentation
CCacheBlock Class Reference
simulates a logical cache block
#include <MemoryCache.h>
Public Member Functions
 CCacheBlock ()
Default Constructor.
 ~CCacheBlock ()
Non-virtual Destructor.
 void set_Tag (DWORD dwSet)
 DWORD get_Tag (void) const
 bool GetCacheData (size_t cbOffset, DWORD &dwData) const
 bool LoadCacheBlock (DWORD dwTag, const BYTE *pData, size_t cbLen=g_CACHE_BLOCK_SIZE)
Detailed Description
simulates a logical cache block
CCacheBlock class manages a logical unit of continguous memory (i.e. block, entity)
Definition at line 204 of file MemoryCache.h.
Member Function Documentation
DWORD CCacheBlock::get_Tag (void ) const[inline]
a simple data accessor
Return values:
The tag value
Definition at line 229 of file MemoryCache.h.
Here is the caller graph for this function:
bool CCacheBlock::GetCacheData (size_t cbOffset, DWORD & dwData) const
Retrieves the DWORD-sized block of data residing at the the byte offset into the cache data block
Parameters:
in cbOffset count of byte (cb) offset into cache block
out dwData output variable to return stored 32-bit value
Return values:
true if data resided in cache and was returned
false on cache miss
6
Definition at line 69 of file MemoryCache.cpp.
Here is the caller graph for this function:
bool CCacheBlock::LoadCacheBlock (DWORD dwTag, const BYTE * pData, size_t cbLen =
g_CACHE_BLOCK_SIZE)
Loads a contiguous block of memory, upto CACHE_BLOCK_SIZE, into cache block. It further
establishes an association with the updated data via the dwTag.
Parameters:
in dwTag value containing Tag to associate with this cache block
in pData pointer to contiguous block of memory to load
in cbLen count of bytes (cb) of data length (optional parameter)
Return values:
true if successfull
false on error
Definition at line 80 of file MemoryCache.cpp.
Here is the caller graph for this function:
void CCacheBlock::set_Tag (DWORD dwSet)[inline]
a simple data accessor
Parameters:
in dwSet new tag value to be set
Definition at line 222 of file MemoryCache.h.
The documentation for this class was generated from the following files:
 MemoryProject/MemoryCache.h
 MemoryProject/MemoryCache.cpp
7
CCacheManager Class Reference
#include <MemoryCache.h>
Public Member Functions
 CCacheManager ()
Default Constructor.
 ~CCacheManager ()
Non-virtual Destructor.
 bool GetCacheData (const int *pAddress, DWORD &dwData)
 bool LoadCachePage (const int *pAddress)
Detailed Description
CCacheManager class provides the overall interface into the underlying data cache operations.
Definition at line 337 of file MemoryCache.h.
Member Function Documentation
bool CCacheManager::GetCacheData (const int * pAddress, DWORD & dwData)
Parameters:
in pAddress pointer to memory to retrieve data from
out dwData output variable to return stored 32-bit value
Return values:
true if successful
false on cache miss
Definition at line 165 of file MemoryCache.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
8
bool CCacheManager::LoadCachePage (const int * pAddress)
Loads a contiguous block of memory, upto CACHE_BLOCK_SIZE, based on the address pointer
passed.
Parameters:
in pAddress address of memory the actual page loaded is based on
Return values:
true if successfull
false on error
Definition at line 203 of file MemoryCache.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
The documentation for this class was generated from the following files:
 MemoryProject/MemoryCache.h
 MemoryProject/MemoryCache.cpp
9
CCacheSet Class Reference
Simulates a set of cache blocks.
#include <MemoryCache.h>
Public Member Functions
 CCacheSet ()
Default Constructor.
 ~CCacheSet ()
Non-virtual destructor.
 bool GetCacheData (DWORD dwTag, DWORD cbOffset, DWORD &dwData)
 bool LoadCacheBlock (DWORD dwTag, const void *pAddress)
Detailed Description
Simulates a set of cache blocks.
The FIFO policy simply keeps track of the insertion order of the candidates and evicts the entry that has
resided in the cache for the longest amount of time. The mechanism that implements this policy is
straightforward, since the candidate eviction set (all blocks in a fully associative cache, or all blocks in a
single set in a set-associative cache) can be managed as a circular queue. The circular queue has a single
pointer to the oldest entry which is used to identify the eviction candidate, and the pointer is incremented
whenever a new entry is placed in the queue. This results in a single update for every miss in the cache.
However, the FIFO policy does not always match the temporal locality characteristics inherent in a
program’s reference stream, since some memory locations are accessed continually throughout the
execution (e.g., commonly referenced global variables). Such references would experience frequent
misses under a FIFO policy, since the blocks used to satisfy them would be evicted at regular intervals, as
soon as every other block in the candidate eviction set had been evicted.
Definition at line 288 of file MemoryCache.h.
Member Function Documentation
bool CCacheSet::GetCacheData (DWORD dwTag, DWORD cbOffset, DWORD & dwData)
Parameters:
in dwTag tag associated with the cache block
in cbOffset count of byte (cb) offset into cache block
out dwData output variable to return stored 32-bit value
Return values:
true if data resides in cache and was returned
false on cache miss
Definition at line 103 of file MemoryCache.cpp.
Here is the call graph for this function:
10
Here is the caller graph for this function:
bool CCacheSet::LoadCacheBlock (DWORD dwTag, const void * pAddress)
Loads a contiguous block of memory of CACHE_BLOCK_SIZE, into cache block. It further
establishes an association with the updated data via the dwTag.
Parameters:
in dwTag value containing Tag to associate with this cache block
in pAddress pointer to contiguous block of memory to load
Return values:
true if successfull
false on error
Definition at line 139 of file MemoryCache.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
The documentation for this class was generated from the following files:
 MemoryProject/MemoryCache.h
 MemoryProject/MemoryCache.cpp
11
CVirtualAddress Class Reference
Handles physical to cache address conversions.
#include <MemoryCache.h>
Public Member Functions
 CVirtualAddress ()
Default Constructor.
 CVirtualAddress (const CVirtualAddress &rhs)
Copy Constructor.
 CVirtualAddress (const void *pAddress)
Conversion Constructor.
 DWORD DecodeTag (void) const
 DWORD DecodeOffset (void) const
 DWORD DecodeIndex (void) const
Detailed Description
Handles physical to cache address conversions.
This class is used to translate physical memory addresses into "virtual" addresses by decoding relevant bit
patterns into corresponding information fields needed to reference cache memory. The original address is
partitioned into three portions: the index bits are used to select a block; the block offset bits are used to
select a word within a selected block, and the tag bits are used to do a tag match against the tag stored in
the tag field of the selected entry.
Set-associative caches permit the flexible placement of data among all the entries of a "set". The index
bits select a particular set, the tag bits select an entry (i.e. block) within the set, and the block offset bits
select the word within the selected entry (i.e. block).
Definition at line 149 of file MemoryCache.h.
Member Function Documentation
DWORD CVirtualAddress::DecodeIndex (void ) const
Decodes and returns Cache Set Index from the underlying memory address
Return values:
Index decoded from memory address
DECODE_ERROR on failure
< cleanup these hardcoded values
Definition at line 47 of file MemoryCache.cpp.
Here is the caller graph for this function:
12
DWORD CVirtualAddress::DecodeOffset (void ) const
Decodes and returns Block Offset from the underlying memory address
Return values:
Offset decoded from memory address
DECODE_ERROR on failure
< cleanup these hardcoded values
Definition at line 35 of file MemoryCache.cpp.
Here is the caller graph for this function:
DWORD CVirtualAddress::DecodeTag (void ) const
Decodes and returns Tag from the underlying memory address
Return values:
Tag decoded from memory address
DECODE_ERROR on failure
Definition at line 23 of file MemoryCache.cpp.
Here is the caller graph for this function:
The documentation for this class was generated from the following files:
 MemoryProject/MemoryCache.h
 MemoryProject/MemoryCache.cpp
13
File Documentation
MemoryProject/CommonDef.h File Reference
Common type definitions.
This graph shows which files directly or indirectly include this file:
Typedefs
 typedef unsigned __int8 BYTE
8-bit unsigned type
 typedef unsigned __int32 DWORD
32-bit unsigned type
Detailed Description
Common type definitions.
Author:
Mark L. Short
$Date:$ $Revision:$
Definition in file CommonDef.h.
14
MemoryProject/MemoryCache.cpp File Reference
Four-way set-associative data cache class implimentations.
#include "stdafx.h"
#include "MemoryCache.h"
#include <iostream>
Include dependency graph for MemoryCache.cpp:
Detailed Description
Four-way set-associative data cache class implimentations.
Author:
Mark L. Short
$Date:$ $Revision:$
Modern Processor Design, John Paul Shen, Mikko H. Lipasti, 2005 Cache, Thomas Finley, May 2000,
http://www.cs.cornell.edu/~tomf/notes/cps104/cache.html
Definition in file MemoryCache.cpp.
15
MemoryProject/MemoryCache.h File Reference
Cache management class interface.
#include <queue>
#include "CommonDef.h"
Include dependency graph for MemoryCache.h:
This graph shows which files directly or indirectly include this file:
Classes
 class CVirtualAddress
 Handles physical to cache address conversions. class CCacheBlock
 simulates a logical cache block class CCacheSet
 Simulates a set of cache blocks. class CCacheManager
Variables
 const int g_CACHE_BLOCK_SIZE = 32
size, in bytes, of each cache block
 const int g_CACHE_NUM_BLOCKS = 16
number of cache data blocks
 const int g_CACHE_SETS = g_CACHE_NUM_BLOCKS / 4
number of caches sets needed
 const int g_CACHE_BLOCKS_PER_SET = g_CACHE_NUM_BLOCKS / g_CACHE_SETS
 const DWORD DECODE_ERROR = (DWORD) -1
Error Code returned on decoding failure.
Detailed Description
Cache management class interface.
Author:
Mark L. Short
16
$Date:$ $Revision:$
Modern Processor Design, John Paul Shen, Mikko H. Lipasti, 2005 Cache, Thomas Finley, May 2000,
http://www.cs.cornell.edu/~tomf/notes/cps104/cache.html
Definition in file MemoryCache.h.
Variable Documentation
const DWORD DECODE_ERROR = (DWORD) -1
Error Code returned on decoding failure.
The simplest approach, direct-mapped, forces a many-to-one mapping between addresses and the
available storage locations in the cache. In other words, a particular address can reside only in a single
location in the cache; that location is usually determined by extracting n bits from the address and
using those n bits as a direct index into one of 2n possible locations in the cache.
Of course, since there is a many-to-one mapping, each location must also store a tag that contains the
remaining address bits corresponding to the block of data stored at that location. On each lookup, the
hardware must read the tag and compare it with the address bits of the reference being performed to
determine whether a hit or miss has occurred.
In the degenerate case where a direct-mapped memory contains enough storage locations for every
address block (i.e., the n index bits include all bits of the address), no tag is needed, as the mapping
between addresses and storage locations is now one-to-one instead of many-to-one. The register file
inside the processor is an example of such a memory; it need not be tagged since all the address bits
(all bits of the register identifier) are used as the index into the register file.
Set-associative, is a many-to-few mapping between addresses and storage locations. On each lookup,
a subset of address bits is used to generate an index, just as in the direct-mapped case. However, this
index now corresponds to a set of entries, usually two to eight that are searched in parallel for a
matching tag. In practice, this approach is much more efficient from a hardware implementation
perspective, since it requires fewer address comparators than a fully associative cache, but due to its
flexible mapping policy behaves similarly to a fully associative cache.
Set-associative caches permit the flexible placement of data among all the entries of a set.
 index bits - select a particular set,
 tag bits - select an entry within the set,
 block offset bits - select the word within the selected entry. Characteristics of an n-way set associative
 Each set contains n entries
 Block number determines which set
 (Block number) mod (Sets in cache)
 Search all entries in a given set at once
 Four-way set-associative data cache
 Blocks = 16; BlockSize = 32 (Bytes);
 Sets (s) = Blocks / 4; s = 16 / 4; s = 4; Offset (o) - Select the word within each block o = lg (BlockSize) o =
lg (32) o = 5; Index (i) = Select set of blocks i = lg (Number of Sets) i = lg (4) i = 2 Tag (t) = ID blocks
within a set t = 32 - o - i; t = 32 - 5 - 2; t = 25;
17
32 bit Address

Tag (set) Index (blocK) Offset
bits[t] bits[i] bits[o]
25 2 5
0..24 25..26 27..31
Definition at line 132 of file MemoryCache.h.
const int g_CACHE_BLOCK_SIZE = 32
size, in bytes, of each cache block
Cache block size
Block size (sometimes referred to as line size) describes the granularity at which the cache operates.
Each block is a contiguous series of bytes in memory and begins on a naturally aligned boundary.
For example, in a cache with 16 - byte blocks, each block would contain 16 bytes, and the first byte in
each block would be aligned to 16 - byte boundaries in the address space, implying that the low -
order 4 bits of the address of the first byte would always be zero (i.e., 0b ... 0000). The smallest
usable block size is the natural word size of the processor (i.e., 4 bytes for a 32 - bit machine, or 8
bytes for a 64 - bit machine), since each access will require the cache to supply at least that many
bytes, and splitting a single access over multiple blocks would introduce unacceptable overhead into
the access path.
Whenever the block size is greater than 1 byte, the low-order bits of an address must be used to find
the byte or word being accessed within the block. As stated above, the low-order bits for the first byte
in the block must always be zero, corresponding to a naturally aligned block in memory. However, if
a byte other than the first byte needs to be accessed, the low-order bits must be used as a block offset
to index into the block to find the right byte.
The number of bits needed for the block offset is the log2 of the block size, so that enough bits are
available to span all the bytes in the block. For example, if the block size is 64 bytes, log2(64) = 6
low-order bits are used as the block offset. The remaining higher-order bits are then used to locate the
appropriate block in the cache memory.
Definition at line 54 of file MemoryCache.h.
18
MemoryProject/MemoryProject.cpp File Reference
Main source file for implimentation of data cache simulation.
#include "stdafx.h"
#include "CommonDef.h"
#include <memory.h>
#include <iostream>
#include <iomanip>
#include "MemoryCache.h"
Include dependency graph for MemoryProject.cpp:
Functions
 int _tmain (int argc, _TCHAR *argv[])
main routine of the executable
Variables
 const int g_MAX_ARRAY_SIZE = 512
 const int g_DR_PASSOS_LOOP = 511
 int g_rgA [g_MAX_ARRAY_SIZE] = {0}
Array A.
 int g_rgB [g_MAX_ARRAY_SIZE] = {0}
Array B.
 int g_rgC [g_MAX_ARRAY_SIZE] = {0}
Array C.
Detailed Description
Main source file for implimentation of data cache simulation.
Author:
Mark L. Short
19
Date:
Sept 25, 2014
Modern Processor Design, John Paul Shen, Mikko H. Lipasti, 2005 Cache, Thomas Finley, May 2000,
http://www.cs.cornell.edu/~tomf/notes/cps104/cache.html
Definition in file MemoryProject.cpp.
20
MemoryProject/stdafx.cpp File Reference
source file that includes just the standard includes
#include "stdafx.h"
Include dependency graph for stdafx.cpp:
Detailed Description
source file that includes just the standard includes
MemoryProject.pch will be the pre-compiled header stdafx.obj will contain the pre-compiled type
information
Author:
Mark L. Short
Date:
October 1, 2014
Definition in file stdafx.cpp.
21
MemoryProject/stdafx.h File Reference
Application header file.
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
Include dependency graph for stdafx.h:
This graph shows which files directly or indirectly include this file:
Detailed Description
Application header file.
include file for standard system include files, or project specific include files that are used frequently, but
are changed infrequently
Author:
Mark L. Short
Date:
Sept 19, 2014
Definition in file stdafx.h.
22
MemoryProject/targetver.h File Reference
#include <SDKDDKVer.h>
Include dependency graph for targetver.h:
This graph shows which files directly or indirectly include this file:
23
Index
CCacheBlock, 5
get_Tag, 5
GetCacheData, 5
LoadCacheBlock, 6
set_Tag, 6
CCacheManager, 7
GetCacheData, 7
LoadCachePage, 8
CCacheSet, 9
GetCacheData, 9
LoadCacheBlock, 10
CVirtualAddress, 11
DecodeIndex, 11
DecodeOffset, 12
DecodeTag, 12
DECODE_ERROR
MemoryCache.h, 16
DecodeIndex
CVirtualAddress, 11
DecodeOffset
CVirtualAddress, 12
DecodeTag
CVirtualAddress, 12
g_CACHE_BLOCK_SIZE
MemoryCache.h, 17
get_Tag
CCacheBlock, 5
GetCacheData
CCacheBlock, 5
CCacheManager, 7
CCacheSet, 9
LoadCacheBlock
CCacheBlock, 6
CCacheSet, 10
LoadCachePage
CCacheManager, 8
MemoryCache.h
DECODE_ERROR, 16
g_CACHE_BLOCK_SIZE, 17
MemoryProject/CommonDef.h, 13
MemoryProject/MemoryCache.cpp, 14
MemoryProject/MemoryCache.h, 15
MemoryProject/MemoryProject.cpp, 18
MemoryProject/stdafx.cpp, 20
MemoryProject/stdafx.h, 21
MemoryProject/targetver.h, 22
set_Tag
CCacheBlock, 6

More Related Content

What's hot

Plesk 8 Client's Guide
Plesk 8 Client's GuidePlesk 8 Client's Guide
Plesk 8 Client's Guidewebhostingguy
 
Ross_Cannon_4th_Year_Project_Mastercopy
Ross_Cannon_4th_Year_Project_MastercopyRoss_Cannon_4th_Year_Project_Mastercopy
Ross_Cannon_4th_Year_Project_MastercopyRoss Cannon
 
Dbe emailer software documentation user guide
Dbe emailer software documentation user guideDbe emailer software documentation user guide
Dbe emailer software documentation user guideaxegrinder67
 
R data mining_clear
R data mining_clearR data mining_clear
R data mining_clearsinanspoon
 
Plesk 8.0 for Linux/UNIX
Plesk 8.0 for Linux/UNIXPlesk 8.0 for Linux/UNIX
Plesk 8.0 for Linux/UNIXwebhostingguy
 
Documentation - Element and ElementVector
Documentation - Element and ElementVectorDocumentation - Element and ElementVector
Documentation - Element and ElementVectorMichel Alves
 
Expert oracle database architecture
Expert oracle database architectureExpert oracle database architecture
Expert oracle database architectureairy6548
 
WebHost Manager Online Help 1.0
WebHost Manager Online Help 1.0WebHost Manager Online Help 1.0
WebHost Manager Online Help 1.0webhostingguy
 
Data sharing planning and administration
Data sharing planning and administrationData sharing planning and administration
Data sharing planning and administrationMarino Savoldi
 
Monetdb basic bat operation
Monetdb basic bat operationMonetdb basic bat operation
Monetdb basic bat operationChen Wang
 
Perl &lt;b>5 Tutorial&lt;/b>, First Edition
Perl &lt;b>5 Tutorial&lt;/b>, First EditionPerl &lt;b>5 Tutorial&lt;/b>, First Edition
Perl &lt;b>5 Tutorial&lt;/b>, First Editiontutorialsruby
 

What's hot (14)

Plesk 8 Client's Guide
Plesk 8 Client's GuidePlesk 8 Client's Guide
Plesk 8 Client's Guide
 
Ross_Cannon_4th_Year_Project_Mastercopy
Ross_Cannon_4th_Year_Project_MastercopyRoss_Cannon_4th_Year_Project_Mastercopy
Ross_Cannon_4th_Year_Project_Mastercopy
 
Dbe emailer software documentation user guide
Dbe emailer software documentation user guideDbe emailer software documentation user guide
Dbe emailer software documentation user guide
 
R data mining_clear
R data mining_clearR data mining_clear
R data mining_clear
 
Plesk 8.0 for Linux/UNIX
Plesk 8.0 for Linux/UNIXPlesk 8.0 for Linux/UNIX
Plesk 8.0 for Linux/UNIX
 
Documentation - Element and ElementVector
Documentation - Element and ElementVectorDocumentation - Element and ElementVector
Documentation - Element and ElementVector
 
R data
R dataR data
R data
 
Expert oracle database architecture
Expert oracle database architectureExpert oracle database architecture
Expert oracle database architecture
 
WebHost Manager Online Help 1.0
WebHost Manager Online Help 1.0WebHost Manager Online Help 1.0
WebHost Manager Online Help 1.0
 
Data sharing planning and administration
Data sharing planning and administrationData sharing planning and administration
Data sharing planning and administration
 
Monetdb basic bat operation
Monetdb basic bat operationMonetdb basic bat operation
Monetdb basic bat operation
 
Bugzilla guide
Bugzilla guideBugzilla guide
Bugzilla guide
 
Perl &lt;b>5 Tutorial&lt;/b>, First Edition
Perl &lt;b>5 Tutorial&lt;/b>, First EditionPerl &lt;b>5 Tutorial&lt;/b>, First Edition
Perl &lt;b>5 Tutorial&lt;/b>, First Edition
 
Perl 5 guide
Perl 5 guidePerl 5 guide
Perl 5 guide
 

Viewers also liked

Viewers also liked (20)

Ideas for sequence
Ideas for sequenceIdeas for sequence
Ideas for sequence
 
Poder da Concentração
Poder da ConcentraçãoPoder da Concentração
Poder da Concentração
 
Certificat SQE
Certificat SQECertificat SQE
Certificat SQE
 
Un transformar nuestro mundo la agenda 2030
Un transformar nuestro mundo la agenda 2030Un transformar nuestro mundo la agenda 2030
Un transformar nuestro mundo la agenda 2030
 
O CONSUMO DO MEXILHÃO PROVENIENTE DA BAÍA DE GUANABARA
O CONSUMO DO MEXILHÃO PROVENIENTE DA BAÍA DE GUANABARAO CONSUMO DO MEXILHÃO PROVENIENTE DA BAÍA DE GUANABARA
O CONSUMO DO MEXILHÃO PROVENIENTE DA BAÍA DE GUANABARA
 
Despachobus
DespachobusDespachobus
Despachobus
 
Trabajo de verano 2015
Trabajo de verano 2015Trabajo de verano 2015
Trabajo de verano 2015
 
Presentación de250
Presentación de250Presentación de250
Presentación de250
 
Jairo2
Jairo2Jairo2
Jairo2
 
iso certificaat 2
iso certificaat 2iso certificaat 2
iso certificaat 2
 
Clorox Ad Series
Clorox Ad SeriesClorox Ad Series
Clorox Ad Series
 
Confucio tse ac 18947 - liminar -
Confucio   tse ac 18947 - liminar -Confucio   tse ac 18947 - liminar -
Confucio tse ac 18947 - liminar -
 
Via positiva canada
Via positiva canadaVia positiva canada
Via positiva canada
 
Leccion 1
Leccion 1Leccion 1
Leccion 1
 
Labor social 2do año ay b diciembre 2013
Labor social 2do año ay b diciembre 2013Labor social 2do año ay b diciembre 2013
Labor social 2do año ay b diciembre 2013
 
CNP_Protocol
CNP_ProtocolCNP_Protocol
CNP_Protocol
 
Low Calorie Dieta - ¿Lo utiliza ?
 Low Calorie   Dieta   -   ¿Lo utiliza  ? Low Calorie   Dieta   -   ¿Lo utiliza  ?
Low Calorie Dieta - ¿Lo utiliza ?
 
Parecer Aélcio da TV (PP)
Parecer Aélcio da TV (PP)Parecer Aélcio da TV (PP)
Parecer Aélcio da TV (PP)
 
Recurso
RecursoRecurso
Recurso
 
Actividad2 jose walterrengifo
Actividad2 jose walterrengifoActividad2 jose walterrengifo
Actividad2 jose walterrengifo
 

Similar to ChacheMemoryProject

REDACTABLE BLOCKCHAIN .How to change the immutable and the consequences of do...
REDACTABLE BLOCKCHAIN .How to change the immutable and the consequences of do...REDACTABLE BLOCKCHAIN .How to change the immutable and the consequences of do...
REDACTABLE BLOCKCHAIN .How to change the immutable and the consequences of do...eraser Juan José Calderón
 
All My X’s Come From Texas...Not!!
All My X’s Come From Texas...Not!!All My X’s Come From Texas...Not!!
All My X’s Come From Texas...Not!!jgpecor
 
C++ annotations version
C++ annotations versionC++ annotations version
C++ annotations versionPL Sharma
 
Interview with Anatoliy Kuznetsov, the author of BitMagic C++ library
Interview with Anatoliy Kuznetsov, the author of BitMagic C++ libraryInterview with Anatoliy Kuznetsov, the author of BitMagic C++ library
Interview with Anatoliy Kuznetsov, the author of BitMagic C++ libraryPVS-Studio
 
Tree structured partitioning into transform blocks and units and interpicture...
Tree structured partitioning into transform blocks and units and interpicture...Tree structured partitioning into transform blocks and units and interpicture...
Tree structured partitioning into transform blocks and units and interpicture...LainAcarolu
 
SAP MM Tutorial ds_42_tutorial_en.pdf
SAP MM Tutorial    ds_42_tutorial_en.pdfSAP MM Tutorial    ds_42_tutorial_en.pdf
SAP MM Tutorial ds_42_tutorial_en.pdfsjha120721
 
Implementation of coarse-grain coherence tracking support in ring-based multi...
Implementation of coarse-grain coherence tracking support in ring-based multi...Implementation of coarse-grain coherence tracking support in ring-based multi...
Implementation of coarse-grain coherence tracking support in ring-based multi...ed271828
 
Mvc music store tutorial - v3.0
Mvc music store   tutorial - v3.0Mvc music store   tutorial - v3.0
Mvc music store tutorial - v3.0Elmore Miranda
 
Intro to embedded systems programming
Intro to embedded systems programming Intro to embedded systems programming
Intro to embedded systems programming Massimo Talia
 
ILIC Dejan - MSc: Secure Business Computation by using Garbled Circuits in a ...
ILIC Dejan - MSc: Secure Business Computation by using Garbled Circuits in a ...ILIC Dejan - MSc: Secure Business Computation by using Garbled Circuits in a ...
ILIC Dejan - MSc: Secure Business Computation by using Garbled Circuits in a ...Dejan Ilic
 
Using Open Source Tools For STR7XX Cross Development
Using Open Source Tools For STR7XX Cross DevelopmentUsing Open Source Tools For STR7XX Cross Development
Using Open Source Tools For STR7XX Cross DevelopmentGiacomo Antonino Fazio
 
Python Control library
Python Control libraryPython Control library
Python Control libraryMassimo Talia
 
Robust data synchronization with ibm tivoli directory integrator sg246164
Robust data synchronization with ibm tivoli directory integrator sg246164Robust data synchronization with ibm tivoli directory integrator sg246164
Robust data synchronization with ibm tivoli directory integrator sg246164Banking at Ho Chi Minh city
 
Robust data synchronization with ibm tivoli directory integrator sg246164
Robust data synchronization with ibm tivoli directory integrator sg246164Robust data synchronization with ibm tivoli directory integrator sg246164
Robust data synchronization with ibm tivoli directory integrator sg246164Banking at Ho Chi Minh city
 
Memory synthesis using_ai_methods
Memory synthesis using_ai_methodsMemory synthesis using_ai_methods
Memory synthesis using_ai_methodsGabriel Mateescu
 
C++ For Quantitative Finance
C++ For Quantitative FinanceC++ For Quantitative Finance
C++ For Quantitative FinanceASAD ALI
 
Hp networking-and-cisco-cli-reference-guide june-10_ww_eng_ltr
Hp networking-and-cisco-cli-reference-guide june-10_ww_eng_ltrHp networking-and-cisco-cli-reference-guide june-10_ww_eng_ltr
Hp networking-and-cisco-cli-reference-guide june-10_ww_eng_ltrFelippe Costa
 
Implementing IBM InfoSphere BigInsights on System x
Implementing IBM InfoSphere BigInsights on System xImplementing IBM InfoSphere BigInsights on System x
Implementing IBM InfoSphere BigInsights on System xIBM India Smarter Computing
 

Similar to ChacheMemoryProject (20)

REDACTABLE BLOCKCHAIN .How to change the immutable and the consequences of do...
REDACTABLE BLOCKCHAIN .How to change the immutable and the consequences of do...REDACTABLE BLOCKCHAIN .How to change the immutable and the consequences of do...
REDACTABLE BLOCKCHAIN .How to change the immutable and the consequences of do...
 
All My X’s Come From Texas...Not!!
All My X’s Come From Texas...Not!!All My X’s Come From Texas...Not!!
All My X’s Come From Texas...Not!!
 
C++ annotations version
C++ annotations versionC++ annotations version
C++ annotations version
 
Interview with Anatoliy Kuznetsov, the author of BitMagic C++ library
Interview with Anatoliy Kuznetsov, the author of BitMagic C++ libraryInterview with Anatoliy Kuznetsov, the author of BitMagic C++ library
Interview with Anatoliy Kuznetsov, the author of BitMagic C++ library
 
Tree structured partitioning into transform blocks and units and interpicture...
Tree structured partitioning into transform blocks and units and interpicture...Tree structured partitioning into transform blocks and units and interpicture...
Tree structured partitioning into transform blocks and units and interpicture...
 
SAP MM Tutorial ds_42_tutorial_en.pdf
SAP MM Tutorial    ds_42_tutorial_en.pdfSAP MM Tutorial    ds_42_tutorial_en.pdf
SAP MM Tutorial ds_42_tutorial_en.pdf
 
Implementation of coarse-grain coherence tracking support in ring-based multi...
Implementation of coarse-grain coherence tracking support in ring-based multi...Implementation of coarse-grain coherence tracking support in ring-based multi...
Implementation of coarse-grain coherence tracking support in ring-based multi...
 
Mvc music store tutorial - v3.0
Mvc music store   tutorial - v3.0Mvc music store   tutorial - v3.0
Mvc music store tutorial - v3.0
 
Intro to embedded systems programming
Intro to embedded systems programming Intro to embedded systems programming
Intro to embedded systems programming
 
ILIC Dejan - MSc: Secure Business Computation by using Garbled Circuits in a ...
ILIC Dejan - MSc: Secure Business Computation by using Garbled Circuits in a ...ILIC Dejan - MSc: Secure Business Computation by using Garbled Circuits in a ...
ILIC Dejan - MSc: Secure Business Computation by using Garbled Circuits in a ...
 
Using Open Source Tools For STR7XX Cross Development
Using Open Source Tools For STR7XX Cross DevelopmentUsing Open Source Tools For STR7XX Cross Development
Using Open Source Tools For STR7XX Cross Development
 
Python Control library
Python Control libraryPython Control library
Python Control library
 
Software guide 3.20.0
Software guide 3.20.0Software guide 3.20.0
Software guide 3.20.0
 
Robust data synchronization with ibm tivoli directory integrator sg246164
Robust data synchronization with ibm tivoli directory integrator sg246164Robust data synchronization with ibm tivoli directory integrator sg246164
Robust data synchronization with ibm tivoli directory integrator sg246164
 
Robust data synchronization with ibm tivoli directory integrator sg246164
Robust data synchronization with ibm tivoli directory integrator sg246164Robust data synchronization with ibm tivoli directory integrator sg246164
Robust data synchronization with ibm tivoli directory integrator sg246164
 
Memory synthesis using_ai_methods
Memory synthesis using_ai_methodsMemory synthesis using_ai_methods
Memory synthesis using_ai_methods
 
C++ For Quantitative Finance
C++ For Quantitative FinanceC++ For Quantitative Finance
C++ For Quantitative Finance
 
Hp networking-and-cisco-cli-reference-guide june-10_ww_eng_ltr
Hp networking-and-cisco-cli-reference-guide june-10_ww_eng_ltrHp networking-and-cisco-cli-reference-guide june-10_ww_eng_ltr
Hp networking-and-cisco-cli-reference-guide june-10_ww_eng_ltr
 
Implementing IBM InfoSphere BigInsights on System x
Implementing IBM InfoSphere BigInsights on System xImplementing IBM InfoSphere BigInsights on System x
Implementing IBM InfoSphere BigInsights on System x
 
301132
301132301132
301132
 

ChacheMemoryProject

  • 1. i Cache Memory Project Version 1 10/28/2014 3:35:00 PM
  • 2. iii Table of Contents Main Page......................................................................................................................................................................2 Class Index ....................................................................................................................................................................3 File Index.......................................................................................................................................................................4 Class Documentation.....................................................................................................................................................5 CCacheBlock.............................................................................................................................................................5 CCacheManager ........................................................................................................................................................7 CCacheSet .................................................................................................................................................................9 CVirtualAddress ......................................................................................................................................................11 File Documentation .....................................................................................................................................................13 MemoryProject/CommonDef.h ...............................................................................................................................13 MemoryProject/MemoryCache.cpp.........................................................................................................................14 MemoryProject/MemoryCache.h ............................................................................................................................15 MemoryProject/MemoryProject.cpp .......................................................................................................................18 MemoryProject/stdafx.cpp.......................................................................................................................................20 MemoryProject/stdafx.h ..........................................................................................................................................21 MemoryProject/targetver.h......................................................................................................................................22 Index............................................................................................................................................................................23
  • 3. 2 Main Page PURPOSE: CMPS 5133 Advanced Computer Architecture Assignment #2 - Memory Given the following benchmark code running in a four-way associatitve data cache with 16 blocks of 32 bytes and knowing that an integer variable occupies 4 bytes, and operations follow the usual priority, assume that at each operation the leftmost operand is fetched first and the address of A[0] is zero. Compute the number of cache misses, considering the loop index variable residing in a process register (and involved in the count of the misses) and that arrays A, B, and C reside consecutively in memory. int A[512], B[512], C[512] for (i = 0; i < 511, i++) { A[i] = A[i] + B[i] + B[i+1] * C[i] } OUTCOME: The executable compiled from the attached C++ achieves the stated purpose and outputs the results to the console window, with the following caveats: 1. No assumptions were made regarding the address of A[0] being zero. As a result, a more involved and accurate four-way associative data cache implementation was required. 2. The attached source code has been run on a x64 bit system, but compiled as a 32bit application. It is not designed or developed for porting or recompilation as a x64 bit executable. There are explicit types, type-casts and assumptions made throughout the code (i.e. casting memory address to 32-bit types) that limit it to a 32-bit executable. 3. "Handling Updates to a Block" was not considered at this time and would require further implementation. 4. Efforts were made to meaningfully test and debug the algorithms involved in this implementation. Code was added to test the validity of the data returned from cache. Due to the added coding precautions taken, an error was uncovered that would result in an the following:  Misses: 195 (est)  Hits: 1850 (est)  Errors: 12 The error was properly identified and diagnosed to be due to failure to make adjustments to the range of addresses loaded into cache to insure that they all mapped to the same corresponding "tag" + "index" address fields. This was corrected with no errors currently detected. 5. CACHE DESIGN  Block size = 32 bytes  Block number = 16  Number of sets = 4  Block organization = (4 way) Set-associative  Block replacement policy = FIFO  Write policy = not implemented 6. Given the assignment formula of 'A[i] = A[i] + B[i] + B[i+1] * C[i]', the operands were accessed in the following order:  B[i+1]  C[i]  A[i]  B[i] 7. The current implementation results in the following final computation output:  Misses:195  Hits: 1849  Errors:0
  • 4. 3 Class Index Class List Here are the classes, structs, unions and interfaces with brief descriptions: CCacheBlock (Simulates a logical cache block) .................................................................................5 CCacheManager ..................................................................................................................................7 CCacheSet (Simulates a set of cache blocks) ......................................................................................9 CVirtualAddress (Handles physical to cache address conversions) ...............................................11
  • 5. 4 File Index File List Here is a list of all documented files with brief descriptions: MemoryProject/CommonDef.h (Common type definitions ) ..........................................................13 MemoryProject/MemoryCache.cpp (Four-way set-associative data cache class implementations) 14 MemoryProject/MemoryCache.h (Cache management class interface ) .......................................15 MemoryProject/MemoryProject.cpp (Main source file for implementation of data cache simulation) ................................................................................................................................................................18 MemoryProject/stdafx.cpp (Source file that includes just the standard includes ) .......................20 MemoryProject/stdafx.h (Application header file ) .........................................................................21 MemoryProject/targetver.h ..............................................................................................................22
  • 6. 5 Class Documentation CCacheBlock Class Reference simulates a logical cache block #include <MemoryCache.h> Public Member Functions  CCacheBlock () Default Constructor.  ~CCacheBlock () Non-virtual Destructor.  void set_Tag (DWORD dwSet)  DWORD get_Tag (void) const  bool GetCacheData (size_t cbOffset, DWORD &dwData) const  bool LoadCacheBlock (DWORD dwTag, const BYTE *pData, size_t cbLen=g_CACHE_BLOCK_SIZE) Detailed Description simulates a logical cache block CCacheBlock class manages a logical unit of continguous memory (i.e. block, entity) Definition at line 204 of file MemoryCache.h. Member Function Documentation DWORD CCacheBlock::get_Tag (void ) const[inline] a simple data accessor Return values: The tag value Definition at line 229 of file MemoryCache.h. Here is the caller graph for this function: bool CCacheBlock::GetCacheData (size_t cbOffset, DWORD & dwData) const Retrieves the DWORD-sized block of data residing at the the byte offset into the cache data block Parameters: in cbOffset count of byte (cb) offset into cache block out dwData output variable to return stored 32-bit value Return values: true if data resided in cache and was returned false on cache miss
  • 7. 6 Definition at line 69 of file MemoryCache.cpp. Here is the caller graph for this function: bool CCacheBlock::LoadCacheBlock (DWORD dwTag, const BYTE * pData, size_t cbLen = g_CACHE_BLOCK_SIZE) Loads a contiguous block of memory, upto CACHE_BLOCK_SIZE, into cache block. It further establishes an association with the updated data via the dwTag. Parameters: in dwTag value containing Tag to associate with this cache block in pData pointer to contiguous block of memory to load in cbLen count of bytes (cb) of data length (optional parameter) Return values: true if successfull false on error Definition at line 80 of file MemoryCache.cpp. Here is the caller graph for this function: void CCacheBlock::set_Tag (DWORD dwSet)[inline] a simple data accessor Parameters: in dwSet new tag value to be set Definition at line 222 of file MemoryCache.h. The documentation for this class was generated from the following files:  MemoryProject/MemoryCache.h  MemoryProject/MemoryCache.cpp
  • 8. 7 CCacheManager Class Reference #include <MemoryCache.h> Public Member Functions  CCacheManager () Default Constructor.  ~CCacheManager () Non-virtual Destructor.  bool GetCacheData (const int *pAddress, DWORD &dwData)  bool LoadCachePage (const int *pAddress) Detailed Description CCacheManager class provides the overall interface into the underlying data cache operations. Definition at line 337 of file MemoryCache.h. Member Function Documentation bool CCacheManager::GetCacheData (const int * pAddress, DWORD & dwData) Parameters: in pAddress pointer to memory to retrieve data from out dwData output variable to return stored 32-bit value Return values: true if successful false on cache miss Definition at line 165 of file MemoryCache.cpp. Here is the call graph for this function: Here is the caller graph for this function:
  • 9. 8 bool CCacheManager::LoadCachePage (const int * pAddress) Loads a contiguous block of memory, upto CACHE_BLOCK_SIZE, based on the address pointer passed. Parameters: in pAddress address of memory the actual page loaded is based on Return values: true if successfull false on error Definition at line 203 of file MemoryCache.cpp. Here is the call graph for this function: Here is the caller graph for this function: The documentation for this class was generated from the following files:  MemoryProject/MemoryCache.h  MemoryProject/MemoryCache.cpp
  • 10. 9 CCacheSet Class Reference Simulates a set of cache blocks. #include <MemoryCache.h> Public Member Functions  CCacheSet () Default Constructor.  ~CCacheSet () Non-virtual destructor.  bool GetCacheData (DWORD dwTag, DWORD cbOffset, DWORD &dwData)  bool LoadCacheBlock (DWORD dwTag, const void *pAddress) Detailed Description Simulates a set of cache blocks. The FIFO policy simply keeps track of the insertion order of the candidates and evicts the entry that has resided in the cache for the longest amount of time. The mechanism that implements this policy is straightforward, since the candidate eviction set (all blocks in a fully associative cache, or all blocks in a single set in a set-associative cache) can be managed as a circular queue. The circular queue has a single pointer to the oldest entry which is used to identify the eviction candidate, and the pointer is incremented whenever a new entry is placed in the queue. This results in a single update for every miss in the cache. However, the FIFO policy does not always match the temporal locality characteristics inherent in a program’s reference stream, since some memory locations are accessed continually throughout the execution (e.g., commonly referenced global variables). Such references would experience frequent misses under a FIFO policy, since the blocks used to satisfy them would be evicted at regular intervals, as soon as every other block in the candidate eviction set had been evicted. Definition at line 288 of file MemoryCache.h. Member Function Documentation bool CCacheSet::GetCacheData (DWORD dwTag, DWORD cbOffset, DWORD & dwData) Parameters: in dwTag tag associated with the cache block in cbOffset count of byte (cb) offset into cache block out dwData output variable to return stored 32-bit value Return values: true if data resides in cache and was returned false on cache miss Definition at line 103 of file MemoryCache.cpp. Here is the call graph for this function:
  • 11. 10 Here is the caller graph for this function: bool CCacheSet::LoadCacheBlock (DWORD dwTag, const void * pAddress) Loads a contiguous block of memory of CACHE_BLOCK_SIZE, into cache block. It further establishes an association with the updated data via the dwTag. Parameters: in dwTag value containing Tag to associate with this cache block in pAddress pointer to contiguous block of memory to load Return values: true if successfull false on error Definition at line 139 of file MemoryCache.cpp. Here is the call graph for this function: Here is the caller graph for this function: The documentation for this class was generated from the following files:  MemoryProject/MemoryCache.h  MemoryProject/MemoryCache.cpp
  • 12. 11 CVirtualAddress Class Reference Handles physical to cache address conversions. #include <MemoryCache.h> Public Member Functions  CVirtualAddress () Default Constructor.  CVirtualAddress (const CVirtualAddress &rhs) Copy Constructor.  CVirtualAddress (const void *pAddress) Conversion Constructor.  DWORD DecodeTag (void) const  DWORD DecodeOffset (void) const  DWORD DecodeIndex (void) const Detailed Description Handles physical to cache address conversions. This class is used to translate physical memory addresses into "virtual" addresses by decoding relevant bit patterns into corresponding information fields needed to reference cache memory. The original address is partitioned into three portions: the index bits are used to select a block; the block offset bits are used to select a word within a selected block, and the tag bits are used to do a tag match against the tag stored in the tag field of the selected entry. Set-associative caches permit the flexible placement of data among all the entries of a "set". The index bits select a particular set, the tag bits select an entry (i.e. block) within the set, and the block offset bits select the word within the selected entry (i.e. block). Definition at line 149 of file MemoryCache.h. Member Function Documentation DWORD CVirtualAddress::DecodeIndex (void ) const Decodes and returns Cache Set Index from the underlying memory address Return values: Index decoded from memory address DECODE_ERROR on failure < cleanup these hardcoded values Definition at line 47 of file MemoryCache.cpp. Here is the caller graph for this function:
  • 13. 12 DWORD CVirtualAddress::DecodeOffset (void ) const Decodes and returns Block Offset from the underlying memory address Return values: Offset decoded from memory address DECODE_ERROR on failure < cleanup these hardcoded values Definition at line 35 of file MemoryCache.cpp. Here is the caller graph for this function: DWORD CVirtualAddress::DecodeTag (void ) const Decodes and returns Tag from the underlying memory address Return values: Tag decoded from memory address DECODE_ERROR on failure Definition at line 23 of file MemoryCache.cpp. Here is the caller graph for this function: The documentation for this class was generated from the following files:  MemoryProject/MemoryCache.h  MemoryProject/MemoryCache.cpp
  • 14. 13 File Documentation MemoryProject/CommonDef.h File Reference Common type definitions. This graph shows which files directly or indirectly include this file: Typedefs  typedef unsigned __int8 BYTE 8-bit unsigned type  typedef unsigned __int32 DWORD 32-bit unsigned type Detailed Description Common type definitions. Author: Mark L. Short $Date:$ $Revision:$ Definition in file CommonDef.h.
  • 15. 14 MemoryProject/MemoryCache.cpp File Reference Four-way set-associative data cache class implimentations. #include "stdafx.h" #include "MemoryCache.h" #include <iostream> Include dependency graph for MemoryCache.cpp: Detailed Description Four-way set-associative data cache class implimentations. Author: Mark L. Short $Date:$ $Revision:$ Modern Processor Design, John Paul Shen, Mikko H. Lipasti, 2005 Cache, Thomas Finley, May 2000, http://www.cs.cornell.edu/~tomf/notes/cps104/cache.html Definition in file MemoryCache.cpp.
  • 16. 15 MemoryProject/MemoryCache.h File Reference Cache management class interface. #include <queue> #include "CommonDef.h" Include dependency graph for MemoryCache.h: This graph shows which files directly or indirectly include this file: Classes  class CVirtualAddress  Handles physical to cache address conversions. class CCacheBlock  simulates a logical cache block class CCacheSet  Simulates a set of cache blocks. class CCacheManager Variables  const int g_CACHE_BLOCK_SIZE = 32 size, in bytes, of each cache block  const int g_CACHE_NUM_BLOCKS = 16 number of cache data blocks  const int g_CACHE_SETS = g_CACHE_NUM_BLOCKS / 4 number of caches sets needed  const int g_CACHE_BLOCKS_PER_SET = g_CACHE_NUM_BLOCKS / g_CACHE_SETS  const DWORD DECODE_ERROR = (DWORD) -1 Error Code returned on decoding failure. Detailed Description Cache management class interface. Author: Mark L. Short
  • 17. 16 $Date:$ $Revision:$ Modern Processor Design, John Paul Shen, Mikko H. Lipasti, 2005 Cache, Thomas Finley, May 2000, http://www.cs.cornell.edu/~tomf/notes/cps104/cache.html Definition in file MemoryCache.h. Variable Documentation const DWORD DECODE_ERROR = (DWORD) -1 Error Code returned on decoding failure. The simplest approach, direct-mapped, forces a many-to-one mapping between addresses and the available storage locations in the cache. In other words, a particular address can reside only in a single location in the cache; that location is usually determined by extracting n bits from the address and using those n bits as a direct index into one of 2n possible locations in the cache. Of course, since there is a many-to-one mapping, each location must also store a tag that contains the remaining address bits corresponding to the block of data stored at that location. On each lookup, the hardware must read the tag and compare it with the address bits of the reference being performed to determine whether a hit or miss has occurred. In the degenerate case where a direct-mapped memory contains enough storage locations for every address block (i.e., the n index bits include all bits of the address), no tag is needed, as the mapping between addresses and storage locations is now one-to-one instead of many-to-one. The register file inside the processor is an example of such a memory; it need not be tagged since all the address bits (all bits of the register identifier) are used as the index into the register file. Set-associative, is a many-to-few mapping between addresses and storage locations. On each lookup, a subset of address bits is used to generate an index, just as in the direct-mapped case. However, this index now corresponds to a set of entries, usually two to eight that are searched in parallel for a matching tag. In practice, this approach is much more efficient from a hardware implementation perspective, since it requires fewer address comparators than a fully associative cache, but due to its flexible mapping policy behaves similarly to a fully associative cache. Set-associative caches permit the flexible placement of data among all the entries of a set.  index bits - select a particular set,  tag bits - select an entry within the set,  block offset bits - select the word within the selected entry. Characteristics of an n-way set associative  Each set contains n entries  Block number determines which set  (Block number) mod (Sets in cache)  Search all entries in a given set at once  Four-way set-associative data cache  Blocks = 16; BlockSize = 32 (Bytes);  Sets (s) = Blocks / 4; s = 16 / 4; s = 4; Offset (o) - Select the word within each block o = lg (BlockSize) o = lg (32) o = 5; Index (i) = Select set of blocks i = lg (Number of Sets) i = lg (4) i = 2 Tag (t) = ID blocks within a set t = 32 - o - i; t = 32 - 5 - 2; t = 25;
  • 18. 17 32 bit Address  Tag (set) Index (blocK) Offset bits[t] bits[i] bits[o] 25 2 5 0..24 25..26 27..31 Definition at line 132 of file MemoryCache.h. const int g_CACHE_BLOCK_SIZE = 32 size, in bytes, of each cache block Cache block size Block size (sometimes referred to as line size) describes the granularity at which the cache operates. Each block is a contiguous series of bytes in memory and begins on a naturally aligned boundary. For example, in a cache with 16 - byte blocks, each block would contain 16 bytes, and the first byte in each block would be aligned to 16 - byte boundaries in the address space, implying that the low - order 4 bits of the address of the first byte would always be zero (i.e., 0b ... 0000). The smallest usable block size is the natural word size of the processor (i.e., 4 bytes for a 32 - bit machine, or 8 bytes for a 64 - bit machine), since each access will require the cache to supply at least that many bytes, and splitting a single access over multiple blocks would introduce unacceptable overhead into the access path. Whenever the block size is greater than 1 byte, the low-order bits of an address must be used to find the byte or word being accessed within the block. As stated above, the low-order bits for the first byte in the block must always be zero, corresponding to a naturally aligned block in memory. However, if a byte other than the first byte needs to be accessed, the low-order bits must be used as a block offset to index into the block to find the right byte. The number of bits needed for the block offset is the log2 of the block size, so that enough bits are available to span all the bytes in the block. For example, if the block size is 64 bytes, log2(64) = 6 low-order bits are used as the block offset. The remaining higher-order bits are then used to locate the appropriate block in the cache memory. Definition at line 54 of file MemoryCache.h.
  • 19. 18 MemoryProject/MemoryProject.cpp File Reference Main source file for implimentation of data cache simulation. #include "stdafx.h" #include "CommonDef.h" #include <memory.h> #include <iostream> #include <iomanip> #include "MemoryCache.h" Include dependency graph for MemoryProject.cpp: Functions  int _tmain (int argc, _TCHAR *argv[]) main routine of the executable Variables  const int g_MAX_ARRAY_SIZE = 512  const int g_DR_PASSOS_LOOP = 511  int g_rgA [g_MAX_ARRAY_SIZE] = {0} Array A.  int g_rgB [g_MAX_ARRAY_SIZE] = {0} Array B.  int g_rgC [g_MAX_ARRAY_SIZE] = {0} Array C. Detailed Description Main source file for implimentation of data cache simulation. Author: Mark L. Short
  • 20. 19 Date: Sept 25, 2014 Modern Processor Design, John Paul Shen, Mikko H. Lipasti, 2005 Cache, Thomas Finley, May 2000, http://www.cs.cornell.edu/~tomf/notes/cps104/cache.html Definition in file MemoryProject.cpp.
  • 21. 20 MemoryProject/stdafx.cpp File Reference source file that includes just the standard includes #include "stdafx.h" Include dependency graph for stdafx.cpp: Detailed Description source file that includes just the standard includes MemoryProject.pch will be the pre-compiled header stdafx.obj will contain the pre-compiled type information Author: Mark L. Short Date: October 1, 2014 Definition in file stdafx.cpp.
  • 22. 21 MemoryProject/stdafx.h File Reference Application header file. #include "targetver.h" #include <stdio.h> #include <tchar.h> Include dependency graph for stdafx.h: This graph shows which files directly or indirectly include this file: Detailed Description Application header file. include file for standard system include files, or project specific include files that are used frequently, but are changed infrequently Author: Mark L. Short Date: Sept 19, 2014 Definition in file stdafx.h.
  • 23. 22 MemoryProject/targetver.h File Reference #include <SDKDDKVer.h> Include dependency graph for targetver.h: This graph shows which files directly or indirectly include this file:
  • 24. 23 Index CCacheBlock, 5 get_Tag, 5 GetCacheData, 5 LoadCacheBlock, 6 set_Tag, 6 CCacheManager, 7 GetCacheData, 7 LoadCachePage, 8 CCacheSet, 9 GetCacheData, 9 LoadCacheBlock, 10 CVirtualAddress, 11 DecodeIndex, 11 DecodeOffset, 12 DecodeTag, 12 DECODE_ERROR MemoryCache.h, 16 DecodeIndex CVirtualAddress, 11 DecodeOffset CVirtualAddress, 12 DecodeTag CVirtualAddress, 12 g_CACHE_BLOCK_SIZE MemoryCache.h, 17 get_Tag CCacheBlock, 5 GetCacheData CCacheBlock, 5 CCacheManager, 7 CCacheSet, 9 LoadCacheBlock CCacheBlock, 6 CCacheSet, 10 LoadCachePage CCacheManager, 8 MemoryCache.h DECODE_ERROR, 16 g_CACHE_BLOCK_SIZE, 17 MemoryProject/CommonDef.h, 13 MemoryProject/MemoryCache.cpp, 14 MemoryProject/MemoryCache.h, 15 MemoryProject/MemoryProject.cpp, 18 MemoryProject/stdafx.cpp, 20 MemoryProject/stdafx.h, 21 MemoryProject/targetver.h, 22 set_Tag CCacheBlock, 6