祝龍婷,武繼剛,姜桂圓,王 超
(1.天津工業大學計算機科學與軟件學院,天津 300387;2.天津大學計算機科學與技術學院,天津 300072)
環網處理器陣列的容錯重構技術*
祝龍婷1,武繼剛1,姜桂圓2,王 超1
(1.天津工業大學計算機科學與軟件學院,天津 300387;2.天津大學計算機科學與技術學院,天津 300072)
高效的容錯技術對于提高多處理器系統的可靠性至關重要。環網(Torus)是連接多處理器陣列的重要網絡結構,而環網處理器陣列上的容錯重構技術目前尚屬空白。針對環網陣列的特殊連接方式,將環網陣列重構問題轉化為矛盾圖上求解最大獨立集問題。矛盾圖上的結點表示故障處理器的替換方案,而邊代表了不同替換方案之間的不可共存特性。主要是根據三種不同的冗余處理器分布方案,設計生成矛盾圖算法,求解最大獨立集算法,以及由獨立集生成邏輯處理器陣列算法,取得了令人滿意的結果。實驗結果表明,當陣列規模較小或故障率較低時,一行一列和十字型的冗余單元分布的重構能力較好;而隨著陣列規模或故障率的增大,三種冗余單元分布策略的重構成功率都隨之下降,但可通過增加冗余單元以及調整冗余分布來改善容錯效果。此外,從實驗結果中還可以看出,環網處理器陣列的容錯能力顯然優于網格(Mesh)處理器陣列。
環網處理器陣列;重構算法;容錯技術;矛盾圖
隨著超大規模集成電路VLSI(Very Large Scale Integration)和晶片規模集成電路WSI(Water Scale Integration)技術的快速發展,在單一芯片上集成成百上千的處理器單元PEs(Processing Elements)成為可能。然而,隨著VLSI集成密度的迅速增加,多處理器系統的可靠性成為越來越嚴峻的問題,因而高效的容錯技術對于提高多處理器系統的可靠性至關重要。總體來說,有兩類策略來進行容錯重構:冗余策略和降階策略。降階策略的特點是原陣列中不存在冗余單元,要盡量多地使用無故障單元來生成邏輯陣列。前人證明了基于降階策略的重構問題大都為NP完全問題,同時還提出了多種啟發式的解決算法及相關改進。一個稱為GCR(Greedy Column Rerouting)的算法[1]能夠在限定選路距離的條件下得到在選定行上重構問題的最大邏輯陣列。文獻[2]結合 GCR算法,提出一個有效的算法,通過減少邏輯陣列中的長連接來降低功耗。文獻[3,4]分別采用4-端口和6-端口的通道,研究了在行列同時選路的模式下重構,目的都是獲得盡可能大的邏輯陣列。此外,文獻[5,6]將陣列的重構問題從二維推廣到三維上,并分別提出了一種三維VLSI陣列上的啟發式重構算法和非回溯的重構算法。文獻[7]還使用多線程技術來加速重構算法速度。然而,只要陣列中存在故障,則得到的陣列的規模就一定會下降,而冗余策略的目標是保證最終邏輯陣列與原始陣列保持相同規模,進而保證計算性能不降低。冗余策略[8]中,物理陣列中預留了一定數量的冗余單元。當電路中某些處理單元不能正常工作時,使用預留的冗余單元來替換故障單元。文獻[9]為基于網格連接的處理器陣列提供了一個自修復的電路,使用提前集成的冗余單元來替換故障單元,但這是通過面積和功耗來減少時間上的延遲,需要在面積、功耗和時間延遲間尋求一個合理的平衡。在冗余單元重構中,還存在不同的開關機制,文獻[10]通過選擇多通道開關來提高陣列的重構率,但是單通道開關顯然占用硬件面積小且出現故障率低,故本文的研究與大多數以往研究一樣,都是基于單通道開關的。
總結國內外的研究現狀可知,陣列的容錯重構技術正處于日益發展的階段。盡管前人做出了很多這方面的研究成果,但目前的容錯重構技術大多基于網格(Mesh)處理器陣列,對于環網(Torus)處理器陣列的容錯重構方面的工作涉及較少,尤其是環網的冗余容錯技術尚屬空白。而近年來,環網互連網絡越來越受重視,基于環網提出的可重構系統、映射算法、片上網絡結構、路由算法等大量涌現[11,12],這是因為與網格 相比,環網 具 有更 高的 通信性能。因而,本文研究基于環網處理器陣列的容錯重構技術。本文將環網處理器陣列的容錯重構問題轉化為矛盾圖上的最大獨立集問題,并設計高效算法來實現矛盾圖構造、最大獨立集求解以及邏輯處理器陣列生成的過程。
2.1 物理陣列模型
令H表示原始物理陣列,H中含有故障單元,邏輯陣列是指重構后不含故障單元的陣列,稱為T。對于給定的一個m×n的物理陣列H,用Nf表示陣列中所含故障單元的個數,對于第i個故障單元,用ei表示,則row(ei)表示第i個故障單元的物理行坐標,col(ei)表示第i個故障單元的物理列坐標,1≤i≤Nf。
本文所討論的物理陣列包含處理單元、冗余單元、開關單元和連線。如圖1所示是一個規模為2× 3的環網處理器陣列,在其上一行和左一列集成了冗余單元。容錯重構的功能是通過向陣列中插入開關和連線實現的,開關和連線將每個處理單元連接在一起,從而使得陣列可以靈活地改變處理單元之間的連接方式。其中開關單元具有三種狀態,這些狀態可以根據陣列的需求進行切換。為了單獨考慮處理單元的重構情況,本文做出了如下假設:
(1)故障單元能夠轉化為連接單元,即連線;
(2)開關單元、連線及冗余單元均不含故障。

