# Cache-coherence **Repository Path**: gunsimon/cache-coherence ## Basic Information - **Project Name**: Cache-coherence - **Description**: 缓存一致性协议实现 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-06 - **Last Updated**: 2024-06-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CACHE_COHERENC:cache一致性协议实现(监听一致性) 本实验实现了MSI以及MESI监听一致性协议 ## 目录结构 ``` . ├── src #源代码 ├── input #输入文件 ├── include #头文件 ├── Makefile └── README.md ``` ## 保证结果的正确性 为了保证代码执行结果正确,需要保证在多线程环境下对共享变量sum的操作不会出现竞争条件,参考多线程操作临界资源加锁的思路,如果四核并行读写同一地址的数据,则可对该地址的的数据添加一个类似于自旋锁的机制(获取不到锁就一直等待,即使CPU时间片用完了也不会发生切换,死等),使其并行操作转变为串行操作以保证代码执行结果正确。 ## 编程模型的实现 需要统计方案的性能(单位:Cycles),因此设计各种情况的时间(单位:Cycles)如下: read: 读命中:1 cycle 读缺失: 从内存中获取数据:100 cycle 从其他Cache中获取数据:10 cycle write: 写命中: E、M状态:1 cycle S状态:5 cycle 写缺失: 从其他Cache中获取数据并作废其他Cache中的数据:15 cycle 从内存中获取数据并作废其他Cache中的数据:105 cycle 最后输出Cycles查看方案性能 ## 简单的指令集生成 根据源代码input\program.txt生成指令集文件generated.txt,并将其存放在input文件夹下。 ## 编译运行 ## 编译命令 1.make 2.windows可在VSCode中使用快捷键ctrl shift B利用task.json文件进行编译 ## 清除编译文件 make clean ## 运行 ./main #输入文件的名字在input文件夹下,命令可为./main random.txt或者./main program.txt