我前几天读了一篇二十多年前的论文,论文中的实验使用了 CACTI 2.0 作为缓存模型。 我查了一下这个模型,它最后一次更新是在十年前,最新版本是 7.0,而且已经在 github 开源。 看起来是个很容易上手的模型,可以在我的毕设里面使用。

基本使用

git clone之后,先make,会生成可执行文件cacti。CACTI 为我们提供了一些预设,例如缓存预设cache.cfg。要评估这个预设的性能,只需要:

./cacti -infile cache.cfg

除了这种在文件中提供参数的方式之外,CACTI 也接受命令行参数。CACTI 的README里面是这样写的:

./cacti  cache_size line_size associativity rw_ports excl_read_ports excl_write_ports 
  single_ended_read_ports search_ports banks tech_node output_width specific_tag tag_width
  access_mode cache main_mem obj_func_delay obj_func_dynamic_power obj_func_leakage_power
  obj_func_cycle_time obj_func_area dev_func_delay dev_func_dynamic_power dev_func_leakage_power
  dev_func_area dev_func_cycle_time ed_ed2_none temp wt data_arr_ram_cell_tech_flavor_in
  data_arr_peri_global_tech_flavor_in tag_arr_ram_cell_tech_flavor_in tag_arr_peri_global_tech_flavor_in
  interconnect_projection_type_in wire_inside_mat_type_in wire_outside_mat_type_in
  REPEATERS_IN_HTREE_SEGMENTS_in VERTICAL_HTREE_WIRES_OVER_THE_ARRAY_in 
  BROADCAST_ADDR_DATAIN_OVER_VERTICAL_HTREES_in PAGE_SIZE_BITS_in BURST_LENGTH_in
  INTERNAL_PREFETCH_WIDTH_in force_wiretype wiretype force_config ndwl ndbl nspd ndcm 
  ndsam1 ndsam2 ecc

选项

想做实验,当然需要在cfg文件里自行修改一些选项。由于我做的这个实验只研究缓存,且主要关注时间,因此略过功耗、面积相关的设置。

缓存容量

样例十分简明。例如 256KB 的缓存,我们可以写:

-size (bytes) 262144

CACTI 还给出了一些 DRAM 颗粒的预设,8Gb 的颗粒可以写:

-size (Gb) 8

Cache line 大小与相连度

Cache line 大小设为 64B,8 路组相联。

-block size (bytes) 64
-associativity 8

若要对全相联缓存建模,只需把associativity设为0。

制程

CACTI 支持的制程可以参考这段代码。此外还要注意,CACTI只支持$\leq 90 \mathrm{nm}$的制程,详见这段代码

存储类型

三种选择:

  • cache:缓存
  • ram:scratch
  • main memory:主存

这里选择cache

Data array 和 Tag array 类型

我对这几个选项的理解是,在确定的某个制程下选择哪种工艺库。可以看到,cell(即 Data array cell 与 Tag array cell)具有五个选项:

  • itrs-hp
  • itrs-lstp
  • itrs-lop
  • lp-dram
  • comm-dram

peripheral(即 Data array peripheral 和 Tag array peripheral)只能选择前三种。

这些选项是什么意思呢?ITRS 是 International Technology Roadmap for Semiconductors 的缩写,即半导体国际技术路线图。前三个选项的意思是:

  • itrs-hp: high performance
  • itrs-lop: low operating power
  • itrs-lstp: low standby power

后两个选项显然是指低功耗 DRAM 和普通 DRAM。

Tag 大小

可以自己设置。

-tag size (b) 22

也可以让 CACTI 计算。

-tag size (b) "default"