Figure 1 Reconfigurable architecture圖1 可重構結構
多數文獻都采用假設(1);而假設(2),因為開關單元和連線比處理單元有著更加簡單的硬件結構,而冗余單元個數比處理單元要少得多,故相對于處理單元而言,可認為三者均不含故障。
為了更好地理解后面的內容,在此處介紹幾個重要的概念。
(1)補償通道。如果一個故障單元在物理位置(x,y)處存在故障,它可能被一個位置在(x1,y1)的正常單元 代 替,而 (x1,y1)又 被 另 一 個 位 置在(x2,y2)的正常單元代替,如此替換下去,直到一個冗余單元被利用時,替換過程結束。這個按物理單元的次序(x,y),(x1,y1),(x2,y2),…的替換過程就定義了一個補償通道。
隨著冗余單元分布的不同,每個故障單元可能有著不同個數的補償通道。當冗余單元的分布如圖1所示時,每個故障單元在理論上有兩個可能的補償通道,其方向分別是向上、向左,用[x—,y]、[x,y—]來表示。類似地用[x+,y]、[x,y+]表示補償通道的方向向下、向右。

Figure 2 Replacement paths圖2 相鄰和非相鄰補償通道
(3)相交。包括兩種情況:
①兩個故障單元不在同一行或同一列上;
②兩個故障單元位于同一行或同一列上。
圖3a所示為兩個故障單元既非同一行,也非同一列,圖3b所示為兩個故障單元位于同一行。

Figure 3 Intersect圖3 相交
2.2 問題描述及以往研究工作
問題R 給定一個規模為m×n的環網連接的物理陣列H,H中還包含一定數量的冗余處理器單元。當H中部分處理器發生故障時,利用冗余處理器單元對故障處理器單元進行替換,得到一個m×n邏輯陣列。
為了構造有效的邏輯陣列,原始的m×n的物理陣列中所有故障單元都必須能夠被冗余單元所替換,并且替換補償通道間不能出現相交和相鄰的情況。如圖4所示,當故障單元u向右進行補償,故障單元v向左進行補償時,即為所定義的相鄰情況,此時需要使用雙通道進行布線才能實現(圓圈標記處),而本文所研究的是在單通道的情況下,因而不允許存在相鄰情況。由于環網在水平和垂直方向上都有環繞,因此補償通道上可以存在彎曲,但不可以有折線存在,即不允許某個故障單元被與其非同行或同列的冗余單元替換。此外,兩個故障單元不能出現爭用現象,即兩個故障單元位于同一行或同一列上,而這一行或一列上只有一個冗余單元用于替換故障單元。

