C語(yǔ)言編程計(jì)算L1緩存_第1頁(yè)
C語(yǔ)言編程計(jì)算L1緩存_第2頁(yè)
C語(yǔ)言編程計(jì)算L1緩存_第3頁(yè)
C語(yǔ)言編程計(jì)算L1緩存_第4頁(yè)
C語(yǔ)言編程計(jì)算L1緩存_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、用C語(yǔ)言推測(cè)Cache相關(guān)參數(shù)2014-11-11 23:13 373 人閱讀 評(píng)論(0)收藏 舉報(bào)版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。目錄+1)塊大小思路:假定塊大小為8*4B (其中&為未命中,為命中)步長(zhǎng)命中情況1& 2& & 4& & & & 8& & & && & & &16& & & && & & &因?yàn)椴幻袝r(shí)間要遠(yuǎn)遠(yuǎn)大于命中時(shí)間,所以步長(zhǎng)為2時(shí)平均的運(yùn)行時(shí)間應(yīng)該是步長(zhǎng)1的2

2、倍,以此類推,到步長(zhǎng)為8時(shí)最接近2倍(注:假定塊中為8個(gè)字時(shí)),但步長(zhǎng)再增大時(shí),就應(yīng)該不會(huì)再增加,或者增幅很小,代 碼如下:2)容量及層級(jí)數(shù)思路:不妨假定,cache是1KB的整數(shù)倍,可能值為1KB,2KB,4KB8MB(即代碼中的length ),由上一步可知塊大小為 64B,每塊有16字。每 次訪問(wèn)保證在1KB或者2KB或者4KB 的大小內(nèi)訪問(wèn),假設(shè) L1大小 為16KB,當(dāng)剛超出范圍超出16KB時(shí),訪問(wèn)時(shí)間會(huì)出現(xiàn)一個(gè)急劇的上升, 因?yàn)檫@時(shí)L1 cache大小已不滿足需要,必需借助L2,據(jù)此寫(xiě)如下代碼:1 #i nclude <stdio.h>2 #i nclude <t

3、ime.h>3 #defi ne PATH "/home/deropty/cache/cachesize.txt"4 #defi ne N 2*1024*1024/the maxsize is_5_2*1024*1024*4B=8MB6 int arrN;_7_int loop = (1<<24);8910 int main ()11 12 clock_t start, fini sh;13 int cou nt =1;14 FILE *fp = NULLA5-fp = fopen(PATH,"w");16 for (int lengt

4、h =256; length <= N; length +=256)1717 /256*4B=1KB,the step is18 1KB_20_-21/le ngth con trols the range_22_start = clock();23 int len gthmod = len gth -1;24 for (int i =0; i < loop; +i)25 +arr(i*16) & len gthmod;i*1626 to save the time27 28 fin ish = clock();29 printf( "%4dk: whe n th

5、e array len gth is %7d,30 the cost time is %7.3fms n ”,31 count,length,(double )(finish-start)32 / 1000);fprintf(fp, "%4dktt%7.3fmsn ", count,(double )(finish-start) /1000);+co unt;fclose(fp);fp = NULL;return 0;來(lái)自CODE的代碼片calCacheSize.c3)命中時(shí)間和缺失代價(jià)由1)已知塊大小為16字,所以每次訪問(wèn)16倍數(shù)個(gè)字,讓每次都缺失, 對(duì)大量缺失時(shí)間做均值

6、即可求出缺失代價(jià)。對(duì)于命中時(shí)間可一直訪問(wèn)同一 數(shù)據(jù),對(duì)大量命中時(shí)間的數(shù)據(jù)做均值也可得出命中時(shí)間,代碼如下:1 #i nclude <stdio.h>2 #i nclude <time.h>_3 #i nclude <stdlib.h>45 #define N 1024*1024_6_int loop = (1<<25);78 int main ()9 10 int arrN;11 clock_t start, fini sh;12 double sumtime =0;43for (int k = 0; k <16; k +)14start

