CPU各级缓存,已缓存是不是已下载这样一种关系

请完成以下验证码
查看: 4355|回复: 13
普及贴---多核CPU的共享和非共享缓存是怎么回事(原生与非原生CPU)
本帖最后由 whf20 于
11:36 编辑
非原生多核CPU,它们的缓存是非共享的并行关系。比如775针的Q8、Q9系列CPU就不是原生4核(如Q9650,L2缓存12M,实际上是由两颗缓存为6M的双核CPU捆绑一起而成的)。而I5、I7就是原生,但L2也是非共享的,L3缓存才共享。
原生CPU和共享缓存很多人都知道,那非原生多核CPU和非共享缓存呢?
首先,设计非原生多核CPU风险较低,比较容易拼出更多的核心,只要核心效率不是太差,拼出来的多核CPU效率也不会太差。实际上对非原生多核CPU来说,运行程序时两个L2缓存中的内容是一样的,也就是说CPU实际相当于只有一个L2缓存的容量。比如出现一个程序把双核E8400的6M缓存耗尽,那E8400就死翘翘(具体表现为一卡一卡的),但Q9650却可以正常运行其它程序,这是因为Q9650多了两个核心的效果,而不是多6M缓存。
虽然非原生多核CPU的缓存容量较小,但也有好处,那就是由于它的非共享的缓存只能被对应的核心使用,所以带宽高(对应的每颗核心都能共享到最大缓存)、延迟小。
缺点:非原生多核CPU效率较低,功耗略高,缓存容量偏小且利用率差一点。并且775针的四核由于是共享前端总线,核心越多就越拖后腿,后来的CPU就都放弃前端总线这一古老设计了。
再如I7,由于非共享的缓存只能被对应的核心使用,虽然容量小和利用率相对差一些,但是有带宽高、延迟小等特点 ,这就是为什么I7的每个核心都有独立的L2缓存且容量不大。Intel中华区总裁也曾说过,现有技术下过大的L2会带来很大的延迟提升。并且I7的L3缓存包含了L2缓存的所有数据,这样一个核心在L3找不到的数据也不可能存在于其他三个核心的L2内,也就省去了请求其他核心的L2缓存数据的步骤,直接转入对内存的请求,从而提高了效率。
I7的L3共享缓存容量虽然相对大了,但是延迟比L2高,带宽小(因为有更多的核心使用,每个核心就吃不饱)。只是I7由于核心效率和频率高,其L3延迟比Q9系列CPU的L2延迟高不了多少。众多新技术的支持使得I5、I7成了高效CPU的代名词。
原生多核乃是大势所趋,技术的进步必能把缓存在容量、延迟、带宽等方面的兼顾做得更好。
感谢分享: )
能介绍一下 现在哪里型号是原生的吗?
lotnhiro 发表于
能介绍一下 现在哪里型号是原生的吗?
百度一下,资料应有尽有。
好幾年前的東西了......
这个资料有点老,虽然我还用着D805
本帖最后由 whf20 于
17:38 编辑
kakeong8 发表于
Q9&&好幾年前的東西了......
普及贴,但放在现在也实用,Q系列货源充足。难保Intel不会再出胶水多核。这些我想还很多人不知道,当然一般人也无需了解。
那么AMD的FX呢?8M+8M,缓存很大容量啊,吞吐量很强哦,不过不适合家用罢了
i7 920 OC到3.6G关睿频,对比3770K的3.5G关睿频,性能毫无进步,倒是一代I的3通道内存,不如三代I的双通道,AIDA64的实测数据
feiren 发表于
i7 920 OC到3.6G关睿频,对比3770K的3.5G关睿频,性能毫无进步,倒是一代I的3通道内存,不如三代I的双通道, ...
那是肯定的。虽然I7 920 OC到3.6G,主频比I7 3770K高0.1G,但3代I7核心等方面的改进,比提高0.1G主频的噱头,用处大得多。
whf20 发表于
那是肯定的。虽然I7 920 OC到3.6G,主频比I7 3770K高0.1G,但3代I7核心等方面的改进,比提高0.1G主频的噱 ...
我日常还是上网,玩坦克世界,只是因为旧的X58主板老化,才换3770K+z77,win7跑起来还是那样,IE9启动还是比chrome慢很多,根本没感受过“进步”
Copyright & KaFan &KaFan.cn All Rights Reserved.
Powered by Discuz! X3.4( 苏ICP备号 ) GMT+8,酷勤网 C 程序员的那点事!
浏览次数:次
作者:scutan
在看文档的时候看到CPU可以通过指令直接读写内存,而不是像通常的先到cache取值,然后再读取内存这种情况。文档中提供了下面的函数调用[CODE]#include&&emmintrin.h&void&_mm_stream_si32(int&*p,&int&a);void&_mm_stream_si128(int&*p,&__m128i&a);void&_mm_stream_pd(double&*p,&__m128d&a);#include&&xmmintrin.h&void&_mm_stream_pi(__m64&*p,&__m64&a);void&_mm_stream_ps(float&*p,&__m128&a);#include&&ammintrin.h&void&_mm_stream_sd(double&*p,&__m128d&a);void&_mm_stream_ss(float&*p,&__m128&a);[/CODE]不知道哪位用过没?能否讲解一下。谢谢!
&cjaizss 回复于: 14:12:17
暂时关闭cache功能,再访问内存
&scutan 回复于: 14:28:23
引用:原帖由&cjaizss&于&&14:12&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6651426&ptid=1017639]暂时关闭cache功能,再访问内存&先谢谢了!我编译的时候说是找不到动态库,&不知道是链接哪一个库啊?&谢谢!&google了没有找到.&&:(
&scutan 回复于: 14:46:33
引用:原帖由&scutan&于&&14:09&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6651424&ptid=1017639]在看文档的时候看到CPU可以通过指令直接读写内存,而不是像通常的先到cache取值,然后再读取内存这种情况。文档中提供了下面的函数调用#include&void&_mm_stream_si32(int&*p,&int&a);void&_mm_str&...&根据文档我是这样理解的,如果有两组数据,A[N],&B[N],A是经常被用到,而B中的元素则是偶尔被用到,即使用到也只用一次。那么如果在对A中数据进行操作的时候,需要B[j],则将B[j]读取进来,但是这样的话会让之前保存A的cache&line失效。当对B[j]的一次操作完成之后,就会将它放到内存中去,此时再读取之前的A,这个时候就需要再一次地将cache&line给重新替换一遍,因此会造成一定的性能开销。如果在访问B的时候能够不通过cache,而直接从内存中去读,那么就不会破坏cache&line,在下次使用到A的时候还是直接从cache&line中进行读取。不知道这样是不是真的能够有效呢?谢谢!
&zx_wing 回复于: 17:27:36
引用:原帖由&scutan&于&&14:09&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6651424&ptid=1017639]在看文档的时候看到CPU可以通过指令直接读写内存,而不是像通常的先到cache取值,然后再读取内存这种情况。文档中提供了下面的函数调用#include&void&_mm_stream_si32(int&*p,&int&a);void&_mm_str&...&我非常怀疑什么指令可以绕过cache,想不出来。通过设置使某段内存不被cache可以,但不记得有指令可以绕过[&本帖最后由&zx_wing&于&&00:08&编辑&]
&system888net 回复于: 19:16:51
不通过CPU&cache&直接访问内存我一直接用汇编.比如:&&movnti&%eax,0xxxxx(%edx)&就是不通过CPU&cache&直接访问内存,属于SSE2指令集.在针对局部数据写多而读少时用这样的指令,这样用的好处是减少cache不必要缓冲,&使cache用在该用的时候.你说的直接访问内存的文件&emmintrin.h&&xmmintrin.h&我认为用的实际上也不过是如下指令:CLFLUSHLFENCEMFENCEPAUSEMASKMOVDQUMOVNTPDMOVNTDQMOVNTI...MOVNTSD(SSE4)MOVNTSS(SSE4)[&本帖最后由&system888net&于&&19:23&编辑&]
&system888net 回复于: 19:21:58
在网格任务中有时用这些指令也很有效.当然很多地方也会适得其反,"在合适的时间和合适的条件下用合适的指令"
&scutan 回复于: 19:29:33
引用:原帖由&zx_wing&于&&17:27&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6651802&ptid=1017639]我非常怀疑什么指令可以绕过cache,想不出来。通过设置关掉cache是可以,但不记得有指令可以绕过&MOVNTI&以及相似的指令可以[QUOTE]Opcode&Instruction&Description&0F&C3&/r&MOVNTI&m32,&r32&Move&doubleword&from&r32&to&m32,&minimizing&pollution&in&the&cache&hierarchy.&DescriptionMoves&the&doubleword&integer&in&the&source&operand&(second&operand)&to&the&destination&operand&(first&operand)&using&a&non-temporal&hint&to&minimize&cache&pollution&during&the&write&to&memory.&The&source&operand&is&a&general-purpose&register.&The&destination&operand&is&a&32-bit&memory&location.The&non-temporal&hint&is&implemented&by&using&a&write&combining&(WC)&memory&type&protocol&when&writing&the&data&to&memory.&Using&this&protocol,&the&processor&does&not&write&the&data&into&the&cache&hierarchy,&nor&does&it&fetch&the&corresponding&cache&line&from&memory&into&the&cache&hierarchy.&The&memory&type&of&the&region&being&written&to&can&override&the&non-temporal&hint,&if&the&memory&address&specified&for&the&non-temporal&store&is&in&an&uncacheable&(UC)&or&write&protected&(WP)&memory&region.Because&the&WC&protocol&uses&a&weakly-ordered&memory&consistency&model,&a&fencing&operation&such&as&SFENCE&should&be&used&in&conjunction&with&MOVNTI&instructions&if&multiple&processors&might&use&different&memory&types&to&read/write&the&memory&location.[/QUOTE]
&scutan 回复于: 19:34:19
引用:原帖由&system888net&于&&19:16&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6651956&ptid=1017639]不通过CPU&cache&直接访问内存我一直接用汇编.比如:&&movnti&%eax,0xxxxx(%edx)&就是不通过CPU&cache&直接访问内存,属于SSE2指令集.在针对局部数据写多而读少时用这样的指令,这样用的好处是减少cache不必&...&嗯,是的,我在1楼给出的函数汇编之后就是您说的这些指令。那您对于这样使用之后的性能有没有研究过呢?谢谢
&zx_wing 回复于: 22:17:11
引用:原帖由&system888net&于&&19:16&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6651956&ptid=1017639]不通过CPU&cache&直接访问内存我一直接用汇编.比如:&&movnti&%eax,0xxxxx(%edx)&就是不通过CPU&cache&直接访问内存,属于SSE2指令集.在针对局部数据写多而读少时用这样的指令,这样用的好处是减少cache不必&...&学习了,我还一直不知道SSE2有这样的功效。不过从suctan发的内容来看,我认为这些指令还是没有绕过cache。WC在x86架构下是个比较特殊的东西,它是独立于通常的L1、L2、L3&cache之外,不过它本身还是一个cache。WC之所以可能提高效率,我想是因为它不通过硬件保证指令执行的顺序性(x86的读写都是order的),所以才会有LFENCE、MFENCE这样的指令。也就是说把读写顺序性的保障转嫁在程序员身上,以提高硬件执行的效率。我还是认为没有指令可以绕过cache直接write&through到内存,除非通过页表的PCD机制或MTTR寄存器设置内存的属性,才能绕过cache。
&system888net 回复于: 23:04:11
能否再详细说一下你的看法?
&system888net 回复于: 23:12:48
引用:原帖由&scutan&于&&19:34&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6651972&ptid=1017639]嗯,是的,我在1楼给出的函数汇编之后就是您说的这些指令。那您对于这样使用之后的性能有没有研究过呢?谢谢&使用之后性能是有一些变化,但是基本不变,变好还是变差就要看具体的情况了,:)&有很多情况下没有变化,还不如不用.而且同样的任务算法单CPU和多CPU也有一些区别.你自己写一些比较典型的程序测试一下就感受很具体了.1.&简单计算,如y=x1+x2;2.&需要读的计算,如&&&y=x1+x2;&&&z=y*x1;&&&z=z+x2;2.&...
&zx_wing 回复于: 23:23:42
引用:原帖由&system888net&于&&23:04&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6652176&ptid=1017639]能否再详细说一下你的看法?&简单的说就是SSE2指令还是使用了cache,只是这块cache不是我们通常说的L1、L2、L3&cache而已。
&mik 回复于: 23:42:46
引用:原帖由&zx_wing&于&&23:23&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6652199&ptid=1017639]简单的说就是SSE2指令还是使用了cache,只是这块cache不是我们通常说的L1、L2、L3&cache而已。&说得不错,赞成除了L1,L2,L3&外,现在的&processor&还多了个&write&buffer,&再来缓冲了一下&:mrgreen:&:mrgreen:&write&combining&就是利用了&write&buffer我看除了浮点数指令真正实现&registers&写&memory&外,&如:fst,&fstp&等指令,&&其它貌似做不到
&system888net 回复于: 23:45:06
引用:原帖由&zx_wing&于&&23:23&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6652199&ptid=1017639]简单的说就是SSE2指令还是使用了cache,只是这块cache不是我们通常说的L1、L2、L3&cache而已。&我理解LZ所说的绕开的cache应该是指L1、L2、L3&cache.与你的观点是相符的.你的观点也是一个有益的补充,不同角度看问题.
&scutan 回复于: 23:47:30
谢谢楼上各位,明白了。
&zx_wing 回复于: 00:05:04
引用:原帖由&scutan&于&&14:46&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6651466&ptid=1017639]根据文档我是这样理解的,如果有两组数据,A[N],&B[N],A是经常被用到,而B中的元素则是偶尔被用到,即使用到也只用一次。那么如果在对A中数据进行操作的时候,需要B[j],则将B[j]读取进来,但是这样的话&...&顺便说一下scutan同学这里的正题。这是不可能的,因为读必须经过cache,也就是说没有直接从内存读到寄存器的说法,都是先读到cache,再到寄存器。是否绕开cache,是针对写的情况。还没有听说过绕开CPU&cache导致性能提高的情况,intel手册明确强调,绕开cache将导致显著的性能下降。
&system888net 回复于: 00:08:29
引用:原帖由&zx_wing&于&&00:05&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6652251&ptid=1017639]顺便说一下scutan同学这里的正题。这是不可能的,因为读必须经过cache,也就是说没有直接从内存读到寄存器的说法,都是先读到cache,再到寄存器。是否绕开cache,是针对写的情况。还没有听说过绕开CPU&ca&...&正确,绕开cache是针对写的情况而言的.但不排除CPU的一些机制在未来的发展中有其它的变化.毕竟这个主动权在AMD,INTEL等手中.[&本帖最后由&system888net&于&&00:11&编辑&]
&mik 回复于: 00:13:13
绕开&cache&去写,不但效率得不到保证,还会出现错误写操作一般都要经过&cache&&controler&的过滤,,绕开cache,等于,下次再读取memory的时候得不到保证,cache&&controler可能不认为cache里面的是脏数据
&scutan 回复于: 00:17:06
引用:原帖由&mik&于&&00:13&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6652259&ptid=1017639]绕开&cache&去写,不但效率得不到保证,还会出现错误写操作一般都要经过&cache&&controler&的过滤,,绕开cache,等于,下次再读取memory的时候得不到保证,cache&&controler可能不认为cache里面的是脏数据&嗯,想了一下,确实是这个道理。
&scutan 回复于: 00:19:55
引用:原帖由&zx_wing&于&&00:05&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6652251&ptid=1017639]顺便说一下scutan同学这里的正题。这是不可能的,因为读必须经过cache,也就是说没有直接从内存读到寄存器的说法,都是先读到cache,再到寄存器。是否绕开cache,是针对写的情况。还没有听说过绕开CPU&ca&...&那这样的话,感觉这个指令没有什么用处。如果仅仅是在写的时候直接写到内存中去的话,那么读的时候呢?不也是会从内存中读到cache中来吗,也会使得之前的cache失效。这样就使得这条指令的初衷有了矛盾。因为它就是不想污染cache,但是在读的时候却污染了。
&system888net 回复于: 00:29:06
引用:原帖由&scutan&于&&00:19&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6652269&ptid=1017639]那这样的话,感觉这个指令没有什么用处。如果仅仅是在写的时候直接写到内存中去的话,那么读的时候呢?不也是会从内存中读到cache中来吗,也会使得之前的cache失效。这样就使得这条指令的初衷有了矛盾&...&这种指令不是数据又写又读的情况下用的.任何东西都是避其短用其长.
&scutan 回复于: 00:31:47
引用:原帖由&system888net&于&&00:29&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6652276&ptid=1017639]这种指令不是数据又写又读的情况下用的.任何东西都是避其短用其长.&嗯,明白了。之前我想错了:oops:&,谢谢!
&zx_wing 回复于: 09:35:49
引用:原帖由&scutan&于&&00:19&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6652269&ptid=1017639]那这样的话,感觉这个指令没有什么用处。如果仅仅是在写的时候直接写到内存中去的话,那么读的时候呢?不也是会从内存中读到cache中来吗,也会使得之前的cache失效。这样就使得这条指令的初衷有了矛盾&...&哈哈,我说一点自己的看法吧,不要怪我扯远了。我认为这些指令的初衷不是为了不污染cache。x86上有一个规则,即读写的顺序性由硬件保证。这方便了程序员,但对硬件的执行效率有影响。我所知道的所有RISC平台都是将顺序性的问题交给程序员(准确的说是编译器)保证。这些指令使用的WC正好就具有这个特征,所谓的弱顺序性。所以应该理解成这些指令使用一个具有RISC架构特性的buffer,让CPU可以抛开硬件保证顺序性的规则全速执行,带来一定的性能特征。当然,这些指令在执行时只和WC打交道,而不用其它进程共用的L1~L3,也会避免别人污染自己的cache,使局部性效应更强。
&Godbach 回复于: 10:19:08
受教了。。。这方面了解不够深入,帮LZ顶一下。
&scutan 回复于: 11:21:01
引用:原帖由&zx_wing&于&&09:35&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6652455&ptid=1017639]哈哈,我说一点自己的看法吧,不要怪我扯远了。我认为这些指令的初衷不是为了不污染cache。x86上有一个规则,即读写的顺序性由硬件保证。这方便了程序员,但对硬件的执行效率有影响。我所知道的所有RISC平台&...&非常感谢!受益匪浅!&今天也找了一下关于Write&Combine方面的资料学习了一下。我想正如你说的那样movnti这类指令就是为了用自己的一套Cache而不用L1,L2&Cache。避免相互污染!
&SuperZ 回复于: 12:51:30
对于X86来说,绕过缓存是有一点困难,因为X86在最初设计的时候是没有缓存概念的。加上缓存之后,为了保证兼容性,缓存对于程序员是透明的。但是后来设计的CPU中,缓存不是一个可以忽视的组件,必须要手工做初始化之类工作。象MIPS的设计,绕过缓存非常容易:只要访问不同虚拟地址就行了。访问0xxa0000000之间地址需要通过缓存,访问0xab0000000不通过缓存,它们都映射到物理地址:0~。
&zx_wing 回复于: 13:25:29
引用:原帖由&SuperZ&于&&12:51&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6652920&ptid=1017639]对于X86来说,绕过缓存是有一点困难,因为X86在最初设计的时候是没有缓存概念的。加上缓存之后,为了保证兼容性,缓存对于程序员是透明的。但是后来设计的CPU中,缓存不是一个可以忽视的组件,必须要手工做初&...&x86一样的特性。个人认为MIPS的内存管理很僵化。
&SuperZ 回复于: 20:43:12
引用:原帖由&zx_wing&于&&13:25&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6653038&ptid=1017639]x86一样的特性。个人认为MIPS的内存管理很僵化。&我可不认为MIPS的MMU很僵化,反而很灵活:需要虚拟内存支持的真正OS可以充分利用MMU,不要虚拟内存支持嵌入式软件完全可以直接使用Kseg0和Kseg1两个区域。即使是Intel最新的Itanium也是这样设计的:包括两个直接映射段,一个通过缓存,一个不通过。
&zx_wing 回复于: 22:19:44
引用:原帖由&SuperZ&于&&20:43&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6653921&ptid=1017639]我可不认为MIPS的MMU很僵化,反而很灵活:需要虚拟内存支持的真正OS可以充分利用MMU,不要虚拟内存支持嵌入式软件完全可以直接使用Kseg0和Kseg1两个区域。即使是Intel最新的Itanium也是这样设计的:包括两&...&虽然我不在MIPS上做开发,但从各种渠道还是有点了解,说错勿怪。只有DOS时代的软件,和简单软件才不需要页表,而用类似8086实模式的方式访问内存。也就是你这里说的Kseg0和Kseg1。我说它僵化正是因为这种硬件对虚拟地址空间的强制分区。它把虚拟地址空间分成5个区域,每个区域的地址起始和结束是硬件规定死的,这意味着程序在链接时要强制使用一些固定的虚拟地址。并且对于是否使用cache,居然有两个区域是硬件规定uncache的,而不能被动态配置。最后,kesg0、kesg1以及upper-kesg2是静态identify&mapping,这表示这3个区域的虚拟地址对应的物理地址是硬件规定死的,非常僵化。一个灵活的的内存机制,应该让虚拟地址到物理地址的映射关系是可由软件动态配置的,内存属性也应该是可以配置的,最后是不应该对虚拟地址空间进行硬件分区,而是应该让软件分区自己决定该用哪些,不用哪些。我没说MIPS的MMU是僵化的,相反它是灵活的,可以用软件操作的MMU都是灵活的。最后兄弟你对IA64架构的认识太片面了[&本帖最后由&zx_wing&于&&22:44&编辑&]
&mik 回复于: 22:36:15
CPU版难得的讨论热烈,&加个精华,&希望各位能继续:wink:
&system888net 回复于: 23:22:36
:)&继续关注大家的讨论!
&scutan 回复于: 23:25:46
引用:原帖由&mik&于&&22:36&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6654024&ptid=1017639]CPU版难得的讨论热烈,&加个精华,&希望各位能继续:wink:&啊,谢谢版主啊。能得到这么多大牛的帮助,真的很荣幸!&:em02:
&SuperZ 回复于: 10:07:21
引用:原帖由&zx_wing&于&&22:19&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6654009&ptid=1017639]虽然我不在MIPS上做开发,但从各种渠道还是有点了解,说错勿怪。只有DOS时代的软件,和简单软件才不需要页表,而用类似8086实模式的方式访问内存。也就是你这里说的Kseg0和Kseg1。我说它僵化正是因为这种硬&...&你我看问题的角度不同,得出的结论不同。我认为功能够用就好,MIPS虚拟地址分配虽然简单,但是已经可以满足所有需求,太大的灵活性也没什么好处。
&system888net 回复于: 13:08:40
SuperZ&的发言也是在从另外一个角度进行有益的补充.一件事情从不同的角度的确可以得出不同的结论.[&本帖最后由&system888net&于&&13:10&编辑&]
&cjaizss 回复于: 13:22:33
归根结底还是取决于CPU的设计啦。可能存在三类方法:1.暂时关闭cache机制2.CPU支持用地址的方式来区分是否用cache(相同的物理存储可以用两个不同的地址来访问,一个会使用cache机制,一个不使用cache机制)3.CPU自带绕过cache的指令
&system888net 回复于: 13:28:36
引用:原帖由&cjaizss&于&&13:22&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6654929&ptid=1017639]归根结底还是取决于CPU的设计啦。可能存在三类方法:1.暂时关闭cache机制2.CPU支持用地址的方式来区分是否用cache(相同的物理存储可以用两个不同的地址来访问,一个会使用cache机制,一个不使用cache机制&...&:)&good
&zhangxudong 回复于: 16:59:11
用&volatile&声明变量不行吗
&zhangxudong 回复于: 17:03:00
刚才试了一下,不能用volatile。
&bxfqing 回复于: 18:13:55
:em23:&:em23:&纯粹来学习的。
&cjaizss 回复于: 20:20:15
引用:原帖由&zhangxudong&于&&16:59&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6655374&ptid=1017639]用&volatile&声明变量不行吗&volatile是软件级的,CPU的cache是硬件级的,不是同一类东西
&SuperZ 回复于: 20:56:56
引用:原帖由&zhangxudong&于&&16:59&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6655374&ptid=1017639]用&volatile&声明变量不行吗&volatile类型和缓存没有关系,只是告诉编译器,这个变量不能使用寄存器优化。每次读操作都要重新执行一遍内存读取过程,至于是从缓存读,还是从内存读,或者是外设寄存器,还得看虚拟地址映射到哪里,怎么映射。当然,大部分使用volatile类型变量的时候,都是想要读外设寄存器。
&scutan 回复于: 21:39:10
引用:原帖由&zhangxudong&于&&16:59&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6655374&ptid=1017639]用&volatile&声明变量不行吗&可以看看这个哈:http://bbs.chinaunix.net/viewthread.php?tid=1059006&extra=page%3D3%26amp%3Bfilter%3Ddigest
&system888net 回复于: 14:29:38
引用:原帖由&SuperZ&于&&20:56&发表&[url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6655670&ptid=1017639]volatile类型和缓存没有关系,只是告诉编译器,这个变量不能使用寄存器优化。每次读操作都要重新执行一遍内存读取过程,至于是从缓存读,还是从内存读,或者是外设寄存器,还得看虚拟地址映射到哪里,怎么&...&赞同
&kevinadmin 回复于: 15:36:01
kwg&kwg&kwg
&hejinxu 回复于: 23:27:17
不懂编程但顶一下&呵呵
&深愉 回复于: 23:07:36
X86的CPU内部的Cache可否锁定,不让读写时flush掉?
原文链接:http://linux.chinaunix.net/bbs/viewthread.php?tid=1017639
转载请注明作者名及原文出处
& 相关主题:

我要回帖

更多关于 缓存是不是下载 的文章

 

随机推荐