Figure 4 Adjacent relation of replacement paths圖4 故障單元補償通道間的相鄰關系
容錯重構問題就是對于一個含有故障單元的物理陣列,為每一個故障處理器找到一個補償通道,使得所有的故障處理器都可以被非故障處理器替換。本文將容錯重構問題轉化為矛盾圖上求解獨立集的問題:首先利用包含故障單元的物理陣列構造矛盾圖,之后求解矛盾圖的最大獨立集,則可以得到對應的邏輯陣列。在本節將介紹如何將故障陣列轉換為對應的矛盾圖。給定物理陣列H,對H中任意一個故障單元ei(1≤i≤Nf),用Vi表示其所有可能的補償通道方向的集合,即,其中分別表示上、下、左、右四個補償通道方向。本文構造矛盾圖G(V,E)如下:V是頂點集,每個頂點表示某個故障單元的一個補償通道方向,E是邊集。對于u,v∈V,當且僅當u、v不可共存時,u和v之間有邊相連。
3.1 冗余單元呈上下兩行分布
如圖5a所示,物理陣列中包含上下兩行的冗余單元,則每個故障單元有兩個可能的補償通道,其方向分別是向上和向下。該陣列包含四個故障單元,故有八個補償通道供選擇,即所構造的矛盾圖將包含八個結點。

Figure 5 Physical arrays and the corresponding contradiction graphs圖5 物理陣列與對應的矛盾圖
本文提出的生成矛盾圖G(V,E)的算法GCG (Generating Contradiction Graph)過程如下:對于H中的每個故障單元ei,將兩個結點和加入到頂點集合V,其中和分別表示對故障單元ei采用向上補償和向下補償。矛盾圖的邊集E初始化為?,其構造過程如下:
(1)對于關聯同一故障單元的頂點之間添加邊,將這些邊加入邊集合E中;
(2)對于任意兩個故障單元,若它們的補償通道存在相鄰關系(此處僅考慮列相鄰),將相應頂點之間應添加的邊加入到E中;
(3)對于任意兩個故障單元,若一個故障單元的補償通道上存在另一個故障單元,則存在相交關系,將相應頂點之間應添加的邊加入到E中。因篇幅所限,GCG的偽代碼已省略。
現在我們分析GCG的時間復雜度。生成矛盾圖的算法GCG包含兩個步驟,步驟1是添加結點到矛盾圖中,顯然步驟1可在線性時間完成;步驟2是生成矛盾圖的邊集,主要包括構造邊集的三個過程:構造矛盾圖邊集的過程(1)可在O(Nf)時間內完成,Nf為故障單元個數;構造邊集的過程(2)、(3),需要檢查每個故障單元與其它故障單元之間的位置關系至多需要O(Nf·Nf)時間。因而,步驟2的時間復雜度上界為O(Nf·Nf)。綜上,算法GCG的時間復雜度為O()。
圖5a展示了將一個包含兩行冗余處理器的物理陣列轉換為矛盾圖的例子:首先,每個故障單元都有向上和向下兩個可能的補償通道方向,分別用兩個點表示,因而矛盾圖中有八個節點;然后按照邊的生成規則,對相互矛盾的兩個點之間添加邊相連,最終得到的矛盾圖如圖5a下方所示。需要說明的是,頂點6和頂點7違反了相交規則中的一個故障單元的補償通道上存在另一個故障單元,最后這兩個頂點都不可能出現在正確的重構中,故使用虛線連接。
3.2 冗余單元呈一行一列分布
如圖5b所示,物理陣列中包含一行一列的冗余單元,每個故障單元有四個可能的補償通道,其方向分別是向上、向下、向左和向右。該陣列包含四個故障單元,所構造的矛盾圖將包含16個結點。對應的矛盾圖如圖5b所示,上方為物理陣列,下方為對應的矛盾圖。
生成矛盾圖G(V,E)的過程如下:對于H中的每一個故障單元ei,將四個結點加入到頂點集合V,其中分別表示對故障單元ei采用向上補償、向下補償、向左補償、向右補償。矛盾圖的邊集E初始化為?,其構造過程如下:
(1)對于關聯同一故障單元的頂點之間添加邊,將這些邊加入邊集合E中;
(2)對于任意兩個故障單元,若它們的補償通道間存在相鄰關系(包括列相鄰和行相鄰),將相應的頂點之間應添加的邊加入到E中;
(3)對于任意兩個故障單元,若存在相交關系(此處包括:①一個故障單元比另一個故障單元行數大列數大;②一個故障單元的補償通道上存在另一個故障單元),將相應的頂點之間應添加的邊加入到E中;
(4)當兩個故障單元間存在爭用同一冗余單元的現象時,將相應的頂點之間應添加的邊加入到E中。
3.3 冗余單元呈十字型分布
如圖5c所示,物理陣列中包含十字型分布的冗余單元,該十字型的冗余單元將物理陣列分成了
四個區間,按逆時針方向,從左上依次記為一、二、三、四區間。圖5c上方所示的陣列包含四個故障單元,每個故障單元有四個可能的補償通道,其方向分別是向上、向下、向左和向右,所構造的矛盾圖將包含16個結點。生成的矛盾圖如圖5c下方所示。
生成矛盾圖G(V,E)的過程與一行一列的情況類似。考慮到區間的問題,邊的構造過程中的
(2)和(3)略有不同。具體變動如下,其中(2′)、(3′)分別對應于原步驟的(2)與(3):
(2′)對于任意兩個故障單元,若它們的補償通道間存在相鄰關系(包括列相鄰和行相鄰,同時要考慮兩個故障單元是否處于同一區間),將相應頂點之間應添加的邊加入到E中;
(3′)對于任意兩個故障單元:
①兩故障單元同區間時,與一行一列的相交情況一樣;
②兩故障單元不同區間時,按以下區間組合分別考慮:兩個故障單元分別在(一、二)區間或(三、四)區間;兩個故障單元分別在(一、四)區間或(二、三)區間;兩個故障單元在(一、三)區間;兩個故障單元在(二、四)區間,若存在相交關系,將相應頂點之間應添加的邊加入到E中。
3.4 求解矛盾圖的最大獨立集
由于最大獨立集問題是一個 NP完全問題,而蟻群算法是模擬螞蟻覓食來尋求解的一種啟發式算法,經常被用于求解組合優化這一類問題。故對于生成的矛盾圖,本文設計了最大最小蟻群算法MMAS(Max-Min Ant System)來求其最大獨立集,根據最大獨立集可以判斷該物理陣列是否能夠重構。MMAS是一個以迭代的方式進行尋找全局最優解的過程,迭代過程中包括定義啟發信息,設置狀態轉移規則和信息素更新策略。具體過程詳見文獻[13]。
本文提出的生成邏輯陣列的算法具體如下:首先,初始化邏輯陣列即為物理陣列。然后,以列為單位,按行號從小到大依次遍歷每個非冗余單元,若該單元為故障單元,根據它的補償通道方向判斷該單元將被哪個單元替換,即重構后該單元的邏輯下標;如果該單元為非故障單元,檢查該單元是否在列上用于替換了其它單元,若是,根據該單元所在補償通道的方向決定其重構后的邏輯下標,否則就直接輸出該單元的物理下標;如果該單元的邏輯下標與物理下標一致,再檢查其是否在行上用于替換了其它單元,若是,根據該單元所在補償通道的方向決定其重構后的邏輯下標,否則就直接輸出該單元的物理下標。
生成邏輯陣列的偽代碼Log Arr(Logical Array)如下:

