Simon 's Blog
» 做笔记做笔记
Toggle navigation
Simon 's Blog
HOME
总裁介绍
coper
zongcai
what
ARCH
TAGS
navigation
!!! Cache预取
? DPDK内存管理 ?
2017-07-12 18:16:19
1023
0
0
simon88
? DPDK内存管理 ?
[TOC] ## 硬件预取 硬件预取是由硬件根据访存的历史信息,对未来可能的访存单元预先取入Cache,从而在数据真正被用到时不会造成Cache失效。但是由于只是基于访存的历史信息,硬件预取会取回大量无用的Cache块,占用访存带宽,还会导致严重的Cache污染问题。由于硬件预取是基于访存的历史信息来预测未来的访存模式,从而可以在数据使用之前将其从下一级的存储器中取回。 绝大多数Cache预取对于程序员来说是透明的,程序员不需要知道硬件预取的知识,但是想要写出非常高效的应用程序,则需要了解一下现在的硬件预取技术. ## 软件预取 > 当代微处理器大都提供了预取指令来支持软件的预取。软件预取是指在编译时由编译器显示加入预取指令,提前将下一级存储器中的数据取回。因为加入了大量的预取指令,同时显示的预取指令需要计算出准确的预取地址,从而导致不能及时的发出预取指令以足够隐藏访存延时,影响了性能的提高。并且必须使额外的 预取指令开销不能超过预取所能带来的效益, 否则得不偿失。 ```c 可以通过`SSE Intrinsics`来支持软件预取,当然,这必须是在支持SSE扩展的处理器上才发挥作用,在"mmintrin.h"上提供了如下的函数原型. void _mm_prefetch(char const *a,int sel); ``` 它对应着`PREFETCH`指令,告诉处理器把地址a对应的缓存加载到更高速的缓存中,sel给出了预取操作的类型,如下所示: |指令|数值|解释| | ----------- |---------------|--------------| |PREFETCHINTA | _MM_HINT_NTA |采用非临时预取,减少缓存行的污染| |PREFETCH0 | _MM_HINT_T0 | 预取数据到所有缓存| |PREFETCH1 | _MM_HINT_T1 |预取到L2,L3缓存,但是不到L1缓存| |PREFETCH2 | _MM_HINT_T2 | 仅预取数据到L3缓存|
上一篇:
Cache一致性问题
下一篇:
TLB Cache
0
赞
1023 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
0
条评论
More...
<>