文章

GPGPU-Sim Notes —— Cache

GPGPU-Sim Notes —— Cache

GPGPU-Sim笔记整理 cache

gpgpu-cache.cc

本文件主要分为三部分:

一;tag array

二;MSHR

三;CACHE

.h文件

主要定义了

枚举类型

名称定义内容
cache_block_state定义cache行的状态INVALID(无效的),RESERVED(保留) VALID(有效),MODIFIED(修改的,dirty)
cache_request_statuscache请求的状态HIT/MISSHIT_RESERVED(命中保留,表示数据在L2 -INCT队列中)RESERVATION_FAIL
cache_event访问cache的事件WRITE_BACK_REQUEST_SENT,写回请求READ_REQUEST_SENT, 读请求WRITE_REQUEST_SENT 写请求
replacement_policy_tcache 替换策略LRU, FIFO,
write_policy_tcache 写策略READ_ONLY, 只读 WRITE_BACK, 写回 WRITE_THROUGH,写直达 WRITE_EVICT, 写剔除 LOCAL_WB_GLOBAL_WT 局部写回 全局写直达
allocation_policy_t分配策略在miss时,是否将数据填入cache。ON_MISS, 不将数据填入cache ON_FILL 将数据填入cache
mshr_config_tMSHR 的配置方法TEX_FIFO,用于texture(纹理cache)ASSOC//用于普通cache
set_index_function用于set 索引号的方法FERMI_HASH_SET_FUNCTION = 0,费米哈希设置 LINEAR_SET_FUNCTION, 线性设置 CUSTOM_SET_FUNCTION ?????

结构体

cache_block_tcache块结构new_addr_type m_tag; new_addr_type m_block_addr; unsigned m_alloc_time; unsigned m_last_access_time; unsigned m_label; unsigned m_eacnt; unsigned m_lru; unsigned m_fill_time; cache_block_state m_status;
cache_sub_statscache统计信息accessmisspending hitreservation
extra_mf_fields在data_cache 类的在texture_cachel类中也有不知道啥意思bool m_valid; new_addr_type m_block_addr; unsigned m_cache_index; unsigned m_data_size;
fragment_entrytexture_cachemem_fetch *m_request; // request informationunsigned m_cache_index; where to look for databool m_miss; // true if sent memory requestunsigned m_data_size;
rob_entrytexture_cachebool m_ready;unsigned m_time; // which cycle did this entry become ready?unsigned m_index; // where in cache should block be placed?mem_fetch *m_request;new_addr_type m_block_addr;
data_blocktexture_cachebool m_valid; new_addr_type m_block_addr;
extra_mf_fieldstexture_cachebool m_valid; unsigned m_rob_index;

tag_array()

类名描述重点说明
cache_configcache配置的类主要作用是初始化cache;读取配置文件gpgpu.config中的参数重要函数init():读入配置参数,初始化cacheset_index():设置cache块索引tag():读取tag位
l1d_cache_configl2_cache_config继承cache_config 
tag_array详见cache基础重要函数;probe():查找cache中的块实现LRU策略access():实现cache 策略的主要功能函数fill() 实现对cache的填充flush()冲刷,清空
mshr_tableMSHR表,用来存放miss轨迹的重要函数:probefulladd
cache_statscache统计信息的类主要统计cache的访问次数,命中率利用率等等
cache_t所有cache的父类继承关系详见cache继承关系
baseline_cache  

1.理解一下cache结构tag

For generality, the tag includes both index and tag. This allows for more complex set index calculations that can result in different indexes mapping to the same set, thus the full tag + index is required to check for hit/miss. Tag is now identical to the block address.

tag(标记字段)通常包括index(索引)和tag(标记)。这样允许我们设置更复杂的索引计算,会导致不同的索引映射到同一个set(cache存储单元)里,因此满的 tag+index 需要进行检查是否命中。现在tag和block地址是相同的。

cache 继承关系

(Legacy image unavailable; original hosted on old site.)

本文由作者按照 CC BY 4.0 进行授权