正在加载图片...
结果是:产生了更多进出高速缓存的流量,并导致更多的高速缓存请求未命中。 右侧所示:流程被分为数据集中更小数据块上的四个数据循环,其中每个数据块的大小 都比高速缓存的容量更低。随之而来的结果是:在每个循环过程中,更小的数据块在高速缓 存中留存的时间更久,这就减少了进出高速缓存的数据流量,进而降低了高速缓存请求的未 命中率。此处所述实例可能是最简单的高速缓存模块化技术。还有许多更先进的高速缓存 模块化方案,依具体应用和算法的性质而定。 另外,还可以通过保留方法,让每个线程保留其自已的专用数据来降低到共享数据的访 问频率,仅在必要时更新共享数据,来提高效率 4如何避免错误共享? 当位于不同位置的多个处理器向一个共享缓存行写入时,错误共享将发生。例如,为 了保持专用一级高速缓存中高速缓存的一致性,错误共享可能会发生。如图所示,CPU 线程向一级高速缓存中添加一行,然后对其中的部分内容进行修改。CPU2中的线程也希 望修改同一个高速缓存行中的不同部分。高速缓存行已被CPUI修改。则CPUl中的一级 高速缓存行必须清除至二级高速缓存,然后加载至CPU2中的一级高速缓存,之后更新才能 完成 一级缓存 一级缓存 二级缓存 解决错误共享问题的一种最常用的方法是分配未共享的数据给不同的高速缓存行。另外 也可将线程移至同一个内核中,但这已体现不出多核的优势了。 参考书目: Robert love著,陈莉君等译。 Linux内核设计与实现(第2版)北京:机械工业出 版社200结果是:产生了更多进出高速缓存的流量,并导致更多的高速缓存请求未命中。 右侧所示:流程被分为数据集中更小数据块上的四个数据循环,其中每个数据块的大小 都比高速缓存的容量更低。随之而来的结果是:在每个循环过程中,更小的数据块在高速缓 存中留存的时间更久,这就减少了进出高速缓存的数据流量,进而降低了高速缓存请求的未 命中率。此处所述实例可能是最简单的高速缓存模块化技术。 还有许多更先进的高速缓存 模块化方案,依具体应用和算法的性质而定。 另外,还可以通过保留方法,让每个线程保留其自已的专用数据来降低到共享数据的访 问频率,仅在必要时更新共享数据,来提高效率。 4.如何避免错误共享? 当位于不同位置的多个处理器向一个共享缓存行写入时,错误共享将发生。 例如,为 了保持专用一级高速缓存中高速缓存的一致性,错误共享可能会发生。 如图所示,CPU1 线程向一级高速缓存中添加一行,然后对其中的部分内容进行修改。 CPU2 中的线程也希 望修改同一个高速缓存行中的不同部分。 高速缓存行已被 CPU1 修改。则 CPU1 中的一级 高速缓存行必须清除至二级高速缓存,然后加载至 CPU2 中的一级高速缓存,之后更新才能 完成。 解决错误共享问题的一种最常用的方法是分配未共享的数据给不同的高速缓存行。另外 也可将线程移至同一个内核中,但这已体现不出多核的优势了。 参考书目: [1] Robert Love 著,陈莉君等译。Linux 内核设计与实现(第 2 版)北京:机械工业出 版社 2006
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有