專利名稱:基于線程構(gòu)造塊的超大規(guī)模矩陣多核并行克勞特分解方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種超大規(guī)模矩陣分解方法,尤其是涉及基于線程構(gòu)造塊的超大規(guī)模矩陣多核并行克勞特(Crout)分解方法。
背景技術(shù):
Intel 剛剛推廣的線程構(gòu)建模塊(Threading Building Blocks, TBB)是基于 C++ 的多線程并行編程模型,用于支持多核處理器的并行計(jì)算,具有成熟的數(shù)據(jù)結(jié)構(gòu),支持可擴(kuò)展的線程嵌套并行,支持可擴(kuò)展內(nèi)存分配、支持多種系統(tǒng)平臺以及多種編譯器支持。TBB的編程模式是使用模板作為并行迭代模型。這使得程序員很方便的處理同步、負(fù)載平衡、緩存優(yōu)化等問題,而能輕松地實(shí)現(xiàn)自動調(diào)度的并行程序,充分利用CPU的多核運(yùn)算能力及其他系統(tǒng)資源。TBB提升了程序的伸縮性及可擴(kuò)展性,并且完全支持嵌套的并行編程。程序員可以創(chuàng)建自己的并行組件,以構(gòu)建大型的并行程序。同時(shí)由于TBB是芯片制造商htel開發(fā)的,對于多核平臺有著更好的支持。TBB是一個(gè)開源的C++模板庫,它可將線程抽象成任務(wù),然后創(chuàng)建可靠、可移植且可擴(kuò)展的并行應(yīng)用程序。使用TBB編寫基于任務(wù)的并行應(yīng)用程序,有助于提高跨多核平臺上運(yùn)行的可擴(kuò)展軟件的開發(fā)效率。通本地線程和線程封裝器等其它線程化方法相比,TBB是執(zhí)行并行應(yīng)用程序最高效的方式,它能夠充分利用多核平臺的并行性能。TBB有以下三個(gè)顯著的優(yōu)點(diǎn)1)TBB對線程進(jìn)行抽象,將其提高到任務(wù)的高度,簡化了并行應(yīng)用程序的開發(fā)工作;2)基于TBB開發(fā)的應(yīng)用程序的性能可以隨著處理器內(nèi)核數(shù)量的增加而自動提升;3)TBB 能夠減少死鎖和資源競爭等常見線程錯誤,提供了一個(gè)跨平臺、可擴(kuò)展的并行解決方案。目前,在理論研究和實(shí)際應(yīng)用中,矩陣求逆都有廣泛的應(yīng)用,如求解線性方程組、 動態(tài)規(guī)劃、計(jì)算機(jī)圖形處理、控制工程等等。目前,矩陣求逆的方法主要有以下幾種(1)伴隨矩陣法;(2)初等變換法;(3)高斯-約當(dāng)消去法;(4)三角分解法。下面分別加以介紹。(1)伴隨矩陣法。利用矩陣的伴隨矩陣及矩陣的行列式來求得矩陣的逆矩陣。此方法一般適用于維數(shù)較小的矩陣(2)初等變換法。原矩陣和單位矩陣同時(shí)進(jìn)行初等行(或列)變換,當(dāng)原矩陣變成單位矩陣的時(shí)候,單位矩陣就變成了原矩陣的逆矩陣。(3)高斯-約當(dāng)消去法又稱高斯消去法、高斯消元法,實(shí)際上就是我們俗稱的加減消元法。數(shù)學(xué)上,高斯-約當(dāng)消去法,由高斯和約當(dāng)?shù)妹?,它是線性代數(shù)中的一個(gè)算法,用于求解線性方程組的解,求解矩陣的秩,以及求解可逆方矩陣的逆。當(dāng)用于一個(gè)矩陣時(shí),高斯消去產(chǎn)生“行消去梯形形式”。在消元的過程中,可能出現(xiàn)主元為零的情況,這時(shí)消元法無法進(jìn)行;即使主元不為零但很小時(shí),若用其作除數(shù),會導(dǎo)致其它元素的數(shù)量級嚴(yán)重增長和舍入誤差的擴(kuò)散,最后也使得計(jì)算解不可靠。為使高斯-約當(dāng)消去法具有較好的數(shù)值穩(wěn)定性,可以使用完全主元素消去法,但完全主元素消去法在選主元時(shí)要花費(fèi)較多機(jī)器時(shí)間,為此又考慮使用列主元消去法,但由于仍須選主元,計(jì)算量也較大。對于良態(tài)問題,高斯-約當(dāng)消去法也可能給出很壞的結(jié)果,這說明高斯-約當(dāng)消去法的算法很不穩(wěn)定。事實(shí)上,一般的矩陣都是病態(tài)矩陣, 采用高斯-約當(dāng)消去法不能得到滿意的結(jié)果。(4)三角分解法三角分解法是將方陣分解成一個(gè)上三角矩陣和一個(gè)下三角矩陣,該方法又被稱為 LU分解法。該分解方法的用途主要在簡化大矩陣的行列式值的計(jì)算,矩陣求逆運(yùn)算和求解聯(lián)立方程組。需要注意的是,這種分解方法所得到的上下三角形矩陣不是唯一的,還可找到若干對不同的上下三角矩陣對,它們的乘積也會得到原矩陣。矩陣可以進(jìn)行LU分解是有條件的,它要求其為方陣且它的所有順序主子式均不等于零。LU分解的主要優(yōu)點(diǎn)在于它能用公式表示費(fèi)時(shí)的消去步驟,只對系數(shù)矩陣進(jìn)行操作。LU分解的一個(gè)動機(jī)是它為矩陣求逆提供了一個(gè)有效的方式,也為評估方程組的狀態(tài)提供了一個(gè)方法。在上述的矩陣求逆方法中,伴隨矩陣法及初等變換法,易于理解,適合手動求解, 而對于大規(guī)模矩陣的求解,這兩種方法不太適合;高斯-約當(dāng)消去法及LU分解法便于程序的實(shí)現(xiàn),在大多數(shù)條件下,能夠適應(yīng)大規(guī)模矩陣的求解。但是,對于大規(guī)?;虺笠?guī)模矩陣, 高斯-約當(dāng)消去法及傳統(tǒng)的串行LU分解法的計(jì)算量往往過大,對計(jì)算機(jī)的性能要求較高, 算法的實(shí)時(shí)性不高,對于某些時(shí)間有嚴(yán)格要求的應(yīng)用不太適合。
發(fā)明內(nèi)容
本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種能夠大幅度提高矩陣LU分解的運(yùn)行效率、且能跨平臺、可擴(kuò)展、應(yīng)用廣泛的基于線程構(gòu)造塊的超大規(guī)模矩陣多核并行克勞特分解方法。本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn)基于線程構(gòu)造塊的超大規(guī)模矩陣多核并行克勞特分解方法,其特征在于,該分解方法包括以下步驟1)TBB并行計(jì)算平臺的安裝與環(huán)境設(shè)置;2)分析并抽取傳統(tǒng)Crout方法中可以并行計(jì)算的部分,利用TBB并行模板類改寫為符合TBB需要的規(guī)范類;幻設(shè)置問題初始值;4)進(jìn)入Crout方法的行循環(huán);5)調(diào)用parallelreduce并行模塊類,將每一行的最大主元保存在臨時(shí)向量中,同時(shí)計(jì)算并保存比例因子;6)進(jìn)入Crout方法的列循環(huán);7)確定新的主元及比例因子,修改TINY,每一行除以主元,判斷列循環(huán)是否結(jié)束,如果判斷為否則轉(zhuǎn)到步驟6),判斷行循環(huán)是否結(jié)束,如果判斷為否則轉(zhuǎn)到步驟4) ;8)運(yùn)行結(jié)束,完成超大規(guī)模矩陣分解,得到因部分主元法而改變了的行列排列次序。所述的步驟幻中的問題初始值包括矩陣的規(guī)模、矩陣的行數(shù)、列數(shù),輸入矩陣。與現(xiàn)有技術(shù)相比,本發(fā)明具有效率高、跨平臺、可擴(kuò)展、應(yīng)用廣泛等優(yōu)點(diǎn),本發(fā)明的并行Crout方法能夠大幅度提高矩陣LU分解的運(yùn)行效率;在此基礎(chǔ)上,通過本發(fā)明能夠大幅度提高矩陣求逆的效率,進(jìn)而驗(yàn)證了本發(fā)明的有效性與高效性。并行Crout方法的適用條件為如果矩陣的所有子式都是非零的,即可使用本發(fā)明來進(jìn)行LU分解,進(jìn)而可以求得該矩陣的逆或線性方程組的解等。當(dāng)矩陣規(guī)模達(dá)到百萬級別的時(shí)候,本發(fā)明比串行Crout 方法約提高了 13.7%,并比高斯-約當(dāng)消去法約提高了 77%。故本發(fā)明具有非常大的實(shí)用價(jià)值和廣泛的應(yīng)用前景。
圖1為本發(fā)明的滿足TBB的求最大主元類結(jié)構(gòu)圖;圖2為本發(fā)明的并行Crout方法流程圖;圖3為利用本發(fā)明的并行Crout方法求矩陣逆陣的流程圖;圖4為利用本發(fā)明求解矩陣逆陣的結(jié)果示意圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明。實(shí)施例TBB定義了任務(wù)的概念,在初始化TBB任務(wù)調(diào)度時(shí),由任務(wù)調(diào)度器對象task_ scheduler_init實(shí)現(xiàn)多任務(wù)的分配和并行計(jì)算,支持多線程的劃分。在調(diào)用并行計(jì)算的模板類時(shí),由模板類參數(shù)指定循環(huán)處理的數(shù)值范圍以及任務(wù)粒度參數(shù)。任務(wù)粒度參數(shù)決定了任務(wù)劃分的粒度,如果粒度太大,不能充分提高運(yùn)行效率;如果粒度太小,過度的并行化任務(wù)分配造成的開銷反而降低了運(yùn)行效率。在無法獲得合適任務(wù)粒度情況下可以使用TBB提供的自動分配函數(shù)aut0_partiti0ner ()幫助用戶設(shè)置合適的任務(wù)粒度參數(shù)。以parallelreduce設(shè)計(jì)的求解最大主元素模板類為例,詳細(xì)說明TBB設(shè)計(jì)并行最大主元素算法的實(shí)現(xiàn)過程,以供Crout方法調(diào)用。首先,基于parallelreduce模板將此過程封裝成類MaxElement,其作用是求解最大主元素。類MaxElement必須包括的接口為 operator和構(gòu)造函數(shù),具體形式如下class MaxElement {......void operator () (const blocked_range<size_t>&r){void operator () (const blocked_range<size_t>&r){for(size_t i = r. begin () ;i ! = r. end() ;++i) {......}}}Il分出一個(gè)支線,如果要訪問X,應(yīng)該保證原子操作MaxE 1 ement (MaxE 1 ement&x, tbb: split)my_a(χ. my_a), value_of_max(FLT_MIN), index_of_max(_1){......}H合并支線void join(const MaxElement&y){......}}H構(gòu)造函數(shù)MaxElement(DOUBLE^a)my_a(a),value_of_max(FLT_MIN),index_of_max(-1){}};其中operator接口是并行處理的主要部分,主要功能是進(jìn)行并行循環(huán)優(yōu)化,將循環(huán)的參數(shù)修改成TBB定義的blockecLrange模板類,能夠支持循環(huán)體內(nèi)任務(wù)的并行劃分。 在operator接口中,并行地執(zhí)行各小塊中的比較大小操作,并返回小塊中的最大值。當(dāng)TBB 決定分出一個(gè) blocked_range 時(shí),會調(diào)用 MaxElement (MaxElement&x,tbb sp 1 it),這個(gè)tbb: :split只是一個(gè)點(diǎn)位符,用于和拷貝構(gòu)造函數(shù)相區(qū)別。當(dāng)TBB合并blockecLrange 時(shí),會調(diào)用voidjoin (MaxElement&y),本例中合并就意味著把多個(gè)結(jié)果進(jìn)行運(yùn)算,將最終的結(jié)果保存并返回。構(gòu)造函數(shù)主要實(shí)現(xiàn)參數(shù)的初始化以及從整個(gè)任務(wù)空間中分離并構(gòu)建子任務(wù)。在完成并行模板類的編寫之后,初始化TBB任務(wù)調(diào)度器,調(diào)用上述編寫的并行模板,返回計(jì)算結(jié)果,最后結(jié)束TBB任務(wù)調(diào)度。利用TBB設(shè)計(jì)并行Crout方法的基本步驟如下步驟一 TBB并行計(jì)算平臺的安裝與環(huán)境設(shè)置;步驟二分析并抽取傳統(tǒng)Crout方法中可以并行計(jì)算的部分,利用TBB并行模板類改寫為符合TBB需要的規(guī)范類;步驟三設(shè)置問題初始值,即矩陣的規(guī)模、矩陣的行數(shù)、列數(shù),輸入矩陣等;步驟四進(jìn)入Crout方法的行循環(huán);步驟五調(diào)用parallelreduce并行模塊類,將每一行的最大主元保存在臨時(shí)向量中,同時(shí)計(jì)算并保存比例因子,因此采用TBB進(jìn)行并行設(shè)計(jì)對提高方法效率至關(guān)重要;步驟六進(jìn)入Crout方法的列循環(huán);步驟七確定新的主元及比例因子,修改TINY,每一行除以主元。若列循環(huán)未結(jié)束則轉(zhuǎn)到步驟六,判斷行循環(huán)是否結(jié)束,如果判斷為否則轉(zhuǎn)到步驟4);否則轉(zhuǎn)到步驟四;步驟八結(jié)束,得到因部分主元法而改變了的行列排列次序。為了驗(yàn)證并行Crout方法的正確性、有效性及評價(jià)本發(fā)明的實(shí)用性,下面通過本發(fā)明求解矩陣的逆來驗(yàn)證與評價(jià),其基本步驟如下步驟一 TBB并行計(jì)算平臺的安裝與環(huán)境設(shè)置;步驟二 讀入文件,其中包括輸入矩陣及相關(guān)參數(shù)設(shè)置;步驟三設(shè)置問題初始值,即矩陣的行數(shù)、列數(shù),輸入矩陣;步驟四利用本發(fā)明的并行Crout方法對輸入矩陣進(jìn)行LU分解;步驟五進(jìn)入矩陣的行循環(huán);步驟六進(jìn)入矩陣的列循環(huán);步驟七通過回代函數(shù)將矩陣按列求逆;步驟八增加列計(jì)數(shù),若列循環(huán)未結(jié)束則轉(zhuǎn)到步驟六;增加行計(jì)數(shù),若行循環(huán)未結(jié)束則轉(zhuǎn)到步驟五;步驟九結(jié)束,得到輸入矩陣的逆矩陣,寫入到文件。如圖1、2所示,本發(fā)明對傳統(tǒng)Crout分解方法進(jìn)行分析,把其中的關(guān)鍵步驟進(jìn)行并行化處理,并利用Intel公司的線程構(gòu)建塊來實(shí)現(xiàn)并行化。本發(fā)明充分利用了線程構(gòu)建塊的靈活性、跨平臺性及穩(wěn)定性,實(shí)現(xiàn)基于線程構(gòu)建塊的并行Crout分解方法,并將該方法應(yīng)用于矩陣求逆,經(jīng)過大量仿真實(shí)驗(yàn)顯示,本發(fā)明能夠大幅度提高傳統(tǒng)Crout分解方法的效率,進(jìn)而大幅度提高使用了本發(fā)明的矩陣求逆方法的效率。本發(fā)明由一個(gè)符合線程構(gòu)建塊規(guī)范的求最大主元類、最大主元調(diào)用類和利用了最大主元調(diào)用類的Crout分解方法組成,符合線程構(gòu)建塊規(guī)范的求最大主元類提供了具體的并行處理的部分、任務(wù)的線程分支劃分及合并等功能;最大主元類調(diào)用類提供了對求最大主元類的調(diào)用封裝,且提供了對其進(jìn)行線程劃分的粒度控制參數(shù);并行化的Crout分解方法利用了線程并行化的優(yōu)點(diǎn),充分利用了計(jì)算機(jī)的資源,提高了傳統(tǒng)Crout分解方法的效率。本發(fā)明可以運(yùn)行于多個(gè)系統(tǒng)平臺,如Windows,Linux, Unix等系統(tǒng)。圖1為本發(fā)明求最大主元類的結(jié)構(gòu)圖,以下對圖中的各部分的詳細(xì)描述在部分101中,實(shí)現(xiàn)operator接口,其是并行處理的主要部分,主要功能是進(jìn)行并行循環(huán)優(yōu)化,將循環(huán)的參數(shù)修改成TBB定義的blockecLrange模板類,能夠支持循環(huán)體內(nèi)任務(wù)的并行劃分;在部分102中,實(shí)現(xiàn)帶tbb:: split的分支創(chuàng)建函數(shù)接口,當(dāng)TBB決定分出一個(gè) blocked_range 時(shí),會調(diào)用 MaxElement (MaxElement&x, tbb: split),這個(gè) tbb: split 只是一個(gè)點(diǎn)位符,用于和拷貝構(gòu)造函數(shù)相區(qū)別;在部分103中,實(shí)現(xiàn)join合并函數(shù)接口,當(dāng)TBB合并blocked_range時(shí),會調(diào)用 voidjoin (MaxElement&y),本例中合并就意味著把多個(gè)結(jié)果進(jìn)行運(yùn)算,將最終的結(jié)果保存并返回;在部分104中,實(shí)現(xiàn)構(gòu)造函數(shù)接口,構(gòu)造函數(shù)主要實(shí)現(xiàn)參數(shù)的初始化以及從整個(gè)任務(wù)空間中分離并構(gòu)建子任務(wù)。圖2為本發(fā)明的并行Crout方法流程圖,下面對圖中的各步驟進(jìn)行詳細(xì)描述在步驟201中,讀入需要分解的矩陣,初始化行值i,列值j,內(nèi)含比例因子向量 w[i],極小數(shù)TINY,臨時(shí)變量等。然后執(zhí)行步驟202 ;在步驟202中,按行循環(huán),遞增行,求內(nèi)含比例因子。然后執(zhí)行步驟203 ;在步驟203中,調(diào)用并行的求最大主元類算法求解各行的主元素和比例因子。然后執(zhí)行步驟204 ;在步驟204中,按列循環(huán),遞增列。然后執(zhí)行步驟205 ;在步驟205中,計(jì)算新的候選主元素及交換比例因子,替換原有的候選主元素及交換比例因子。然后執(zhí)行步驟206;在步驟206中,判斷矩陣是否為奇異矩陣,如果是則賦TINY為零,否則TINY保持不變。然后執(zhí)行步驟207;在步驟207中,矩陣中的每一行除以主元素。如果按列循環(huán)未結(jié)束,則執(zhí)行步驟 204 ;如果按列循環(huán)結(jié)束但按行循環(huán)未結(jié)束,則執(zhí)行步驟202 ;如果按列循環(huán)與按行循環(huán)都已結(jié)束,則執(zhí)行步驟208;在步驟208中,結(jié)束函數(shù)輸出因部分主元法而改變了的行排列次序,可以根據(jù)此排列次序得到矩陣的LU分解矩陣。圖3為利用并行Crout方法求矩陣的逆陣的流程圖,下面對圖中的各步驟進(jìn)行詳細(xì)描述在步驟301中,通過對話框選擇需要的輸入文件,選擇的矩陣文件為TXT格式,數(shù)據(jù)結(jié)構(gòu)格式為第一行為矩陣的行數(shù)(row);第二行為矩陣的列數(shù)(col),在本應(yīng)用中行數(shù)等于列數(shù)(row = col = η),即這里的矩陣為η維方陣;第三行開始為矩陣的值。然后執(zhí)行步驟302 ;在步驟302中,根據(jù)讀入的矩陣維數(shù)讀取需要的數(shù)值并初始化相關(guān)變量及數(shù)據(jù)結(jié)構(gòu)。然后執(zhí)行步驟303;在步驟303中,利用本發(fā)明并行Crout方法對讀入的矩陣進(jìn)行分解。然后執(zhí)行步
7驟 304 ;在步驟304中,控制矩陣的行循環(huán)i,然后執(zhí)行步驟305 ;在步驟305中,控制矩陣的列循環(huán)j,然后執(zhí)行步驟306 ;在步驟306中,通過回代函數(shù)對計(jì)算的矩陣進(jìn)行處理。若i < η且j < n,則返回步驟305 ;若i < η且j > = n,則返回步驟304 ;若i > = η且j > = n,執(zhí)行步驟307 ;在步驟307中,結(jié)束矩陣求逆計(jì)算,輸出矩陣的逆及相關(guān)的計(jì)算參數(shù)方法的名稱、運(yùn)算時(shí)間、方法線程數(shù),方法子矩陣大小等。執(zhí)行步驟308 ;在步驟308中,將結(jié)果寫入到TXT文件中,供使用者進(jìn)一步分析。圖4中詳細(xì)比較了并行crout方法、串行crout方法、高斯-約當(dāng)消去法在求解矩陣時(shí)的效率。由參考線可以看出,當(dāng)矩陣維數(shù)大于等于256時(shí),并行crout方法的運(yùn)行時(shí)間優(yōu)于串行crout方法,更明顯優(yōu)于高斯-約當(dāng)消去法的運(yùn)行時(shí)間;并且隨著矩陣維數(shù)的增加,這種趨勢越明顯。當(dāng)矩陣規(guī)模達(dá)到百萬級別的時(shí)候,本發(fā)明比串行Crout方法約提高了 13.7%,并比高斯-約當(dāng)消去法約提高了 77%。即對于大規(guī)模或超大規(guī)模矩陣而言,并行 crout方法明顯優(yōu)于高斯-約當(dāng)消去法,也優(yōu)于串行crout方法。因此,本發(fā)明具有很高的實(shí)用價(jià)值與廣泛的應(yīng)用前景。
權(quán)利要求
1.基于線程構(gòu)造塊的超大規(guī)模矩陣多核并行克勞特分解方法,其特征在于,該分解方法包括以下步驟1)線程構(gòu)造塊(TBB)并行計(jì)算平臺的安裝與環(huán)境設(shè)置;2)分析并抽取傳統(tǒng)克勞特(Crout)方法中可以并行計(jì)算的部分,利用TBB并行模板類改寫為符合TBB需要的規(guī)范類;3)設(shè)置問題初始值;4)進(jìn)入Crout方法的行循環(huán);5)調(diào)用parallelreduce并行模塊類,將每一行的最大主元保存在臨時(shí)向量中,同時(shí)計(jì)算并保存比例因子;6)進(jìn)入Crout方法的列循環(huán);7)確定新的主元及比例因子,修改TINY,每一行除以主元,判斷列循環(huán)是否結(jié)束,如果判斷為否則轉(zhuǎn)到步驟6),判斷行循環(huán)是否結(jié)束,如果判斷為否則轉(zhuǎn)到步驟4);8)運(yùn)行結(jié)束,完成超大規(guī)模矩陣分解,得到因部分主元法而改變了的行列排列次序。
2.根據(jù)權(quán)利要求1所述的基于線程構(gòu)造塊的超大規(guī)模矩陣多核并行克勞特分解方法, 其特征在于,所述的步驟幻中的問題初始值包括矩陣的規(guī)模、矩陣的行數(shù)、列數(shù),輸入矩
全文摘要
本發(fā)明涉及基于線程構(gòu)造塊的超大規(guī)模矩陣多核并行克勞特分解方法,該分解方法包括以下步驟1)將傳統(tǒng)Crout方法中可以并行計(jì)算的部分改寫為符合TBB需要的規(guī)范類;2)設(shè)置問題初始值;3)進(jìn)入Crout方法的行循環(huán);4)調(diào)用parallel_reduce并行模塊類,將每一行的最大主元保存在臨時(shí)向量中,同時(shí)計(jì)算并保存比例因子;5)進(jìn)入Crout方法的列循環(huán);6)確定新的主元及比例因子,修改TINY,每一行除以主元;8)完成超大規(guī)模矩陣分解,得到因部分主元法而改變了的行列排列次序。與現(xiàn)有技術(shù)相比,本發(fā)明具有能夠大幅度提高矩陣LU分解的運(yùn)行效率、且能跨平臺、可擴(kuò)展、應(yīng)用廣泛等優(yōu)點(diǎn)。
文檔編號G06F9/44GK102486727SQ20101057185
公開日2012年6月6日 申請日期2010年12月3日 優(yōu)先權(quán)日2010年12月3日
發(fā)明者孫劍, 張麗巖, 李克平, 馬健 申請人:同濟(jì)大學(xué)