亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12345下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 45584 | 回復(fù): 48
打印 上一主題 下一主題

請(qǐng)教關(guān)于CPU直接讀寫(xiě)內(nèi)存的問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-07-16 14:09 |只看該作者 |倒序?yàn)g覽
在看文檔的時(shí)候看到CPU可以通過(guò)指令直接讀寫(xiě)內(nèi)存,而不是像通常的先到cache取值,然后再讀取內(nèi)存這種情況。

文檔中提供了下面的函數(shù)調(diào)用

  1. #include <emmintrin.h>
  2. void _mm_stream_si32(int *p, int a);
  3. void _mm_stream_si128(int *p, __m128i a);
  4. void _mm_stream_pd(double *p, __m128d a);
  5. #include <xmmintrin.h>
  6. void _mm_stream_pi(__m64 *p, __m64 a);
  7. void _mm_stream_ps(float *p, __m128 a);
  8. #include <ammintrin.h>
  9. void _mm_stream_sd(double *p, __m128d a);
  10. void _mm_stream_ss(float *p, __m128 a);
復(fù)制代碼


不知道哪位用過(guò)沒(méi)?能否講解一下。謝謝!

論壇徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-03 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-08-04 06:20:00
2 [報(bào)告]
發(fā)表于 2008-07-16 14:12 |只看該作者
暫時(shí)關(guān)閉cache功能,再訪問(wèn)內(nèi)存

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2008-07-16 14:28 |只看該作者
原帖由 cjaizss 于 2008-7-16 14:12 發(fā)表
暫時(shí)關(guān)閉cache功能,再訪問(wèn)內(nèi)存


先謝謝了!
我編譯的時(shí)候說(shuō)是找不到動(dòng)態(tài)庫(kù), 不知道是鏈接哪一個(gè)庫(kù)啊? 謝謝! google了沒(méi)有找到.  

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2008-07-16 14:46 |只看該作者
原帖由 scutan 于 2008-7-16 14:09 發(fā)表
在看文檔的時(shí)候看到CPU可以通過(guò)指令直接讀寫(xiě)內(nèi)存,而不是像通常的先到cache取值,然后再讀取內(nèi)存這種情況。

文檔中提供了下面的函數(shù)調(diào)用

#include
void _mm_stream_si32(int *p, int a);
void _mm_str ...


根據(jù)文檔我是這樣理解的,如果有兩組數(shù)據(jù),A[N], B[N],A是經(jīng)常被用到,而B(niǎo)中的元素則是偶爾被用到,即使用到也只用一次。
那么如果在對(duì)A中數(shù)據(jù)進(jìn)行操作的時(shí)候,需要B[j],則將B[j]讀取進(jìn)來(lái),但是這樣的話會(huì)讓之前保存A的cache line失效。當(dāng)對(duì)B[j]的一次操作完成之后,就會(huì)將它放到內(nèi)存中去,此時(shí)再讀取之前的A,這個(gè)時(shí)候就需要再一次地將cache line給重新替換一遍,因此會(huì)造成一定的性能開(kāi)銷。

如果在訪問(wèn)B的時(shí)候能夠不通過(guò)cache,而直接從內(nèi)存中去讀,那么就不會(huì)破壞cache line,在下次使用到A的時(shí)候還是直接從cache line中進(jìn)行讀取。

不知道這樣是不是真的能夠有效呢?
謝謝!

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2008-07-16 17:27 |只看該作者
原帖由 scutan 于 2008-7-16 14:09 發(fā)表
在看文檔的時(shí)候看到CPU可以通過(guò)指令直接讀寫(xiě)內(nèi)存,而不是像通常的先到cache取值,然后再讀取內(nèi)存這種情況。

文檔中提供了下面的函數(shù)調(diào)用

#include
void _mm_stream_si32(int *p, int a);
void _mm_str ...

我非常懷疑什么指令可以繞過(guò)cache,想不出來(lái)。
通過(guò)設(shè)置使某段內(nèi)存不被cache可以,但不記得有指令可以繞過(guò)

[ 本帖最后由 zx_wing 于 2008-7-17 00:08 編輯 ]

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2008-07-16 19:16 |只看該作者

回復(fù) #1 scutan 的帖子,回復(fù) #5 zx_wing 的帖子

