最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

自編教材分享:第八章—訪存優(yōu)化(四)

2023-11-13 09:18 作者:先進(jìn)編譯實(shí)驗(yàn)室  | 我要投稿


內(nèi)存優(yōu)化

減少內(nèi)存讀寫

內(nèi)存又可以叫做主存,是處理器能直接尋址的存儲(chǔ)空間,由半導(dǎo)體器件制成。以DDR3內(nèi)存來(lái)說(shuō),通常一次內(nèi)存讀寫大約要200~400個(gè)時(shí)鐘周期,訪問(wèn)內(nèi)存速度非常慢,因此在程序優(yōu)化的過(guò)程中應(yīng)當(dāng)優(yōu)先充分使用寄存器而不是訪存。大多數(shù)情況下,編譯器能夠很好地解決這個(gè)問(wèn)題,但是在具有存儲(chǔ)器別名情況或讀寫依賴情況下,需要優(yōu)化人員手動(dòng)處理。

原始代碼:

優(yōu)化后代碼:

數(shù)據(jù)對(duì)齊

當(dāng)處理器訪問(wèn)正確對(duì)齊的數(shù)據(jù)時(shí),它的運(yùn)行效率最高。當(dāng)數(shù)據(jù)值沒(méi)有正確對(duì)齊時(shí),處理器需要產(chǎn)生一個(gè)異常條件或執(zhí)行多次對(duì)齊的內(nèi)存訪問(wèn),以便讀取完整的未對(duì)齊數(shù)據(jù),導(dǎo)致運(yùn)行效率降低。所以處理器提供的對(duì)齊的數(shù)據(jù)訪問(wèn)指令效率要遠(yuǎn)高于非對(duì)齊的數(shù)據(jù)訪問(wèn)指令。

在32位處理器中,一個(gè)int型變量占4個(gè)byte,假設(shè)這個(gè)變量i在內(nèi)存中占據(jù)2、3、4、5這4個(gè)byte的位置,數(shù)據(jù)非對(duì)齊存儲(chǔ)如圖所示。

結(jié)構(gòu)體對(duì)齊

結(jié)構(gòu)體分配內(nèi)存空間時(shí)采用的對(duì)齊規(guī)則為,變量的起始地址能夠被其對(duì)齊值整除,結(jié)構(gòu)體變量的對(duì)齊值為最寬的成員大小;結(jié)構(gòu)體每個(gè)成員相對(duì)于起始地址的偏移能夠被其自身對(duì)齊值整除,如果不能則在前一個(gè)成員后面補(bǔ)充字節(jié);結(jié)構(gòu)體總大小能夠被最寬的成員的大小整除,如不能整除則在后面補(bǔ)充字節(jié)。

例如A結(jié)構(gòu)體的各成員所占內(nèi)存空間大小為sizeof(a)+sizeof(b)+sizeof(c),即1+4+4=9,而實(shí)際上結(jié)構(gòu)體的大小為sizeof(A)=12。內(nèi)存分配如圖所示。

在定義結(jié)構(gòu)體時(shí),應(yīng)按照成員大小從小到大或從大到小依次定義各成員。建議盡量大數(shù)據(jù)類型在前,小數(shù)據(jù)類型在后,一方面這樣會(huì)節(jié)省一些空間,另一方面可以更好地滿足處理器的對(duì)齊要求。

例如結(jié)構(gòu)體A1需要分配12字節(jié)的內(nèi)存空間,將結(jié)構(gòu)體內(nèi)成員順序進(jìn)行調(diào)整后得到A2結(jié)構(gòu)體,只需要分配8個(gè)字節(jié)空間,處理器訪問(wèn)2次內(nèi)存就可讀完數(shù)據(jù)。

直接內(nèi)存訪問(wèn)

直接內(nèi)存訪問(wèn)(Direct Memory Access,DMA),是一種廣泛應(yīng)用的硬件機(jī)制,可以直接傳輸外圍設(shè)備和主內(nèi)存之間的數(shù)據(jù),這樣處理器可以直接使用這部分的數(shù)據(jù),這種機(jī)制可以提升內(nèi)設(shè)備數(shù)據(jù)傳輸?shù)男剩珼MA機(jī)制如圖所示。

DMA機(jī)制與上文介紹的緩存機(jī)制的不同之處在于,DMA在處理器需要數(shù)據(jù)時(shí)會(huì)提前將數(shù)據(jù)搬移到處理器內(nèi),而緩存機(jī)制則是在需要數(shù)據(jù)的時(shí)候才搬移數(shù)據(jù),因此利用DMA機(jī)制,程序的執(zhí)行時(shí)間比利用緩存機(jī)制的更短。

以德州儀器C6678板卡為例,若數(shù)據(jù)存放在DDR中,需要讀取到緩存中就可以使用EDMA機(jī)制實(shí)現(xiàn)。在循環(huán)中EDMA讀數(shù)據(jù)需要采用EDMA _WAIT等待數(shù)據(jù)傳輸結(jié)束,偽代碼如下:

前文中提到的數(shù)據(jù)預(yù)取和直接內(nèi)存訪問(wèn),目的都是為了數(shù)據(jù)在使用前能從內(nèi)存調(diào)入緩存中,從而減少處理器停頓的訪存優(yōu)化方法。除了上述兩種方法外,還可以在指令層次將訪存與計(jì)算部分重疊,可以有效地解決訪存的延遲。


自編教材分享:第八章—訪存優(yōu)化(四)的評(píng)論 (共 條)

使用qq登录你需要登录后才可以评论。
大英县| 德格县| 朝阳市| 松阳县| 秭归县| 广东省| 仪征市| 保德县| 乌苏市| 定襄县| 墨玉县| 类乌齐县| 南宫市| 洪江市| 泰安市| 高州市| 秭归县| 醴陵市| 瑞昌市| 石家庄市| 中牟县| 德州市| 河池市| 枝江市| 渭源县| 黄陵县| 桑植县| 淮滨县| 延川县| 南投市| 辽宁省| 延安市| 江北区| 洛宁县| 察隅县| 犍为县| 嘉禾县| 公主岭市| 北宁市| 商水县| 阿勒泰市|