欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于優(yōu)化全局歸約處理的方法和系統(tǒng)的制作方法

文檔序號(hào):6458257閱讀:388來(lái)源:國(guó)知局
專(zhuān)利名稱:用于優(yōu)化全局歸約處理的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及并行計(jì)算,并且更特別地,涉及用于優(yōu)化在非2的 冪個(gè)進(jìn)程之間的大向量全局歸約操作以增強(qiáng)并行計(jì)算性能的方法和系統(tǒng)。
背景技術(shù)
在并行計(jì)算中,全局歸約(reduce)操作被廣泛用于并行應(yīng)用。 數(shù)據(jù)在一組進(jìn)程之間被選擇性地共享,以最小化進(jìn)程之間所交換的 通信。消息傳遞接口 (MPI)標(biāo)準(zhǔn)定義了用于歸約操作的若干匯集接 口 ,其中最著名的歸約操作是MPI—REDUCE和MPI—ALLREDUCE。 全局歸約操作可能是高開(kāi)銷(xiāo)的;因此,高效MPI—REDUCE和 MPI—ALLREDUCE是重要的。 一項(xiàng)長(zhǎng)期分析研究證明,并行應(yīng)用執(zhí) 行MPI一REDUCE和MPI—ALLREDUCE操作花費(fèi)的時(shí)間占該應(yīng)用在 所有MPI功能上花費(fèi)的時(shí)間的40%以上。全局歸約操作在MPI通信子(communicator)所定義的進(jìn)程群 組的所有成員(即,所有進(jìn)程)上共同執(zhí)行。為了本發(fā)明的目的, 將詳細(xì)描述使用最為廣泛的交換性歸約操作。在通信子群組中,每 個(gè)進(jìn)程具有相等長(zhǎng)度的數(shù)據(jù)輸入向量。全局歸約操作使用指定操作 來(lái)組合所有輸入向量。進(jìn)程交換數(shù)據(jù)并執(zhí)行局部歸約操作以得到部 分歸約結(jié)果。對(duì)部分歸約結(jié)果進(jìn)行交換和組合,直到產(chǎn)生完成歸約 結(jié)果。在MPI一REDUCE中,具有歸約操作的完成歸約結(jié)果的全向量 在已知為根的一個(gè)進(jìn)程處返回。在MPI_ALLREDUCE中,完成歸約 結(jié)果在通信子群組的每個(gè)進(jìn)程處返回。對(duì)于小消息MPI一REDUCE而言,最著名的算法是最小生成樹(shù) (MST)算法,其中MPI REDUCE的根是進(jìn)程MST的根。樹(shù)上的進(jìn)程首先接收包含來(lái)自其所有子進(jìn)程的向量的消息,繼而將所接收 的數(shù)據(jù)和其自己的輸入向量組合。該進(jìn)程繼而將結(jié)果向量發(fā)送至其父進(jìn)程。在MPI—ALLREDUCE中, 一個(gè)進(jìn)程被選作根。 一旦根接收 并組合了向量并且得到了最終結(jié)果,則它就將結(jié)果廣播至通信子的 群組的其它成員。如果MST是二叉樹(shù),則MST MPI—REDUCE算法 的代價(jià)可建摸如下<formula>formula see original document page 9</formula>其中a是每個(gè)消息的延遲卩是每個(gè)字節(jié)的通信代價(jià)Y是每個(gè)字節(jié)的局部歸約代價(jià)N是通信子的進(jìn)程數(shù)目;以及L是進(jìn)程對(duì)歸約操作的輸入向量的長(zhǎng)度。很明顯,MST算法對(duì)于大消息而言不是高效的,因?yàn)槊總€(gè)處理 器將不得不始終在全向量上執(zhí)行歸約操作,而沒(méi)有利用并行性。已 經(jīng)針對(duì)大消息MPI—REDUCE和MPI—ALLREDUCE操作開(kāi)發(fā)了更好 的算法。 一個(gè)這樣的算法是遞歸二分遞歸倍增(RHRD)算法。在用 于MPI—REDUCE的RHRD算法中,每個(gè)進(jìn)程執(zhí)行l(wèi)og(N)個(gè)步驟的計(jì) 算和通信。在步驟的計(jì)算階段之前是分配階段,在分配階段中進(jìn)程 與其它進(jìn)程交換數(shù)據(jù)(即,向量信息)。在也稱為預(yù)備階段的分配 階段的第一步驟中,進(jìn)程i與進(jìn)程j交換它們輸入向量的一半,其中 j=(iAmask)。符號(hào)A表示按位異或操作,"mask"等于1的二進(jìn)制表 示。如果KJ,則進(jìn)程j將其向量的第一半發(fā)送給進(jìn)程i并接收進(jìn)程i 的向量的第二半。進(jìn)程i組合兩個(gè)向量的第一半,并且進(jìn)程j組合兩 個(gè)向量的第二半。在第二步驟中,進(jìn)程i和進(jìn)程j交換它們從第一步驟得到的中間 歸約結(jié)果的 一 半,并且將接收的數(shù)據(jù)與沒(méi)有發(fā)送的 一 半進(jìn)行組合, 其中j=iAmask并且mask是將1的二進(jìn)制表示左移1位的結(jié)果。在步 驟k,進(jìn)程i和進(jìn)程j交換它們從步驟(k-1)得到的中間歸約結(jié)果的一半,并將接收的部分與沒(méi)有發(fā)送的一半進(jìn)行組合,其中j=iAmask 并且mask是將1的二進(jìn)制表示左移(k-l)位的結(jié)果。如果i<j,則 進(jìn)程i發(fā)送中間結(jié)果的第二半并接收第 一 半。該過(guò)程遞歸地繼續(xù),在總共log(N)個(gè)步驟的每個(gè)步驟,都對(duì)所交 換和組合的數(shù)據(jù)的大小進(jìn)行二分。最終,每個(gè)進(jìn)程都擁有結(jié)果向量 的1/N:進(jìn)程0擁有第一個(gè)1/N,進(jìn)程1擁有第二個(gè)1/N,進(jìn)程i擁 有第(i-l )個(gè)1/N,等等。在MPI—REDUCE中,根繼而執(zhí)行收集(gather) 操作,用以將完成歸約結(jié)果的其余部分從其它進(jìn)程處收集回來(lái)。向 量是通過(guò)傳遞消息在進(jìn)程之間交換的。很明顯,向量越大,消息就 越大,并且開(kāi)銷(xiāo)就越高,消息交換的潛在延遲就越大。在MPI_ALLREDUCE中,執(zhí)行的是全部收集(allgather)步驟 而不是收集步驟,在全部收集步驟中,每個(gè)進(jìn)程都從其它進(jìn)程收集 完成歸約結(jié)果。RHRD算法的代價(jià)可建摸為T(mén) = 2*log (N) *a + 2*(N-1)/N * L *|3 + (N-l)/N * L*y 。當(dāng)消息大小基于較大的向量長(zhǎng)度而較大時(shí),RHRD算法比MST 算法執(zhí)行地更好,因?yàn)榕c該算法中其它兩項(xiàng)的大小相比,延遲項(xiàng)"a" 很小并且基本上可以忽略。RHRD算法僅適用于"2的冪,,個(gè)進(jìn)程。研究已經(jīng)表明,歸約操 作在非2的冪個(gè)進(jìn)程上同樣廣泛應(yīng)用。對(duì)于非2的冪的N,個(gè)進(jìn)程, 現(xiàn)有技術(shù)解決方案與RHRD算法相比而言在操作開(kāi)始時(shí)執(zhí)行一個(gè)額 外的準(zhǔn)備步驟。另外,對(duì)于MPI—ALLREDUCE的情況,還要在才喿作 結(jié)束時(shí)執(zhí)行其它額外步驟。開(kāi)始步驟是將r個(gè)進(jìn)程從算法中排除,其 中r^N,-N, N是小于N,的最大的2的冪。前2"個(gè)進(jìn)程交換輸入向 量。在前2"個(gè)進(jìn)程中,具有偶數(shù)順序的進(jìn)程將其向量的第二半發(fā)送 給其右鄰居,并且具有奇數(shù)順序的進(jìn)程將其向量的第一半分發(fā)送給其左鄰居。 一旦向量信息的交換完成,這前24個(gè)進(jìn)程就執(zhí)行局部歸 約操作。那些具有奇數(shù)順序的進(jìn)程繼而將其局部歸約結(jié)果發(fā)送給其 左鄰居,并且不參與算法的其余部分。N個(gè)其它進(jìn)程遵循先前針對(duì)2 的冪個(gè)進(jìn)程描述的算法。在MPI—ALLREDUCE中,那些被第一步驟排除的進(jìn)程在最后步驟中從其左鄰居處接收最終結(jié)果。圖1示出了 7 (也就是說(shuō),非2的冪)個(gè)進(jìn)程上的 MPI—ALLREDUCE纟喿作的現(xiàn)有技術(shù)處理流程,假設(shè)大小為4的大向 量包含元素ABCD。部分歸約操作結(jié)果由元素和順序號(hào)(以下標(biāo)) 表示,例如A-B。—3表示進(jìn)程0、 1、 2和3的元素A-B的歸約結(jié)果。現(xiàn)有技術(shù)方法在非2的冪個(gè)進(jìn)程上的代價(jià)可建模為 對(duì)于MPI—REDUCE:T=(2+2*log(N))*a + (1+2*(N-1)/N)*L*(3 + (l/2+(N-l)/N)*L*y。 (1) 且對(duì)于MPI—ALLREDUCE:T=(3+2*log(N))* a + (2+2*(N-l)/N)*L*p + (l/2+(N-l)/N)*L *y (2)針對(duì)非2的冪個(gè)進(jìn)程的一個(gè)或多個(gè)額外步驟,將MPI—REDUCE 的帶寬需求提高了大于50%,并將MPI—ALLREDUCE的帶寬需求提 高了大于100%。很明顯,因此期望提供一種針對(duì)非2的冪個(gè)進(jìn)程執(zhí) 行大消息MPI—REDUCE/MPI—ALLREDUCE才乘作的改進(jìn)方法,這是 本發(fā)明的一個(gè)目的。本發(fā)明的另 一個(gè)目的是通過(guò)消除現(xiàn)有技術(shù)算法的準(zhǔn)備步驟中的 不必要的數(shù)據(jù)轉(zhuǎn)發(fā)來(lái)改進(jìn)大消息 MPI—REDUCE 和 MPI—ALLREDUCE操作的性能。本發(fā)明的又一個(gè)目的是通過(guò)重新配置部分歸約結(jié)果的流程,在 用于MPI一ALLREDUCE的最終步驟中完全使用互連帶寬。發(fā)明內(nèi)容上述及其它目的由優(yōu)化歸約操作的創(chuàng)造性系統(tǒng)和方法通過(guò)以下 實(shí)現(xiàn)將操作合并到有限數(shù)目的參與進(jìn)程中,繼而將結(jié)果分配回所 有進(jìn)程,從而優(yōu)化對(duì)于非2的冪個(gè)進(jìn)程的大消息歸約操作。該方法包括以下步驟將進(jìn)程群組劃分為兩個(gè)子群組SO和SI, 在SO中的進(jìn)程執(zhí)行配對(duì)交換和局部歸約操作,使得SO中的每個(gè)進(jìn) 程得到部分歸約結(jié)果的半向量;將部分歸約結(jié)果合并到剩余進(jìn)程的集合中,所述集合排除進(jìn)程的一個(gè)子集,使得僅具有部分結(jié)果的半向量的2的冪個(gè)進(jìn)程包括剩余進(jìn)程的集合;在該剩余進(jìn)程的集合執(zhí) 行連續(xù)的遞歸二分和遞歸倍增算法,直到該剩余進(jìn)程集合中的每個(gè) 進(jìn)程都具有完成結(jié)果的半向量;以及在每個(gè)進(jìn)程提供完整的完成結(jié)果。