不通過(guò)CPU cache 直接訪問(wèn)內(nèi)存我一直接用匯編.

比如:  movnti %eax,0xxxxx(%edx) 就是不通過(guò)CPU cache 直接訪問(wèn)內(nèi)存,屬于SSE2指令集.
在針對(duì)局部數(shù)據(jù)寫(xiě)多而讀少時(shí)用這樣的指令,這樣用的好處是減少cache不必要緩沖, 使cache用在該用的時(shí)候.


你說(shuō)的直接訪問(wèn)內(nèi)存的文件
<emmintrin.h>
<xmmintrin.h>
我認(rèn)為用的實(shí)際上也不過(guò)是如下指令:
CLFLUSH
LFENCE
MFENCE
PAUSE
MASKMOVDQU
MOVNTPD
MOVNTDQ
MOVNTI
...
MOVNTSD(SSE4)
MOVNTSS(SSE4)

[ 本帖最后由 system888net 于 2008-7-16 19:23 編輯 ]

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2008-07-16 19:21 |只看該作者

回復(fù) #6 system888net 的帖子

在網(wǎng)格任務(wù)中有時(shí)用這些指令也很有效.
當(dāng)然很多地方也會(huì)適得其反,
"在合適的時(shí)間和合適的條件下用合適的指令"

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2008-07-16 19:29 |只看該作者
原帖由 zx_wing 于 2008-7-16 17:27 發(fā)表

我非常懷疑什么指令可以繞過(guò)cache,想不出來(lái)。
通過(guò)設(shè)置關(guān)掉cache是可以,但不記得有指令可以繞過(guò)


MOVNTI 以及相似的指令可以

Opcode Instruction Description
0F C3 /r
MOVNTI m32, r32
Move doubleword from r32 to m32, minimizing pollution in the cache hierarchy.


Description
Moves 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.

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2008-07-16 19:34 |只看該作者
原帖由 system888net 于 2008-7-16 19:16 發(fā)表
不通過(guò)CPU cache 直接訪問(wèn)內(nèi)存我一直接用匯編.

比如:  movnti %eax,0xxxxx(%edx) 就是不通過(guò)CPU cache 直接訪問(wèn)內(nèi)存,屬于SSE2指令集.
在針對(duì)局部數(shù)據(jù)寫(xiě)多而讀少時(shí)用這樣的指令,這樣用的好處是減少cache不必 ...


嗯,是的,我在1樓給出的函數(shù)匯編之后就是您說(shuō)的這些指令。
那您對(duì)于這樣使用之后的性能有沒(méi)有研究過(guò)呢?
謝謝

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2008-07-16 22:17 |只看該作者
原帖由 system888net 于 2008-7-16 19:16 發(fā)表
不通過(guò)CPU cache 直接訪問(wèn)內(nèi)存我一直接用匯編.

比如:  movnti %eax,0xxxxx(%edx) 就是不通過(guò)CPU cache 直接訪問(wèn)內(nèi)存,屬于SSE2指令集.
在針對(duì)局部數(shù)據(jù)寫(xiě)多而讀少時(shí)用這樣的指令,這樣用的好處是減少cache不必 ...

學(xué)習(xí)了,我還一直不知道SSE2有這樣的功效。
不過(guò)從suctan發(fā)的內(nèi)容來(lái)看,我認(rèn)為這些指令還是沒(méi)有繞過(guò)cache。WC在x86架構(gòu)下是個(gè)比較特殊的東西,它是獨(dú)立于通常的L1、L2、L3 cache之外,不過(guò)它本身還是一個(gè)cache。
WC之所以可能提高效率,我想是因?yàn)樗煌ㄟ^(guò)硬件保證指令執(zhí)行的順序性(x86的讀寫(xiě)都是order的),所以才會(huì)有LFENCE、MFENCE這樣的指令。也就是說(shuō)把讀寫(xiě)順序性的保障轉(zhuǎn)嫁在程序員身上,以提高硬件執(zhí)行的效率。
我還是認(rèn)為沒(méi)有指令可以繞過(guò)cache直接write through到內(nèi)存,除非通過(guò)頁(yè)表的PCD機(jī)制或MTTR寄存器設(shè)置內(nèi)存的屬性,才能繞過(guò)cache。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP