网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
资料首页最新产品 技术参数 电路图 设计应用 解决方案 代理商查询 IC替换 IC厂商 电子辞典
关键字: 技术文章 PDF资料 IC价格 电路图 代理商查询 IC替换 IC厂商 电子辞典

CPU学习 (Cache Coherence)

  在2004年写的一篇文章X86汇编语言学习手记(1)中,曾经涉及到gcc编译的代码默认16字节栈对齐的问题。之所以这样做,主要是性能优化方面的考虑。

  大多数现代CPU都One-die了L1和L2Cache。对于L1 Cache,大多是write though的;L2 Cache则是write BACK的,不会立即写回memory,这就会导致Cache和Memory的内容的不一致;另外,对于MP(MULTI Processors)的环境,由于Cache是CPU私有的,不同CPU的Cache的内容也存在不一致的问题,因此很多MP的的计算架构,不论是ccNUMA还是SMP都实现了Cache Coherence的机制,即不同CPU的Cache一致性机制。

  Cache Coherence的一种实现是通过Cache-snooping协议,每个CPU通过对Bus的Snoop实现对其它CPU读写Cache的监控:

  首先,Cache line是Cache和Memory之间数据传输的最小单元。

  1. 当CPU1要写Cache时,其它CPU就会检查自己Cache中对应的Cache line,如果是dirty的,就write BACK到Memory,并且会将CPU1的相关Cache line刷新;如果不是dirty的,就Invalidate该Cache line.

  2. 当CPU1要读Cache时,其它CPU就会将自己Cache中对应的Cache line中标记为dirty的部分write BACK到Memory,并且会将CPU1的相关Cache line刷新。

  所以,提高CPU的Cache hit RATE,减少Cache和Memory之间的数据传输,将会提高系统的性能。

  因此,在程序和二进制对象的内存分配中保持Cache line aligned就十分重要,如果不保证Cache line对齐,出现多个CPU中并行运行的进程或者线程同时读写同一个Cache line的情况的概率就会很大。这时CPU的Cache和Memory之间会反复出现Write BACK和Refresh情况,这种情形就叫做Cache thrashing。

  为了有效的避免Cache thrashing,通常有以下两种途径:

  1. 对于Heap的分配,很多系统在malloc调用中实现了强制的alignment.
  2. 对于Stack的分配,很多编译器提供了Stack aligned的选项。

  当然,如果在编译器指定了Stack aligned,程序的尺寸将会变大,会占用更多的内存。因此,这中间的取舍需要仔细考虑,下面是我在google上搜索到的一段讨论:

One of our customers complained about the additional code geneRATEd to
maintain the stack aligned to 16-byte boundaries, and suggested us to
default to the minimum alignment when optimizing for code size. This
has the caveat that, when you LINK code optimized for size with code
optimized for speed, if a function optimized for size calls a
performance-critical function with the stack misaligned, the
performance-critical function may perform poorly.



热门搜索:01M2251SFC3 SS240806 PS-415-HG 01B1001JF DRV8313PWPR RS1215-RA TLP1210SATG TLM815NS TLP76MSG 2839648 LC1200 RS-1215 PS480806 2856032 PSF2408 SUPER6OMNI B 2838283 B30-7100-PCB 2839237 02B5000JF TLP6B TLP606 01C1001JF BTA12-800TWRG 2839570
COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
客户服务:service@IC72.com 库存上载:IC72@IC72.com
(北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质