現在我們分析該算法的時間復雜度。規模為m×n的處理器陣列上包含Nf個故障處理器。顯然,在第1行(初始化)所需要的時間為O(m·n),這是因為處理器規模為m×n。在第2~11行,分別判斷每個處理器,當其為故障處理器時,需要確定其補償通道的方向,所花費時間為O(Nf);當其為非故障處理器時,還要分別判斷其在列上、行上是否用于替換其它單元,該操作分別需要的時間為O(Nf·m)、O(Nf·n)。因而,第2~11行的時間復雜度為O(m·n·max{m,n}·Nf),因為需要遍歷的處理器個數為m×n。綜上,算法Log Arr的時間復雜度為O(m·n·max{m,n}·Nf)。
需要說明的是,當冗余單元呈上下兩行分布時,只需要考慮其在列上是否用于替換其它單元;而冗余單元呈十字型時,在計算其邏輯位置時,還要注意區間的考慮。
圖6展示了當冗余單元呈一行一列分布時,其生成邏輯陣列的例子。圖6a中單元r在u的補償通道上,故單元u被r所替換。陣列中開關狀態及連線如圖6b所示,由于本文將故障單元直接轉換成為連線,故在圖中表現出來是直接用連線將故障單元穿過,而對于未使用的冗余單元本文也通過使用連線直接穿過來處理。

