高速缓冲污染是指正在执行的程序将不必要的数据从主存移到高速缓冲,降低了数据处理效率的现象。
CSAPP中提到的一种现象。
cache 的模型:
假设有一下代码
假设数组T[i] 和C[i]所有的初始数据都是0,并且cache为空,假设只有一级cache
T[0] = T[0] +1;//这个时候T[0]会被从主存移动到cache,并经CPU处理,使得T[0]的值增加1
for i in 0 ...sizeof(cache)
c[i] = c[i] +1;//这个时候要逐一把c[i] 移动至cache,由于i 一直增加到刚好cache的大小,之前的T[0]会被移出到主存,
T[0] = T[0] + C[sizeof(cache)-1]
这个时候就会发生cache pollution 为什么呢?
之前T[0]会被移出到主存,而此时又要使用T[0]于是又要移动到cache里面。由于前被 “排挤” 出cache又要重新进入cache。造成了数据处理的低效率
这就是cache pollution
貌似x86 构架还没解决,不过PowerPC 有个指令lvxl 能够避免cache pollution..............
如有错漏,欢迎讨论指正。
Thank you.