7、= clock();15for (int i =0; i < loop; +i)16int in dex = (i *16) & (N-1);17/gura ntee that it does miss18arri ndex *=3;/mea nin gless1920fin ish = clock();21int duration = finish - start;22start = clock();/mi nus23 the time taked by lopps24for (int i =0; i < loop; +i)25int in dex = (i*16) &a

8、mp; (N-1);2627fin ish = clock();28double tmp = ( double )(duration -29 (fin ish-start) / loop;30sumtime += tmp;31printf( "the miss time is %fusn ", tmp);printf("n The average miss time is%fusn ", sumtime16);sumtime=0;for (intk =0; k <16; k +)arr 0 =1;start = clock();for (int i

9、 =0; i < loop; +i)arr 0 *=3;/always visit42 1the arr0;)fin ish = clock();int duration = finish - start;start = clock();for (int i =0; i < loop; +i)484950fin ish = clock();51double tmp = ( double )(duration -52 (fin ish-start) / loop;53sumtime += tmp;Iprintf( "the hit time is %fusn ",

10、 tmp); printf("n The average hit timeis%fusn ”,sumtimej/16);return 0;來(lái)自CODE的代碼片calMissHitTime.c4 )求緩存的關(guān)聯(lián)度思路:假設(shè)有每個(gè)緩存有16個(gè)塊,則直接映射情況如下:塊編號(hào)012345678910111213 1415塊二 012345678910111213 1415口 rh白出卜圭XT16171819202122232425 262728 29 3031映射情況32333435363738394041424344 45 4647484850515212路組相聯(lián)映射情況:|"塊

11、編號(hào)01234567塊 映射情況0123456789101112131415161718192021222324252627282930313233343536373839404142.4路組相聯(lián)映射情況塊編號(hào)0123塊 映射情況012345678910111213141516171819202122 232425262728293031323334 353637如上圖所示,對(duì)于編號(hào)為 0和16的塊,不停訪問(wèn),在直接映射中會(huì)產(chǎn)生 沖突,但對(duì)2路、4路、8路則不會(huì)沖突;對(duì)于編號(hào)為0、16、32、48的塊,不停訪問(wèn),在1路、2路中會(huì)產(chǎn)生沖突,但對(duì)于 4路、8路、16 路則不會(huì)沖突,以此類推,我們讓

12、程序每次都出現(xiàn)可能導(dǎo)致塊缺失的 情況,即訪問(wèn)編號(hào)為0、16的多次,計(jì)算平均訪問(wèn)時(shí)間;訪問(wèn)0、16、32、 48的塊多次,計(jì)算平均訪問(wèn)時(shí)間;訪問(wèn)編號(hào)為0、16、32、48、64、80的塊多次,計(jì)算平均訪問(wèn)時(shí)間 假定CPU為4路組相聯(lián),則不停訪問(wèn)0、16、32、48不會(huì)出現(xiàn)缺失,而再增大為0、16、32、48、64,就會(huì)出現(xiàn)不停缺失的情況,據(jù)此思路,寫(xiě)出代碼如下:1 #i nclude <stdio.h>2 #in elude <time.h>丁4 #define N (1<<8<<10<<10)5 int arrN;6 int loop

13、 = (1<<16);/for producing a accurate result7-8 int main ()9 10 clock_t start, fini sh;11 int sumtime =0;1213for (intasso =2; asso <=16; asso +=2)14/suppose that15 associative is in (2-16)16start = clock();17for (int k =0; k < loop; +k)18for (int i =0; i < asso; +i)19arri<< 9<

14、<4 =0;20512blocks in cache L1, 16 in t/block21fin ish = clock();22int duration = finish - start;23start = clock();aga in for24 accuraty25for (int k =0; k < loop; +k)26for (int i =0; i < asso; +i)27i<< 9<<4<<4;28fin ish = clock();29printf( "%2dways associative's ave

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論