国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C64x+內(nèi)核的H.264編碼數(shù)據(jù)Cache優(yōu)化

2011-03-15 14:30:44齊美彬陳俊峰
關(guān)鍵詞:存儲(chǔ)器內(nèi)核字節(jié)

齊美彬, 陳俊峰

(合肥工業(yè)大學(xué)計(jì)算機(jī)與信息學(xué)院,安徽合肥 230009)

0 引 言

H.264實(shí)時(shí)視頻編碼系統(tǒng),輸入輸出的數(shù)據(jù)量大,對(duì)算法的實(shí)時(shí)性要求較高[1,2],DSP芯片被廣泛應(yīng)用于 H.264視頻編碼系統(tǒng)中[3]。繼以DM 642為代表的C64x系列DSP之后[4,5],TI公司推出了C64x+DSP內(nèi)核[6],并且在達(dá)芬奇系列和OMAP系列中廣泛使用。為了提高算法的實(shí)時(shí)性,可以從算法、指令、數(shù)據(jù)配置等方面對(duì)算法進(jìn)行優(yōu)化。文獻(xiàn)[7,8]采用了線性匯編、內(nèi)聯(lián)函數(shù)來(lái)提高編碼效率,但是未考慮數(shù)據(jù)分布在不同存儲(chǔ)器中對(duì)算法速度的影響;文獻(xiàn)[9]采用了EDMA且結(jié)合片內(nèi)資源有限的特點(diǎn),分批搬運(yùn)數(shù)據(jù),但未給出 QCIF、CIF、4CIF兼容的方案;文獻(xiàn)

[10]根據(jù)H.264算法特點(diǎn),將程序段拆分處理,提高了指令Cache命中率,該方法提高了L1P存儲(chǔ)器的使用效率,但是要新增加數(shù)據(jù)緩沖區(qū)。文獻(xiàn)[3-9]中,除文獻(xiàn)[7]外其它均采用C64x平臺(tái),C64x+的優(yōu)化策略與其基本一致。