Figure 6 One-row-one-column distribution圖6 冗余單元呈一行一列分布
本文編程使用的語言為C/C++,環境為Intel Core CPU 3.3 GHz 2 GB。為了客觀公正地評價三種冗余分布的性能,在初始陣列中使用隨機方法來產生故障單元,從而保證了實驗數據的隨機性。本文分別在特定的陣列規模和特定的故障率下,比較這三種冗余單元分布隨著故障率的增高和陣列規模的增大,陣列重構率是如何變化的。本文將陣列重構率定義為30次實驗中重構成功的概率,用Reliability表示;將三種冗余分布按上下兩行、一行一列及十字型依次定義為case 1、case 2、case 3。
表1展示的是固定陣列規模分別為16×16和32×32時,三種冗余單元分布在不同故障率下的重構率。從表1中可以看出,在陣列規模一定的情況下,隨著故障率的增加,三種冗余單元分布的重構率都有所下降。這是由于陣列規模不變,則冗余單元數量不變,而故障率增加使得故障單元數量增多,最終導致冗余單元無法滿足替換全部故障單元的情況。例如,當故障率從3%上升到4%時,在陣列規模為16×16和32×32的情況下,三種冗余單元分布的重構率都下降了,其中上下兩行的重構率下降最快,因為這種冗余分布的陣列只能在列上進行重構,故重構能力較差。

Table 1 Impact of fault density on reliability表1 故障率對重構成功率的影響
圖7是將故障率設為8%,針對Mesh和Torus的三種冗余單元分布,在不同陣列規模下得到的重構率。從圖7中可以看出,在故障率固定的情況下,隨著陣列規模的增大,對于Mesh和Torus網絡的三種冗余單元分布的重構能力都有所下降,尤其是上下兩行的冗余單元分布下降得更明顯。這是因為雖然陣列規模增大,使得冗余單元和故障單元同時都有所增大,但是由于冗余單元的分布情況使得故障單元數量比冗余單元數量增長得快,因而隨著陣列規模的增加,三種冗余單元的重構能力都有所下降。例如,當陣列規模從8×8上升到16× 16時,三種冗余單元分布的重構率都有所下降。同時,從圖7中可以看出,對于三種情況下的冗余分布,Torus網絡比Mesh網絡的重構成功率要高,這是因為Torus具有更靈活的連接方式,故比Mesh中的每個冗余單元有更多的機會選擇替換哪個故障單元。需要說明的是,當陣列規模為16×16時,在圖7a和圖7b中,Mesh網絡的重構率為0。
不同的冗余分布可以發現,當冗余單元數目為故障單元的兩倍時,一行一列和十字型的冗余單元分布的重構能力較好,使得陣列具有較高的穩定性。