下面將參考附圖對(duì)發(fā)明進(jìn)行更為詳細(xì)的描述,其中 圖1示出了使用現(xiàn)有技術(shù)的RHRD算法的針對(duì)7個(gè)進(jìn)程上的 MPI一ALLREDUCE操作來(lái)交換進(jìn)程之間的信息; 圖2是示出了本發(fā)明的流程圖;圖3A到3F示出了根據(jù)本發(fā)明的針對(duì)在2的冪的偶數(shù)個(gè)進(jìn)程(特 別是6個(gè)進(jìn)程)上的大消息全局歸約操作來(lái)交換進(jìn)程之間的信息; 以及圖4A到4F示出了根據(jù)本發(fā)明的針對(duì)非2的冪的奇數(shù)個(gè)進(jìn)程(特 別是7個(gè)進(jìn)程)上的大消息全局歸約操作來(lái)交換進(jìn)程之間的信息。
具體實(shí)施方式
根據(jù)本發(fā)明,在圖2的第一步驟201中,進(jìn)程群組被劃分為兩 個(gè)子群組,其中每個(gè)進(jìn)程都具有包含多個(gè)數(shù)據(jù)元素的輸入向量。子群組S0包含進(jìn)程0、 1..... 2*r-l,其中r=N,-N, N是小于N,的最大的2的冪。剩余的進(jìn)程屬于子群組Sl。從子群組劃分的方式中可 以知道如果r是偶數(shù),則Sl具有偶數(shù)個(gè)進(jìn)程。證明r=N,-N。如果r是偶數(shù),由于N是2的冪,因此N,一定 是偶數(shù)。Sl中的進(jìn)程數(shù)目是N,-2t,其一定是偶數(shù),因?yàn)镹,和2町 都是偶數(shù)。如果r是奇數(shù),則S1具有奇數(shù)個(gè)進(jìn)程。證明r=N,-N。如果r是奇數(shù),由于N是2的冪,因此N,也是奇數(shù)。因此,N,-2"—定是奇數(shù),因?yàn)镹,是奇數(shù)而2^是偶數(shù)。一旦建立了子群組,則在步驟202的準(zhǔn)備階段期間,如果i是偶 數(shù),則子群組S0的每個(gè)進(jìn)程i與進(jìn)程i+l交換其向量的一半,如果 i是奇數(shù),則進(jìn)程i與進(jìn)程i-l交換其向量的一半,其中進(jìn)程i的向量 的一半包括輸入向量的一半數(shù)據(jù)元素。在步驟204,在所有S0子群 組進(jìn)程處對(duì)半向量執(zhí)行局部歸約操作。然而,局部歸約操作的結(jié)果 沒(méi)有像現(xiàn)有技術(shù)的處理中那樣由奇數(shù)順序的進(jìn)程發(fā)送給偶數(shù)順序的 進(jìn)程。相反,此時(shí)在歸約操作中,進(jìn)程的子群組化指示每個(gè)進(jìn)程的計(jì) 算和通信行為。相應(yīng)地,部分歸約結(jié)果的半向量被合并到剩余進(jìn)程 的集合中,其中該集合包含X個(gè)進(jìn)程,X是2的整數(shù)冪,并且其中 該集合包括來(lái)自SO的多個(gè)進(jìn)程以及來(lái)自SO的至少一個(gè)進(jìn)程。如果r是偶數(shù),則S0的進(jìn)程可被進(jìn)一步組織到r/2個(gè)4進(jìn)程子 群組((4承i, 4*i+l, 4*i+2, 4*i+3) I i=0、 1、…、〃2-1}中。在4進(jìn)程子 群組的每一個(gè)中,進(jìn)程4*i+2將其局部歸約結(jié)果發(fā)送至4*i。進(jìn)程 4*i+3將其局部歸約結(jié)果發(fā)送至4H+1。進(jìn)程4*i和進(jìn)程4*i+l在步驟 205中對(duì)所接收的中間結(jié)果和其自己的局部結(jié)果執(zhí)行局部歸約操作, 并繼續(xù)到下一步驟。進(jìn)程4*i+2和進(jìn)程4*i+3(此后稱為非參與進(jìn)程) 被排除在全局歸約的接下來(lái)的步驟之外。在步驟206,如果i是偶數(shù), 則子群組SI的每個(gè)進(jìn)程i與進(jìn)程i+l交換其輸入向量的一半,如果 i是奇數(shù),則進(jìn)程i與進(jìn)程i-1交換其輸入向量的一半,并執(zhí)行局部 歸約操作。在該步驟之后,進(jìn)程的剩余子集(其中每個(gè)進(jìn)程具有部 分歸約結(jié)果的半向量)參與步驟208,執(zhí)行遞歸二分,直到每個(gè)進(jìn)程 得到第1/N個(gè)完成結(jié)果向量。接著在步驟209,剩余進(jìn)程集合執(zhí)行遞 歸倍增,使得對(duì)于MPI一ALLREDUCE而言,每個(gè)進(jìn)程得到完成歸約 結(jié)果的半向量,或者對(duì)于MPI一REDUCE來(lái)說(shuō),包括根在內(nèi)的兩個(gè)剩 余進(jìn)程中的每一個(gè)都得到完成結(jié)果的半向量。對(duì)于MPI—REDUCE, 可以在一個(gè)最終步驟中將完整的完成結(jié)果提供給一個(gè)進(jìn)程,在該步 驟中,其它剩余進(jìn)程將其半向量發(fā)送至才艮。對(duì)于MPI—ALLREDUCE,可以在后續(xù)步驟210和212中執(zhí)行半向量結(jié)果交換,以確保完成結(jié) 果在每個(gè)進(jìn)程處可用。在步驟210,屬于SO的剩余進(jìn)程將其半結(jié)果 發(fā)送至SO的非參與進(jìn)程進(jìn)程4H發(fā)送至進(jìn)程4*i+2,并且進(jìn)程4*i+l發(fā)送至進(jìn)程4"+3, i=0、 1.....2r/2岡l。 Sl的進(jìn)程i和i+1交換它們的結(jié)果,i=2*r、 2*(r+l)、…、N,-2。在步驟210之后,S0中的每個(gè) 進(jìn)程都具有完成結(jié)果的半向量,并且S1中的每個(gè)進(jìn)程都得到了完整 的完成結(jié)果。最后,在步驟212, S0中的進(jìn)程執(zhí)行類(lèi)似于Sl中的進(jìn) 程在步驟210中所執(zhí)行的交換,以得到完整的完成結(jié)果。圖3A至圖3F示出了執(zhí)行上文詳細(xì)描述的歸約操作的被稱為進(jìn) 程0到5的6個(gè)進(jìn)程。進(jìn)程0具有向量A-D。,進(jìn)程1具有向量A-Dn 進(jìn)程2具有向量A-D2,進(jìn)程3具有向量A-D3,進(jìn)程4具有向量A-D4, 進(jìn)程5具有向量A-Ds。進(jìn)程被劃分為子群組SO和Sl,其中S0具有進(jìn)程0、 1..... 2*r-l并且SI具有其余進(jìn)程。在這個(gè)示例中,SO包括進(jìn)程0、 1、 2和3,并且S1包括進(jìn)程4和5。在圖3A中,子群組SO的前4個(gè)進(jìn)程與其鄰居交換向量的一半, 并執(zhí)行局部歸約操作。子群組S1的進(jìn)程4和5在該步驟中空閑。在 圖3B中,進(jìn)程2將其局部歸約結(jié)果發(fā)送至進(jìn)程0,并且進(jìn)程3將其 局部歸約結(jié)果發(fā)送至進(jìn)程1。此時(shí),進(jìn)程4和5交換半向量并執(zhí)行局 部歸約操作。在接下來(lái)的幾個(gè)步驟中,進(jìn)程2和3將空閑,稱之為 "非參與進(jìn)程",并且進(jìn)程0、 1、 4和5是活動(dòng)的,稱之為"剩余 進(jìn)程"的子集。在圖3C,子群組S0的進(jìn)程0和1與子群組Sl的進(jìn)程4和5交 換向量的四分之一。特別地,進(jìn)程0與進(jìn)程4交換,因?yàn)槊總€(gè)進(jìn)程 都包含針對(duì)A-B的部分結(jié)果,而進(jìn)程1與進(jìn)程5交換,因?yàn)槊總€(gè)進(jìn) 程都包含針對(duì)C-D的部分結(jié)果。此后,進(jìn)程0、 1、 4和5一丸行局部 歸約操作,使得每個(gè)剩余進(jìn)程具有針對(duì)四分之一 向量的完成結(jié)果, 如圖3D所示。每個(gè)剩余進(jìn)程繼而與 一個(gè)其它剩余進(jìn)程交換完成的四 分之一向量結(jié)果,由此,如圖3E所示,進(jìn)程0和4將具有針對(duì)半向 量A-B的完成結(jié)果,并且進(jìn)程1和5將具有針對(duì)半向量C-D的完成結(jié)果。要指出的是,無(wú)需對(duì)進(jìn)程配對(duì)來(lái)交換四分之一向量結(jié)果;然而,鄰近緩沖之間的交換將帶來(lái)最小的開(kāi)銷(xiāo)。半向量結(jié)果從進(jìn)程0 發(fā)送至進(jìn)程2,從進(jìn)程1發(fā)送至進(jìn)程3,并且在進(jìn)程4和進(jìn)程5之間 交換,如圖3E中的箭頭所示。最后,在進(jìn)程0和1之間以及進(jìn)程2 和3之間交換半向量,使得所有進(jìn)程具有完成向量結(jié)果,如圖3F所示。如果r是奇數(shù),S0的前2*(>1)個(gè)進(jìn)程可被組織到(>-1)/2個(gè)4進(jìn) 程子群組中,而S0的最后兩個(gè)進(jìn)程2*r-2、 2*r-l可重新分組到具有 進(jìn)程2*r ( Sl的第一個(gè)進(jìn)程)的子集中。子群組SO中除了進(jìn)程2*r-2 和2*r-l之外的進(jìn)程的行為與r是偶數(shù)的情況相同。子群組SI中除 了進(jìn)程2*r之外的進(jìn)程的行為也與r是偶數(shù)的情況相同。子群組SI 的進(jìn)程2*r-l將其局部歸約結(jié)果發(fā)送至進(jìn)程2*r。在從進(jìn)程2*r-l處 接收的同時(shí),進(jìn)程2*r也將其輸入向量的第一半發(fā)送至進(jìn)程2*r-2。 進(jìn)程2*r-2和進(jìn)程2*r繼而執(zhí)行局部歸約操作,并且進(jìn)行到下一步驟。 進(jìn)程2*r-l像其它非參與進(jìn)程一樣被排除在其余全局歸約之外。再一次地,在該步驟之后,子集中的每個(gè)剩余進(jìn)程都具有半向 量部分歸約結(jié)果,并且參與步驟208的遞歸二分以及步驟209的遞 歸倍增,使得對(duì)于MPI_ALLREDUCE而言,每個(gè)進(jìn)程得到完成歸約 結(jié)果的半向量,或者對(duì)于MPI_REDUCE而言,包含根在內(nèi)的兩個(gè)剩 余進(jìn)程中的每一個(gè)都得到完成結(jié)果的半向量。對(duì)于MPI_REDUCE, 可以在一個(gè)最終步驟中將完整的完成結(jié)果提供給一個(gè)進(jìn)程,在該步 驟中,其它進(jìn)程將其半向量發(fā)送至根。對(duì)于MPI_ALLREDUCE,繼 而可以在后續(xù)步驟210和212中完成半向量結(jié)果的交換,以確保完 整的完成結(jié)果向量在每個(gè)進(jìn)程處可用。在步驟210,除了進(jìn)程24-2 之外,屬于SO的剩余進(jìn)程將其半結(jié)果發(fā)送至SO的非參與進(jìn)程進(jìn)程4"發(fā)送至進(jìn)程4*i+2,并且進(jìn)程4*i+l發(fā)送至4*i+3,i=0、 1、2.....r/2-2。 SI的進(jìn)程i和i+1交換其結(jié)果,i=2*r+l、 2*(r+l)+l.....N,-2。此外,進(jìn)程2*r-2將其結(jié)果發(fā)送至進(jìn)程2*r,而進(jìn)程2*r將其結(jié)果發(fā) 送至進(jìn)程2 -l。因此,在步驟210之后,S0中的每個(gè)進(jìn)程都具有完成結(jié)果的半向量;Sl中的每個(gè)進(jìn)程都得到完整的完成結(jié)果。S0中的 進(jìn)程繼而在步驟212執(zhí)行類(lèi)似于Sl中的進(jìn)程在步驟210中所執(zhí)行的 交換,以得到完成的最終結(jié)果。圖4A至4F示出了 r是奇數(shù)時(shí)的歸約操作。如圖4A所示,進(jìn)程 0到6中的每一個(gè)都具有其各自的A-D值。初始地,前6個(gè)進(jìn)程與 其各自的鄰居交換半向量,并執(zhí)行局部歸約操作。進(jìn)程6,即進(jìn)程2*r,在這個(gè)階段是空閑的。在圖4B中,執(zhí)行合并,并且重新對(duì)齊子群組以便進(jìn)一步處理, 由此,進(jìn)程0到3在子群組SO中,而進(jìn)程4-6(也即進(jìn)程2*r-2、 2*r-l 以及2*r )在其它子群組中。進(jìn)程2將其局部歸約結(jié)果發(fā)送至進(jìn)程0, 而進(jìn)程3將其局部歸約結(jié)果發(fā)送至進(jìn)程1。同時(shí),進(jìn)程5將其局部歸 約結(jié)果發(fā)送至進(jìn)程6,并且進(jìn)程6將其半向量(A-B6)發(fā)送至進(jìn)程4。 進(jìn)程0、 1、 4和6執(zhí)行局部歸約操作。此后,進(jìn)程2、 3和5是非參 與進(jìn)程,直到歸約纟喿作結(jié)束。包括如圖所示的進(jìn)程O(píng)、 1、 4和6在 內(nèi)的子集中的剩余進(jìn)程在圖4C交換四分之一向量并執(zhí)行局部歸約 操作,由此,如圖4D所示,每個(gè)剩余進(jìn)程都具有針對(duì)四分之一向量 (即,針對(duì)數(shù)據(jù)元素的四分之一)的完成結(jié)果。進(jìn)程0、 1、 4和6 繼而交換結(jié)果,使得每個(gè)進(jìn)程都將具有針對(duì)半向量的完成結(jié)果,如 圖4E所示。進(jìn)程0和1繼而將其結(jié)果分別發(fā)送至進(jìn)程2和3,同時(shí) 進(jìn)程4將其結(jié)果發(fā)送至進(jìn)程6,并且進(jìn)程6將其結(jié)果發(fā)送至進(jìn)程5。 如上文描述中所指出的,盡管可以通過(guò)最小化非鄰近進(jìn)程之間的交 換來(lái)優(yōu)化性能,但是無(wú)需為結(jié)果交換而進(jìn)行特定的進(jìn)程配對(duì)。此時(shí),進(jìn)程6具有針對(duì)全向量的完成結(jié)果,但是所有其它進(jìn)程 仍然只具有針對(duì)半向量的完成結(jié)果。對(duì)于MPI一ALLREDUCE,如圖 4F所示,進(jìn)程0和1、進(jìn)程2和3、以及進(jìn)程4和5交換半向量結(jié)果, 使得所有原始進(jìn)程都具有完成向量結(jié)果。本創(chuàng)造性方法的益處是雙重的。在現(xiàn)有技術(shù)的方法中,準(zhǔn)備步 驟的局部歸約結(jié)果由S0的奇數(shù)順序進(jìn)程發(fā)送至SO的偶數(shù)順序進(jìn)程, 該結(jié)果僅在接下來(lái)的步驟中被再次轉(zhuǎn)發(fā)。新的方法避免了那些不必要的數(shù)據(jù)轉(zhuǎn)發(fā)。此外,在準(zhǔn)備步驟之后的步驟中,so子群組的進(jìn)程 僅僅發(fā)送或接收半向量,而不是發(fā)送或接收全向量。當(dāng)前方法將降
低適配器的負(fù)擔(dān),并減輕CPU和存儲(chǔ)器處的串行化。此外,如上文 詳細(xì)描述的,N,個(gè)進(jìn)程上的針對(duì)MPI—ALLREDUCE的最后兩個(gè)步驟 降低了帶寬需求。
現(xiàn)有技術(shù)的方法4丸行編號(hào)為從0到2*log(N)+l的2+2氺log(N)個(gè) 步驟。在步驟2flog(N)之前,N/2個(gè)進(jìn)程中的每一個(gè)都具有最終完成 歸約結(jié)果的第一半,而其它N/2個(gè)進(jìn)程的每個(gè)具有最終完成歸約結(jié) 果的第二半。那些進(jìn)程可被稱為子群組S2和S3。其它r個(gè)進(jìn)程(子 群組S4)在前兩個(gè)步驟之后被排除,并且不具有任何部分結(jié)果。可 以在S2和S3的進(jìn)程之間形成1對(duì)1的對(duì)應(yīng)。通過(guò)現(xiàn)有才支術(shù)的方法, S2的進(jìn)程和其在S3中的對(duì)應(yīng)者在步驟2Hog(N)期間交換最終結(jié)果的 一半。在該步驟之后,S2和S3的N個(gè)進(jìn)程中的每一個(gè)都具有完整 的最終歸約結(jié)果。那!^個(gè)進(jìn)程中的前1"個(gè)繼而在步驟2*10§(>0+1中 將完整的最終結(jié)果發(fā)送至S4的進(jìn)程。
在圖3A至圖3F所示的給出的方法下,當(dāng)r是偶數(shù)時(shí),S3的前 r個(gè)進(jìn)程將其部分結(jié)果發(fā)送至S2的前r個(gè)進(jìn)程,而不是在步驟2*10§(^ 期間在S2和S3的進(jìn)程之間交換結(jié)果的一半。S2的r個(gè)接收者中的 每一個(gè)將數(shù)據(jù)發(fā)送至S4的一個(gè)不同的進(jìn)程,而不是發(fā)送至其在S3 中的對(duì)應(yīng)者。其它進(jìn)程與現(xiàn)有技術(shù)的方法中一樣工作。S4的每個(gè)進(jìn) 程和S3的前r個(gè)進(jìn)程中的每一個(gè)都只具有最終結(jié)果的一半,而所有 其它進(jìn)程具有完整的最終歸約結(jié)果。在最終步驟中,S4的進(jìn)程和S3 的前r個(gè)進(jìn)程交換該一半結(jié)果,以得到完整的最終結(jié)果。當(dāng)r是奇數(shù) 時(shí),如圖4A至圖4F所示,S2和S3的并集的前r-l個(gè)進(jìn)程將其結(jié)果 發(fā)送至S4的前r-l個(gè)進(jìn)程。S2和S3的第r個(gè)進(jìn)程將其結(jié)果發(fā)送至 S2和S3的第(r+l)個(gè)進(jìn)程,而該第(r+l)個(gè)進(jìn)程將其結(jié)果發(fā)送至S4的 最后進(jìn)程。在該步驟結(jié)束時(shí),S2和S3的第(r+l)個(gè)進(jìn)程具有最終結(jié) 果。在最后的步驟中,具有一半結(jié)果的進(jìn)程交換其結(jié)果,以得到完 整結(jié)果。這個(gè)修改將在整個(gè)MPI ALLREDUCE時(shí)間中引起另外的1/2*L*P歸約。
通過(guò)所給出的方法,N,個(gè)進(jìn)程上的MPI—REDUCE的代價(jià)是 T = (2+2*log(N))* a+(l/2+2*(N-l)/N)*L*p+(l/2+(N-l)/N)*L*y (3) 并且MPI_ALLREDUCE時(shí)間是
T = (3+2*log(N))* a+(l+2*(N-l)/N)*L*P+(l/2+(N-l)/N)*L*y (4)
與通過(guò)上文的公式(1 )和(2)建模的現(xiàn)有技術(shù)相比,對(duì)于 MPI—REDUCE和MPI—ALLREDUCE操作而言,帶寬需求分別下降 了超過(guò)16%和25%。
出于示意和解釋的目的,本發(fā)明是參考特定的實(shí)施方式和進(jìn)程 描述的,這并非是旨在作為窮盡性描述。對(duì)于本領(lǐng)域普通技術(shù)人員 而言,修改將是顯然的,并且應(yīng)被理解為處于所附權(quán)利要求書(shū)的精 斗申和范圍之內(nèi)。
權(quán)利要求
1.一種用于在多于一個(gè)的N’個(gè)進(jìn)程執(zhí)行大消息全局歸約操作的方法,其中每個(gè)進(jìn)程具有至少一個(gè)輸入數(shù)據(jù)向量,所述方法包括以下步驟將所述N’個(gè)進(jìn)程劃分為兩個(gè)子群組S0和S1,其中S0包括2*r個(gè)進(jìn)程并且S1包括N’-2*r個(gè)進(jìn)程,其中r=N’-N,N是小于N’的最大的2的冪;在S0中的進(jìn)程執(zhí)行配對(duì)數(shù)據(jù)交換和局部歸約操作,由此,S0中的r個(gè)進(jìn)程獲得第一半向量的部分歸約結(jié)果,并且S0中的其它r個(gè)進(jìn)程獲得第二半向量的部分歸約結(jié)果;將所述部分歸約結(jié)果的所述半向量合并到剩余進(jìn)程集合中,所述集合包括N個(gè)進(jìn)程;在所述剩余進(jìn)程集合執(zhí)行連續(xù)的遞歸二分和遞歸倍增,直到所述剩余進(jìn)程集合中的每個(gè)進(jìn)程具有完成歸約結(jié)果的半向量;以及將所述完成歸約結(jié)果的全向量提供給每個(gè)進(jìn)程。
2. 根據(jù)權(quán)利要求1所述的方法,其中r是偶整數(shù)。
3. 根據(jù)權(quán)利要求2所述的方法,其中所述合并包括以下步驟 將所述第一半向量的部分歸約結(jié)果從SO的r個(gè)發(fā)送進(jìn)程發(fā)送至SO的r個(gè)接收進(jìn)程,其中所述發(fā)送和接收進(jìn)程具有相同半向量的部 分歸約結(jié)果;在所述接收進(jìn)程執(zhí)行本地歸約操作,由此每個(gè)接收進(jìn)程具有部分歸約結(jié)果的半向量;以及在SI的進(jìn)程執(zhí)行配對(duì)交換和局部歸約操作,由此SI中的一半 進(jìn)程具有所述第一半向量的部分歸約結(jié)果,并且其余進(jìn)程具有所述第二半向量的部分歸約結(jié)果。
4. 根據(jù)權(quán)利要求3所述的方法,其中所述提供完成歸約結(jié)果的 全向量包括以下步驟將所述完成歸約結(jié)果的半向量從所述r個(gè)接收進(jìn)程發(fā)送至所述r個(gè)發(fā)送進(jìn)程;在SO的進(jìn)程執(zhí)行配對(duì)交換,由此SO中的每個(gè)進(jìn)程獲得所述完 成歸約結(jié)果的全向量;以及在SI的進(jìn)程執(zhí)行配對(duì)交換,由此SI中的每個(gè)進(jìn)程獲得所述完 成歸約結(jié)果的全向量。
5. 根據(jù)權(quán)利要求1所述的方法,其中r是奇整數(shù)。
6. 根據(jù)權(quán)利要求5所述的方法,其中所述合并包括以下步驟 將SO進(jìn)程劃分為r-1個(gè)發(fā)送進(jìn)程、r-1個(gè)接收進(jìn)程、以及2個(gè)其它進(jìn)程;將部分歸約結(jié)果的半向量從SO的r-1個(gè)發(fā)送進(jìn)程發(fā)送至SO的r-1 個(gè)接收進(jìn)程,所述發(fā)送和接收進(jìn)程具有相同半向量的部分歸約結(jié)果;在所述r-l個(gè)接收進(jìn)程執(zhí)行局部歸約操作,由此每個(gè)接收進(jìn)程具 有部分歸約結(jié)果的半向量;以及將所述部分歸約結(jié)果的半向量從SO的第一所述其它進(jìn)程發(fā)送至SI的進(jìn)程;將輸入數(shù)據(jù)的其它半向量從SI的所述進(jìn)程發(fā)送至SO的第二所 述其它進(jìn)程;在SI的所述進(jìn)程和SO的所述第二其它進(jìn)程執(zhí)行局部歸約操作, 由此,每個(gè)進(jìn)程具有半向量的部分歸約結(jié)果;以及在SI的其余進(jìn)程執(zhí)行配對(duì)交換和局部歸約操作,由此,Sl中的 其余進(jìn)程的一半具有第一半向量的部分歸約結(jié)果,并且S1中的另一 半進(jìn)程具有第二半向量的部分歸約結(jié)果。
7. 根據(jù)權(quán)利要求5所述的方法,其中,所述提供完成歸約結(jié)果 的全向量包括以下步驟將所述完成歸約結(jié)果的半向量從SO的所述r-1個(gè)接收進(jìn)程發(fā)送 至SO的所述r-1個(gè)發(fā)送進(jìn)程;將所述完成歸約結(jié)果的半向量從合并的SO的第二所述其它進(jìn)程 發(fā)送至合并的SI的所述進(jìn)程,由此所述S1的進(jìn)程具有完成歸約結(jié) 果的全向量;將完成歸約結(jié)果的其它半向量從Sl的所述進(jìn)程發(fā)送至SO的第 一所述其它進(jìn)程;在SO的進(jìn)程執(zhí)行配對(duì)交換,由此SO中的每個(gè)進(jìn)程獲得所述完 成歸約結(jié)果的全向量;以及在S1的其余進(jìn)程執(zhí)行配對(duì)交換,由此每個(gè)進(jìn)程獲得所述完成歸 約結(jié)果的全向量。
8. —種有形地包含機(jī)器可執(zhí)行指令程序的機(jī)器可讀的程序存儲(chǔ) 設(shè)備,用以執(zhí)行一種在多于一個(gè)的N,個(gè)進(jìn)程執(zhí)行大消息全局歸約操 作的方法,其中每個(gè)進(jìn)程都具有至少一個(gè)輸入數(shù)據(jù)向量,其中所述 方法包括以下步驟將所述N,個(gè)進(jìn)程劃分為兩個(gè)子群組SO和Sl,其中SO包括2*r 個(gè)進(jìn)程并且SI包括N,-2^個(gè)進(jìn)程,其中fN,-N, N是小于N,的最 大的2的冪;在SO中的進(jìn)程執(zhí)行配對(duì)數(shù)據(jù)交換和局部歸約操作,由此SO中 的r個(gè)進(jìn)程獲得第一半向量的部分歸約結(jié)果,并且SO中的其它r個(gè) 進(jìn)程獲得第二半向量的部分歸約結(jié)果;將所述部分歸約結(jié)果的所述半向量合并到剩余進(jìn)程集合中,所述 集合包括N個(gè)進(jìn)程;在所述剩余進(jìn)程集合執(zhí)行連續(xù)的遞歸二分和遞歸倍增,直到所述 剩余進(jìn)程集合中的每個(gè)進(jìn)程具有完成歸約結(jié)果的半向量;以及將所述完成歸約結(jié)果的全向量提供給每個(gè)進(jìn)程。
9. 根據(jù)權(quán)利要求8所述的程序存儲(chǔ)設(shè)備,其中r是偶整數(shù)。
10. 根據(jù)權(quán)利要求9所述的程序存儲(chǔ)設(shè)備,其中所述合并包括以 下步驟將所述第一半向量的部分歸約結(jié)果從SO的r個(gè)發(fā)送進(jìn)程發(fā)送至 SO的r個(gè)接收進(jìn)程,其中所述發(fā)送和接收進(jìn)程具有相同半向量的部 分歸約結(jié)果;在所述接收進(jìn)程執(zhí)行本地歸約操作,由此每個(gè)接收進(jìn)程具有部分 歸約結(jié)果的半向量;以及在Sl的進(jìn)程執(zhí)行配對(duì)交換和局部歸約操作,由此Sl中的一半進(jìn)程具有所述第 一半向量的部分歸約結(jié)果,并且其余進(jìn)程具有所述 第二半向量的部分歸約結(jié)果。
11. 根據(jù)權(quán)利要求10所述的程序存儲(chǔ)設(shè)備,其中所述提供完成 歸約結(jié)果的全向量包括以下步驟將所述完成歸約結(jié)果的半向量從所述r個(gè)接收進(jìn)程發(fā)送至所述r 個(gè)發(fā)送進(jìn)程;在SO的進(jìn)程執(zhí)行配對(duì)交換,由此SO中的每個(gè)進(jìn)程獲得所述完 成歸約結(jié)果的全向量;以及在Sl的進(jìn)程執(zhí)行配對(duì)交換,由此Sl中的每個(gè)進(jìn)程獲得所述完 成歸約結(jié)果的全向量。
12. 根據(jù)權(quán)利要求8所述的程序存儲(chǔ)設(shè)備,其中r是奇整數(shù)。
13. 根據(jù)權(quán)利要求12所述的程序存儲(chǔ)設(shè)備,其中所述合并包括 以下步驟將SO進(jìn)程劃分為r-1個(gè)發(fā)送進(jìn)程、r-1個(gè)接收進(jìn)程、以及2個(gè)其 它進(jìn)程;將部分歸約結(jié)果的半向量從SO的r-1個(gè)發(fā)送進(jìn)程發(fā)送至SO的r-1 個(gè)接收進(jìn)程,所述發(fā)送和接收進(jìn)程具有相同半向量的部分歸約結(jié)果;在所述r-l個(gè)接收進(jìn)程執(zhí)行局部歸約操作,由此每個(gè)接收進(jìn)程具 有部分歸約結(jié)果的半向量;以及將所述部分歸約結(jié)果的半向量從SO的第一所述其它進(jìn)程發(fā)送至Sl的進(jìn)程;將輸入數(shù)據(jù)的其它半向量從Sl的所述進(jìn)程發(fā)送至SO的第二所 述其它進(jìn)程;在Sl的所述進(jìn)程和SO的所述第二其它進(jìn)程執(zhí)行局部歸約操作, 由此每個(gè)進(jìn)程具有半向量的部分歸約結(jié)果;以及在Sl的其余進(jìn)程執(zhí)行配對(duì)交換和局部歸約操作,由此Sl中的 其余進(jìn)程的一半具有第一半向量的部分歸約結(jié)果,并且S1中的另一 半進(jìn)程具有第二半向量的部分歸約結(jié)果。
14. 根據(jù)權(quán)利要求13所述的程序存儲(chǔ)設(shè)備,其中所述提供完成 歸約結(jié)果的全向量包括以下步驟將所述完成歸約結(jié)果的半向量從SO的所述r-l個(gè)接收進(jìn)程發(fā)送 至SO的所述r-l個(gè)發(fā)送進(jìn)程;將所述完成歸約結(jié)果的半向量從合并的SO的第二所述其它進(jìn)程 發(fā)送至合并的SI的所述進(jìn)程,由此所述S1的進(jìn)程具有完成歸約結(jié) 果的全向量;將完成歸約結(jié)果的其它半向量從SI的所述進(jìn)程發(fā)送至SO的第 一所述其它進(jìn)程;在SO的進(jìn)程執(zhí)行配對(duì)交換,由此SO中的每個(gè)進(jìn)程獲得所述完 成歸約結(jié)果的全向量;以及在S1的其余進(jìn)程執(zhí)行配對(duì)交換,由此每個(gè)進(jìn)程獲得所述完成歸 約結(jié)果的全向量。
15. —種用于在多于一個(gè)的N,個(gè)原始進(jìn)程的并行計(jì)算中對(duì)數(shù)據(jù) 執(zhí)行歸約操作的方法,其中每個(gè)進(jìn)程都具有包含多個(gè)數(shù)據(jù)元素的輸 入向量,所述多個(gè)數(shù)據(jù)元素包括所述數(shù)據(jù)的1/N,,所述方法包括以 下步驟將原始進(jìn)程劃分為子群組SO和Sl,其中SO包括進(jìn)程O(píng)到2*r-l, 并且子群組SI包括進(jìn)程2*r到N,-l,其中r=N,-N并且N是小于或 等于N,的最大的2的冪;在子群組SO中的鄰居進(jìn)程配對(duì)之間交換包括針對(duì)每個(gè)處理器的 輸入向量的數(shù)據(jù)元素的一半的半向量,并對(duì)所有SO子群組進(jìn)程執(zhí)行 局部歸約操作,以產(chǎn)生第一中間結(jié)果;為SI中的每個(gè)進(jìn)程提供半向量,并對(duì)所有SI子群組進(jìn)程執(zhí)行 局部歸約操作,以產(chǎn)生第二中間結(jié)果;將所述第 一和第二中間結(jié)果合并到進(jìn)程子集中,其中所述子集等 于數(shù)據(jù)元素的數(shù)目;在所述進(jìn)程子集執(zhí)行局部歸約操作,以產(chǎn)生針對(duì)所述數(shù)據(jù)元素的 每個(gè)四分之一的完成結(jié)果;在所述進(jìn)程子集中的剩余進(jìn)程的配對(duì)之間交換針對(duì)所述數(shù)據(jù)元 素的每個(gè)四分之一 的完成結(jié)果,并在每個(gè)剩余進(jìn)程執(zhí)行局部歸約操作,以產(chǎn)生針對(duì)所述數(shù)據(jù)元素的每一半的完成結(jié)杲;以及所述子集中的每個(gè)所述進(jìn)程將針對(duì)所述數(shù)據(jù)元素的每一 半的完 成結(jié)果發(fā)送至至少一個(gè)其它進(jìn)程,以將針對(duì)所有數(shù)據(jù)元素的完成結(jié) 果提供給至少 一 個(gè)原始進(jìn)程。
16. —種有形地包含機(jī)器可執(zhí)行指令程序的機(jī)器可讀的程序存 儲(chǔ)設(shè)備,用以執(zhí)行一種用于在多于一個(gè)的N,個(gè)原始進(jìn)程的并行計(jì)算 中對(duì)數(shù)據(jù)執(zhí)行歸約操作的方法,其中每個(gè)進(jìn)程都具有包含多個(gè)數(shù)據(jù) 元素的輸入向量,所述多個(gè)數(shù)據(jù)元素包括所述數(shù)據(jù)的1/N,,所述方 法包括以下步驟將原始進(jìn)程劃分為子群組S0和Sl,其中SO包括進(jìn)程0到2*r-l, 并且子群組S1包括進(jìn)程2*r到N,-l,其中^N,-N并且N是小于或 等于N,的最大的2的冪;在子群組SO中的鄰居進(jìn)程配對(duì)之間交換包括針對(duì)每個(gè)處理器的 輸入向量的數(shù)據(jù)元素的一半的半向量,并對(duì)所有SO子群組進(jìn)程執(zhí)行 局部歸約操作,以產(chǎn)生第一中間結(jié)果;為SI中的每個(gè)進(jìn)程提供半向量,并對(duì)所有SI子群組進(jìn)程執(zhí)行 局部歸約操作,以產(chǎn)生第二中間結(jié)果;將所述第一和第二中間結(jié)果合并到進(jìn)程子集中,其中所述子集等 于數(shù)據(jù)元素的數(shù)目;在所述進(jìn)程子集執(zhí)行局部歸約操作,以產(chǎn)生針對(duì)所述數(shù)據(jù)元素的 每個(gè)四分之一的完成結(jié)果;在所述進(jìn)程子集中的剩余進(jìn)程的配對(duì)之間交換針對(duì)所述數(shù)據(jù)元 素的每個(gè)四分之一的完成結(jié)果,并在每個(gè)剩余進(jìn)程執(zhí)行局部歸約操 作,以產(chǎn)生針對(duì)所述數(shù)據(jù)元素的每一半的完成結(jié)果;以及所述子集中的每個(gè)所述進(jìn)程將針對(duì)所述數(shù)據(jù)元素的每 一 半的完 成結(jié)果發(fā)送至至少 一 個(gè)其它進(jìn)程,以將針對(duì)所有數(shù)據(jù)元素的完成結(jié) 果提供給至少 一 個(gè)原始進(jìn)程。
全文摘要
一種優(yōu)化歸約操作的系統(tǒng)和方法,所述系統(tǒng)和方法通過(guò)以下來(lái)優(yōu)化歸約操作將操作合并到有限數(shù)目的參與進(jìn)程中,繼而將結(jié)果分配回所有進(jìn)程,從而優(yōu)化非2的冪個(gè)進(jìn)程上的大消息全局歸約操作。該方法將進(jìn)程群組劃分為子群組,在一些進(jìn)程執(zhí)行配對(duì)交換和局部歸約操作以獲得部分歸約結(jié)果的半向量,將部分歸約結(jié)果合并到剩余進(jìn)程集合中,在剩余進(jìn)程集合執(zhí)行連續(xù)的遞歸二分和遞歸倍增,直到剩余進(jìn)程集合中的每個(gè)進(jìn)程都具有完成結(jié)果的半向量,并在每個(gè)進(jìn)程提供完整的完成結(jié)果。
文檔編號(hào)G06F9/46GK101236511SQ20081000902
公開(kāi)日2008年8月6日 申請(qǐng)日期2008年1月30日 優(yōu)先權(quán)日2007年1月31日
發(fā)明者彬 賈 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
象州县| 安康市| 明水县| 云安县| 江口县| 宜州市| 盱眙县| 青浦区| 新干县| 广水市| 修文县| 天长市| 含山县| 文安县| 盐源县| 墨竹工卡县| 涪陵区| 永康市| 中宁县| 萨迦县| 增城市| 香河县| 阿勒泰市| 海口市| 治多县| 岢岚县| 寻乌县| 霍城县| 历史| 凤山县| 东丽区| 关岭| 习水县| 广宗县| 三原县| 弥渡县| 庆阳市| 长白| 镇宁| 宣恩县| 股票|