C64x+內(nèi)核因?yàn)椴捎昧烁鼮殪`活的RAM和 Cache結(jié)構(gòu),因此對(duì)數(shù)據(jù)安排更為靈活,如何分配H.264編碼器中的源幀、重建幀、參考幀、內(nèi)插數(shù)據(jù)、預(yù)測(cè)數(shù)據(jù)等,對(duì)編碼速度有較大的影響。本文在文獻(xiàn)[8]工作的基礎(chǔ)上,圍繞RAM、Cache、緩存一致性3個(gè)方面進(jìn)行分析,指出了提高運(yùn)算速度的方法。

1 片上存儲(chǔ)器資源性能分析

圖1所示為C64x+內(nèi)核存儲(chǔ)架構(gòu)示意圖[11],分為片上的L1(包括L1D和L1P)和L2以及片外(ex ternalmemory)的DDR2,L1、L2和DDR2速度依次降低,L1D、L1P和 L2又各自分為RAM和Cache。每一級(jí)Cache只對(duì)下級(jí)存儲(chǔ)器緩存,其中W rite Buffer的容量為4×128 bit。為了防止一些并發(fā)請(qǐng)求被堵塞,這些資源統(tǒng)一由Bandw idth M anagement(BWM)來(lái)管理,這些請(qǐng)求包括CPU、L1P、L1D、IDMA、EDMA等。

圖1 C64x+Cachememoy架構(gòu)

1.1 存儲(chǔ)器級(jí)別與CPU訪問(wèn)速度之間的關(guān)系

對(duì)存儲(chǔ)器中的數(shù)據(jù)訪問(wèn)均需要E1、E2、E3、E4、E5這5步,其中E3環(huán)節(jié)耗費(fèi)的時(shí)間與存儲(chǔ)器位置有關(guān),數(shù)據(jù)在L1中需要1個(gè)周期,在L2中需要6~8周期,在DDR2中至少8個(gè)周期,因此數(shù)據(jù)所處位置應(yīng)按照L1、L2、DDR2的順序考慮。

1.2 RAM存儲(chǔ)器結(jié)構(gòu)

L1D memory最多支持至 1 M可編址的RAM,其起始地址為1 M邊界對(duì)齊,長(zhǎng)度為16 k的倍數(shù),L1D memory被分成區(qū)域0和區(qū)域1,其中區(qū)域0的大小可以是0,也可以是2的倍數(shù)且介于16~512 k中間。區(qū)域1起始于區(qū)域0末端,大小是16 k的倍數(shù)且介于16~512 k之間。若區(qū)域0非0,則區(qū)域1必須不大于區(qū)域0。L1D Cache是從部分或全部區(qū)域1轉(zhuǎn)換得到,轉(zhuǎn)換從最高地址開(kāi)始到低地址。

L2 mem ory是為了連接較快的 L1 memory和較慢的externalmemory,其優(yōu)勢(shì)在于能夠提供較大于 L1的空間。L2 memory包括 port 0 (RAM/Cache)或port 1(RAM),前者支持將不多于256 k的空間轉(zhuǎn)換為Cache[12]。

1.3 Cache存儲(chǔ)器工作機(jī)制

C64x+內(nèi)核具有強(qiáng)大的 Cache控制模塊,Cache作為CPU(Core)和低速存儲(chǔ)器之間溝通的橋梁,有效彌補(bǔ)了CPU與存儲(chǔ)器之間的速度差異,基于代碼和數(shù)據(jù)的空間和時(shí)間相關(guān)性,以塊為單位由硬件控制器自動(dòng)加載數(shù)據(jù)和代碼,同時(shí)維護(hù)緩存一致性。

圖2所示為CPU訪問(wèn)存儲(chǔ)器內(nèi)容的操作流程,在這個(gè)流程中,CPU對(duì)存儲(chǔ)器的訪問(wèn)總是從離CPU最近一級(jí)存儲(chǔ)器開(kāi)始。如果命中,CPU可以直接得到數(shù)據(jù)/代碼,否則,代碼/數(shù)據(jù)會(huì)被加載到前幾級(jí)的Cache中。

圖2 CPU訪問(wèn)儲(chǔ)存器內(nèi)容流程圖

L1D Cache屬于read-allocate、回寫(xiě)、雙路組關(guān)聯(lián)結(jié)構(gòu),其原理如圖3所示(本文所指的緩存空間均為 32 k字節(jié))。L2 Cache屬于read-andw rite allocate,回寫(xiě),4路組關(guān)聯(lián)結(jié)構(gòu),本文重點(diǎn)分析L1D Cache。

雙路組關(guān)聯(lián)結(jié)構(gòu)Cache映射的規(guī)律是,凡16 k字節(jié)邊界對(duì)齊的地址均從其中一路第0行開(kāi)始映射,每行64字節(jié),依此排列,因此是一行對(duì)應(yīng)多個(gè)地址的關(guān)系。對(duì)于32位的存儲(chǔ)地址,第6位代表一行中64字節(jié)的偏移,中間7位代表128行的偏移,高18位是 tag,tag是緩存的關(guān)鍵技術(shù),是地址的唯一標(biāo)志,此外還與Valid(是否有效)標(biāo)志、Dirty(該地址是否最近更新過(guò))標(biāo)志、LRU(最近最少使用)標(biāo)志在一起共同組成Cache控制模塊的關(guān)鍵參數(shù)。這些參數(shù)的確定過(guò)程比較復(fù)雜,且在不同情況下使用不同的參數(shù)。本文只分析CPU讀緩存命中和寫(xiě)緩存命中這2種最期望發(fā)生的情況,以及讀緩存缺失和寫(xiě)緩存缺失這2種不期望發(fā)生的情況。

圖3 L1D Cache結(jié)構(gòu)

(1)讀緩存命中。CPU取指令得到數(shù)據(jù)地址后,對(duì)此地址的32位經(jīng)過(guò)拆分,若能找到匹配的某一路的某一行,且此行的V位有效,則為讀命中。

(2)寫(xiě)緩存命中。CPU在得到將要寫(xiě)出去的數(shù)據(jù)的地址后,對(duì)其拆分,若匹配成功,則為寫(xiě)命中,再判斷若Dirty位為無(wú)效則直接寫(xiě)入數(shù)據(jù);反之,先將對(duì)應(yīng)的數(shù)據(jù)回寫(xiě)到下級(jí)存儲(chǔ)器中,再寫(xiě)入數(shù)據(jù)(此操作是為了維護(hù)緩存一致性)。

(3)讀緩存缺失。與(1)類似,此時(shí)發(fā)現(xiàn)匹配不正確,則從下級(jí)存儲(chǔ)器中取得數(shù)據(jù),然后再根據(jù)地址和LRU將數(shù)據(jù)寫(xiě)到緩存中,LRU為0表示0路是最近最少使用,則寫(xiě)到way0,然后CPU再?gòu)木彺嬷腥〉脭?shù)據(jù)送到寄存器。

(4)寫(xiě)緩存缺失。與(2)類似,但此時(shí)發(fā)現(xiàn)匹配不正確,則直接將數(shù)據(jù)送入W rite Buffer。當(dāng)發(fā)生讀缺失或W rite Buffer已滿等情況時(shí),立即先執(zhí)行將W rite Buffer的內(nèi)容清空并寫(xiě)到下級(jí)存儲(chǔ)器的操作(此操作也是為了維護(hù)緩存一致性)。

綜上所述,讀和寫(xiě)緩存缺失都會(huì)使效率降低。一般而言,理想情況是讀寫(xiě)皆命中,最不利的情況是:讀緩存缺失重新往緩存寫(xiě)入新數(shù)據(jù)時(shí),將其中沒(méi)有使用的數(shù)據(jù)沖刷掉,導(dǎo)致新的缺失[13]。

1.4 緩存一致性

在基于Cache的運(yùn)行機(jī)制下,如果所有的代碼和數(shù)據(jù)的存取都由CPU來(lái)完成,CPU始終能得到存儲(chǔ)器中最新的數(shù)據(jù),但當(dāng)有其它更改存儲(chǔ)器內(nèi)容的部件存在時(shí)(如不需要CPU干預(yù)的EDMA引擎),可能會(huì)出現(xiàn)由于Cache的存在而導(dǎo)致CPU或DM A不能得到最新數(shù)據(jù)的現(xiàn)象,也就是Cache一致性問(wèn)題,這個(gè)問(wèn)題多數(shù)情況會(huì)導(dǎo)致運(yùn)算結(jié)果的不正確。

在一個(gè)特定的時(shí)間范圍內(nèi),緩存和存儲(chǔ)器中內(nèi)容可能不一致,因?yàn)榫彺娴淖饔檬菍⒌退俅鎯?chǔ)器中的內(nèi)容自動(dòng)搬運(yùn)到高速緩存中反復(fù)使用,當(dāng)其它數(shù)據(jù)發(fā)生讀缺失時(shí),其空間才可能被占用,然后回寫(xiě)?;貙?xiě)之前,緩存中的內(nèi)容和存儲(chǔ)器中臨時(shí)不一致是正常的。

2 提高片上存儲(chǔ)器使用效率

2.1 提高RAM存儲(chǔ)器使用效率

有2種情況會(huì)影響對(duì)RAM訪問(wèn)的效率:①存儲(chǔ)體內(nèi)部阻塞,同時(shí)讀或?qū)懙牡刂吩谕粋€(gè)存儲(chǔ)體內(nèi)會(huì)引起CPU阻塞,需要同時(shí)訪問(wèn)的2個(gè)地址應(yīng)該位于不同的存儲(chǔ)體;②邊界沒(méi)有對(duì)齊,地址不對(duì)齊降低訪問(wèn)效率,根據(jù)被Cache的級(jí)別不同,對(duì)齊的字節(jié)不小于上一級(jí)緩存的行寬的整數(shù)倍,即數(shù)據(jù)處于L2D RAM中為64字節(jié),在DDR2中則為128字節(jié)。

數(shù)據(jù)應(yīng)優(yōu)先放在L1 RAM中,若空間不足再根據(jù)算法需要把某些數(shù)據(jù)放在L2 RAM中。

2.2 提高L1D Cache存儲(chǔ)器使用效率

(1)提高CPU讀緩存命中的方法。Cache控制器功能,即如果CPU訪問(wèn)某一行某一個(gè)字節(jié)(地址)讀缺失,則會(huì)按照映射規(guī)律,將下級(jí)存儲(chǔ)器中對(duì)應(yīng)的所有64個(gè)字節(jié)(地址)都Cache到此行,因此每一行只有第1個(gè)字節(jié)是讀缺失,此行后續(xù)字節(jié)皆可讀命中。

若數(shù)組A和B同時(shí)參與運(yùn)算,數(shù)組A占用的長(zhǎng)度小于16 k,要保證已經(jīng)Cache進(jìn)來(lái)的行不會(huì)被數(shù)組B占用,則數(shù)組B和A的長(zhǎng)度之和不要超過(guò)16 k。若數(shù)據(jù)長(zhǎng)度大于16 k,則應(yīng)盡量調(diào)整算法,使得數(shù)據(jù)分成若干個(gè)16 k以內(nèi)的邏輯塊,保證已經(jīng)Cache進(jìn)來(lái)的數(shù)據(jù)盡可能少地被替換掉。

(2)提高CPU寫(xiě)緩存命中的方法。CPU寫(xiě)緩存,即CPU需要將數(shù)據(jù)從寄存器寫(xiě)到Cache,發(fā)生寫(xiě)緩存命中的條件是:此地址已經(jīng)按照映射規(guī)則被Cache進(jìn)來(lái)了。由于L1D Cache是 readallocate的,有2種方法可以采用:①若此地址同時(shí)需要參與輸入運(yùn)算,即CPU需要先讀入地址,則采用(1)的方法;②若此地址不需要參與輸入運(yùn)算,即CPU僅需要向此地址寫(xiě)數(shù)據(jù),則需要采用TI提供的touch函數(shù)[4]。

2.3 維護(hù)緩存一致性

數(shù)據(jù)段除了硬件自動(dòng)維護(hù)緩存一致性以外,有4種典型的需要人為維護(hù)的情形。

(1)其它m aster更新DDR2中的內(nèi)容后,在CPU讀取此內(nèi)容之前,需要將 L1D Cache、L2 Cache中此內(nèi)容無(wú)效。

(2)CPU更新數(shù)據(jù)到DDR2后,更新的數(shù)據(jù)可能只是被保存在了L1D Cache、L2 Cache中,在其它master讀取DDR2的被更新的內(nèi)容之前,需要將Cache回寫(xiě)。

(3)在L2存儲(chǔ)器中開(kāi)辟了緩沖區(qū)并且其它master對(duì)數(shù)據(jù)不斷進(jìn)行更新后,在CPU讀取此數(shù)據(jù)之前,需要將L1D Cache中的對(duì)應(yīng)數(shù)據(jù)進(jìn)行使無(wú)效操作。

(4)在L2存儲(chǔ)器中開(kāi)辟了緩沖區(qū)并且CPU對(duì)數(shù)據(jù)進(jìn)行循環(huán)更新后,在其它m aster讀取此數(shù)據(jù)之前,需要將L1D Cache中的此內(nèi)容回寫(xiě)。

第(3)、(4)種的情形通常在編碼中比較常見(jiàn),即單幀數(shù)據(jù)不斷寫(xiě)到DDR2上,但是需要EDM A分塊搬運(yùn)到L2存儲(chǔ)器固定的乒乓結(jié)構(gòu)中。

3 H.264編碼存儲(chǔ)器優(yōu)化及實(shí)驗(yàn)驗(yàn)證

結(jié)合上述思想,本文采用H.264編碼器作為實(shí)驗(yàn),H.264數(shù)據(jù)分類見(jiàn)表1所列。

實(shí)驗(yàn)平臺(tái)為SPECTRUM DIGITAL公司的TMS 320DM 6437EVM板,時(shí)鐘周期600 MH z,具有128M DDR2空間、32 k L1P Cache/RAM、80 k L1D Cache/RAM、128 k L2 Cache/RAM。采用下列劃分方法,即32 k L1PCache、48 k L1D RAM、32 k L1D Cache、64 k L2 RAM、64 k L2 Cache。

表1 H.264數(shù)據(jù)分類表

為了充分發(fā)揮C64x+內(nèi)核的性能,本文充分利用L1 RAM和L2 RAM并且盡可能地提高L1D緩存命中率的方案,因此需要對(duì)關(guān)鍵數(shù)據(jù)在L1和L2 RAM中如何分布進(jìn)行實(shí)驗(yàn)。以下實(shí)驗(yàn)都是以第1個(gè)P幀作為代表測(cè)試CIF序列,P幀采用16×16分塊。共6種數(shù)據(jù),通過(guò)表2~表4所列的結(jié)果來(lái)確定最優(yōu)組合。

表2所列是對(duì)參考幀、重建幀、原始幀3種數(shù)據(jù)在L1、L2的不同組合進(jìn)行實(shí)驗(yàn),其條件是將預(yù)測(cè)數(shù)據(jù)、殘差數(shù)據(jù)、內(nèi)插數(shù)據(jù)置于L1,按照64字節(jié)對(duì)齊;表2中未列出的3種組合會(huì)導(dǎo)致L1或L2空間不夠,故予以排除。

表2 實(shí)驗(yàn)方案1

表3所列是對(duì)預(yù)測(cè)數(shù)據(jù)、殘差數(shù)據(jù)、內(nèi)插數(shù)據(jù)3種數(shù)據(jù)(數(shù)據(jù)均為64字節(jié)對(duì)齊)在L1、L2中的不同組合進(jìn)行實(shí)驗(yàn),是實(shí)驗(yàn)方案1的延續(xù),即在表2中耗費(fèi)時(shí)間最少的組合基礎(chǔ)上完成。

表3 實(shí)驗(yàn)方案2

表4所列在實(shí)驗(yàn)方案1、實(shí)驗(yàn)方案2所決定的最優(yōu)組合的基礎(chǔ)上,對(duì)6種數(shù)據(jù)在不同存儲(chǔ)器中邊界對(duì)齊進(jìn)行實(shí)驗(yàn)。

表4 邊界對(duì)齊不同時(shí)所耗費(fèi)的時(shí)間

對(duì)于原始幀數(shù)據(jù),其長(zhǎng)度小于16 k,將其放在L2 RAM中,可以使L1D Cache的緩存讀命中率很高。對(duì)于預(yù)測(cè)數(shù)據(jù)、殘差數(shù)據(jù)、內(nèi)插數(shù)據(jù)、重建幀數(shù)據(jù),放在L2中會(huì)存在L1D Cache寫(xiě)缺失的問(wèn)題,在L1RAM中會(huì)使CPU阻塞的可能性增加,實(shí)驗(yàn)表明后者更有利于效率的提升。對(duì)于參考幀、數(shù)據(jù)長(zhǎng)度大于16 k,放在L2中不利于提高L1D Cache緩存讀命中率。從中可以看出,最優(yōu)組合的結(jié)果與本文分析的一致。

表2中最差的一種組合同樣按照表3、表4的方法去實(shí)驗(yàn),最后可得到一種最差結(jié)果,2種結(jié)果對(duì)比見(jiàn)表5所列。

表5 最優(yōu)組合和最差組合耗費(fèi)時(shí)間比較

由表5可以看出,最差結(jié)果比最優(yōu)結(jié)果有不同程度的時(shí)間增加。另外,在最優(yōu)結(jié)果下foreman可以更為流暢的實(shí)現(xiàn)4路CIF,相當(dāng)于同等復(fù)雜度的一路D1,而后兩者由于較為復(fù)雜只能實(shí)現(xiàn)約2~3路CIF,這與本工程實(shí)際測(cè)試結(jié)果相吻合。

4 結(jié)束語(yǔ)

本文針對(duì)C64x+內(nèi)核的存儲(chǔ)器結(jié)構(gòu)進(jìn)行詳細(xì)分析,給出了提高性能的策略,并在本文所采用的片上資源分配方案下,針對(duì)H.264編碼器所涉及的數(shù)據(jù)特點(diǎn),提出了一種最優(yōu)分配方法并經(jīng)實(shí)驗(yàn)驗(yàn)證,對(duì)于其它領(lǐng)域應(yīng)用C64x+內(nèi)核進(jìn)行開(kāi)發(fā)有一定的參考價(jià)值。

[1] Telecommunication Standardization Sector of International Telecommunication Union(ITU-T).H.264:advanced video coding for generic audiovisual services[EB/OL].[2010-04-01].h ttp://www.itu.int/rec/dologin-pub.asp lang=e&id =T-REC-H.264-200503-S!!PDF-E&type=items.

[2] 竇建華,王 英,李長(zhǎng)凱,等.基于CPLD和DSP的線陣CCD數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2010,33(5):690-693.

[3] 李方慧,王 飛,何佩琨.TMS320 C 6000系列DSPs原理與應(yīng)用[M].第2版.北京:電子工業(yè)出版社,2003:315-326.

[4] Texas Instrumen ts Incorporated.TMS320C6000 DSP cache user'sguide(sp ru656)[EB/OL].[2010-04-01].h ttp://focus.ti.com/lit/ug/spru656a/spru656a.pdf.

[5] Texas Instruments Inco rporated.TMS320 C64x DSP tw olevel in ternalm emory reference guide(sp ru610)[EB/OL]. [2010-04-01].http://focus.ti.com/lit/ug/spru610c/spru610c.pdf.

[6] Texas Instrumen ts Inco rporated.TMS320C 64x/C64x+DSP CPU and istru ction set reference guide(spru732)[EB/ OL].[2010-04-01].http://focus.ti.com/lit/ug/spru732h/ spru732h.pdf.

[7] M ohammadnia M R,Taheri H,Motamedi SA.Im plementation and optim ization of real-time H.264/AVC main p rofile encoder on DM 648 DSP[C]//Proceedings of 2009 In ternational Conference on Signal Acquisition and Processing. New York:IEEE Press,2009:48-52.

[8] 李小紅,蔣建國(guó),齊美彬,等.基于DSP的H.264關(guān)鍵模塊技術(shù)的研究及實(shí)現(xiàn)[J].儀器儀表學(xué)報(bào),2006,27(10): 1330-1333.

[9] Zhuo L,W ang Q,F(xiàn)eng D D,et al.Optim ization and im plementation of H.264 encoder on DSP platform[C]//Proceeding of IEEE In ternational Conference on Multim edia and Expo.New York:IEEE Press,2007:232-235.

[10] 宋立鋒,戴青云.H.264實(shí)時(shí)編碼的指令Cache優(yōu)化[J].電子學(xué)報(bào),2008,36(8):1615-1619.

[11] Texas Instruments Incorporated.TMS320DM 643x DMP DSP subsystem reference guide(spru978)[EB/OL]. [2010-04-01].h ttp://focus.ti.com/lit/ug/sp ru978e/spru978e.pdf.

[12] Texas Instrum en ts Inco rporated.TMS320C64x+DSP megamodule reference guide(spru871)[EB/OL].[2010-04-01].http://www.ti.com/litv/pdf/spru871j.

[13] Texas Instrum ents Incorporated.TMS320C64x+DSP cache user's guide(spru862)[EB/OL].[2010-04-01].http://focus.ti.com/lit/ug/spru862b/spru862b.pdf.

猜你喜歡
存儲(chǔ)器內(nèi)核字節(jié)
萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
靜態(tài)隨機(jī)存儲(chǔ)器在軌自檢算法
No.10 “字節(jié)跳動(dòng)手機(jī)”要來(lái)了?
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
Linux內(nèi)核mmap保護(hù)機(jī)制研究
簡(jiǎn)談MC7字節(jié)碼
存儲(chǔ)器——安格爾(墨西哥)▲
基于Nand Flash的高速存儲(chǔ)器結(jié)構(gòu)設(shè)計(jì)
衡阳县| 宝应县| 雷山县| 辽宁省| 江源县| 襄垣县| 惠东县| 内丘县| 腾冲县| 石狮市| 惠水县| 宜兰市| 安溪县| 罗山县| 芦山县| 云林县| 清河县| 全椒县| 塔河县| 邢台市| 黄骅市| 贵南县| 毕节市| 马山县| 浠水县| 龙江县| 石景山区| 西乡县| 施甸县| 乌鲁木齐县| 卢湾区| 北海市| 九龙城区| 铜鼓县| 威信县| 山阴县| 南平市| 沙洋县| 洞头县| 晋城| 白水县|