Figure 7 Reliability comparison of Torus and Mesh圖7 Torus與Mesh重構率的對比圖
本文在環網處理器陣列上,率先提出了基于矛盾圖理論的容錯方法。通過將故障單元的補償通道方向表示成矛盾圖的頂點集合,從而將故障陣列能否重構的問題轉化為求解矛盾圖的最大獨立集問題,并對于能夠重構的陣列提出了一種生成邏輯陣列的算法。實驗結果表明,只要保證冗余單元數目為故障單元的兩倍,就可以使得一行一列和十字型的冗余單元分布得到較好的重構率,使得陣列具有較高的穩定性。
在本文中,當故障單元增多時,重構率較低,這是因為擺放的冗余單元數較少。在接下來的工作中,作者計劃研究更多的結點擺放方案,同時考慮按照不同的陣列規模設定不同的冗余方案,從而使得既不浪費大量的冗余單元,還能保證較好的重構率。
[1] Low C P,Leong H W.On the reconfiguration of degradable VLSI/WSI arrays[J].IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems,1997,16(10):1213-1221.
[2] Wu J G,Srikanthan T,Jiang G Y,et al.Constructing sub-arrays with short interconnects from degradable VLSI arrays [J].IEEE Transactions on Parallel and Distributed Systems,2014,25(4):929-938.
[3] Wu J G,Srikanthan T.Integrated row and column re-routing for reconfiguration of VLSI arrays with 4-port switches[J]. IEEE Transactions on Computers,2007,56(10):1387-1400.
[4] Wu J G,Srikanthan T,Schroder H.Efficient reconfigurable techniques for VLSI arrays with 6-port switches[J].IEEE Transactions on Very Large Scale Integration Systems,2005,13(8):976-979.
[5] Jiang G Y,Wu J G,Sun J Z.Efficient reconfiguration algorithms for communication-aware three-dimensional processor arrays[J].Parallel Computing,2013,39(9):490-503.
[6] Jiang G Y,Wu J G,Sun J Z.Non-backtracking reconfiguration algorithm for three-dimensional VLSI arrays[C]∥Proc of the 18th International Conference on Parallel and Distributed Systems,2012:362-367.
[7] Shen Y Z,Wu J G,Jiang G Y.Multithread reconfiguration algorithm for mesh-connected processor arrays[C]∥Proc of the 13th International Conference on Parallel and Distributed Computing,Applications and Technologies,2012:659-663.
[8] Zhang L.Fault-tolerant meshes with small degree[J].IEEE Transactions on Computers,2002,51(5):553-560.
[9] Takanami I,Horita T.A built-in circuit for self-repairing mesh-connected processor arrays by direct spare replacement [C]∥Proc of the 18th Pacific Rim International Symposium on Dependable Computing,2012:96-104.
[10] Horita T,Takanami I.Fault-tolerant processor arrays based on the 1.5-track switches with flexible spare distributions [J].IEEE Transactions on Computers,2000,49(6):542-552.
[11] Luo W,Dong X.An efficient adaptive deadlock-free routing algorithm for torus networks[J].IEEE Transactions on Parallel and Distributed Systems,2012,23(5):800-808.
[12] Ramanujam R S,Lin B.Randomized throughput-optimal oblivious routing for torus networks[J].IEEE Transactions on Computers,2013,62(3):561-574.
[13] Li Y M,Xul Z B.An ant colony optimization heuristic for solving maximum independent set problems[C]∥Proc of the 5th International Conference on Computational Intelligence and Multimedia Applications,2003:206-211.

祝龍婷(1990),女,安徽桐城人,碩士生,研究方向為高性能體系結構。E-mail:zlongting@gmail.com
ZHU Long-ting,born in 1990,MS candidate,her research interest includes high performance architecture.
Reconfiguration approaches for fault-tolerant torus-connected processor arrays
ZHU Long-ting1,WU Ji-gang1,JIANG Gui-yuan2,WANG Chao1
(1.School of Computer Science and Software Engineering,Tianjin Polytechnic University,Tianjin 300387;2.School of Computer Science and Technology,Tianjin University,Tianjin 300072,China)
High-efficient fault-tolerant techniques are essential for improving the reliability of multiprocessor systems.It is well known that torus is an important interconnection network for multiprocessor arrays,but no work has been reported on the faulty tolerance of torus-connected processor arrays.In our work,reconfiguring a torus-connected processor array is modeled to be a maximum independent set problem.The nodes on the contradiction graph represent alternatives of the fault processing elements (PEs),and the edge denotes that different alternatives cannot coexist.Three different distributions of redundant PEs are discussed,and three algorithms are proposed to construct contradiction graphs,solve maximum independent set,and generate logic arrays based on the produced maximum independent set. Simulation results show that,the cross distribution and one-row-one-column distribution perform well in reconfiguration for smaller arrays and smaller fault densities.In addition,the reconfiguration ability of the three proposed distribution patterns decreases as the fault density and array size increase,thus other spare distribution patterns should be investigated,or more spare PEs should be integrated.Moreover,torus arrays outperform mesh arrays in terms of fault-tolerance performance.
torus-connected processor array;reconfiguration algorithm;fault-tolerance;contradiction graph
TP303
A
10.3969/j.issn.1007-130X.2015.08.002
1007-130X(2015)08-1423-07
2014-08-11;
2014-10-11
國家自然科學基金資助項目(61173032);國家自然科學基金天元青年基金資助項目(11326211)
通信地址:300387天津市西青區賓水西道399號天津工業大學計算機科學與軟件學院
Address:School of Computer Science and Software Engineering,Tianjin Polytechnic University,399 Binshui Rd West,Xiqing District,
Tianjin 300387,P.R.China