【摘 要】抽象機是軟件程序編譯器中所常用的部件,對于處理器性能的提升有著重要的作用。本文將從抽象機的設(shè)計出發(fā),綜合分析Java微處理器結(jié)構(gòu)設(shè)計和指令流水線技術(shù)的工作原理,對抽象機在Java微處理器中的應(yīng)用進行合理的設(shè)計與改進。對性能進行相應(yīng)的仿真測試,使其使用過程等進行一定的模擬和驗證,通過一系列的綜合應(yīng)用抽象機來提高Java微處理器的使用性能。
【關(guān)鍵詞】抽象機 Java微處理器 指令流水線技術(shù) 仿真測試
【Abstract】Abstract machine is a commonly used part of the software programming,which palys an important role in improving the performance of processors.This paper will analyze the structure of Java microprocessors and the working principle of the instruction pipeline based on the design of the abstract machine.After these measures,the performance of the Java microprocessors will be emhanced.Besides,this paper will test the function through a series of simulation experiment which is confirmed the performance of the Java microprocessors is improved.
【Key words】Abstract machine Java processors Instruction pipelining simulation test
一、引言
一般而言,微處理器使用指令流水線的技術(shù)來實現(xiàn)對其使用性能的提升,我國自主開發(fā)的一些RISC處理器等也采用了指令流水線技術(shù)。這種流水線技術(shù)能夠?qū)崿F(xiàn)相關(guān)指令的重復(fù)執(zhí)行,從而可以提高微處理器的使用性能。但是在實際的使用中,由于微處理器中的控制相關(guān)、數(shù)據(jù)相關(guān)及資源相關(guān)問題的存在,使得流水線出現(xiàn)的斷流現(xiàn)象影響到微處理器的使用性能。隨著科學技術(shù)的發(fā)展,微處理器的相關(guān)技術(shù)也得到了一定的改進,指令級并行技術(shù)在微處理器中得到了較多的應(yīng)用,它在很大程度上超越了標量執(zhí)行、亂序執(zhí)行等方法,能夠?qū)崿F(xiàn)多條流水線并行執(zhí)行,同時完成多條指令的處理,極大的提高了微處理器的工作效率。
在超標量執(zhí)行允許程序的模塊中,它附近的多條指令是在一個相同的流水段中進行處理的,這樣一種方式能夠?qū)崿F(xiàn)兩條以上指令的并行執(zhí)行,而這僅限于它們按程序順序依次連續(xù)出現(xiàn)的情況。亂序執(zhí)行則允許指令穿越其它指令進入到另外的指令處理階段,使指令能夠以一種與原來的程序順序有所差異的程序來進行處理。而預(yù)測執(zhí)行程序則是以減少程序順序上的限制來增加其可用的并發(fā)性。這些處理方式,都能夠以比較任意的方式來處理一些指令,并且保證其程序外觀上的順序性。超標量執(zhí)行技術(shù)的實現(xiàn)需要有額外的硬件來支持,通過一些并行譯碼器的應(yīng)用、足夠多的功能執(zhí)行單元以及寄存器讀寫口、內(nèi)存器口等外部元件來輔助其功能的實現(xiàn),此外還需要有完善的路由網(wǎng)絡(luò)來完成數(shù)據(jù)的傳遞。亂序執(zhí)行則在某種程度上相對的減弱了執(zhí)行順序帶來的約束,從而使得程序并發(fā)能力得以增強,其程序執(zhí)行中仍需要一些額外工作來提供保證。預(yù)測執(zhí)行能夠有效的克服一些指令轉(zhuǎn)移所帶來的影響從而實現(xiàn)更大的并發(fā)性。從上述三種執(zhí)行的分析,我們可以看到與指令相關(guān)問題的解決,對于指令并行能力的提升有著重要的影響。
本文中的Java微處理器中所使用的是堆棧結(jié)構(gòu),其產(chǎn)生的指令相關(guān)對于處理器性能有一定的影響。本文將從Java微處理器的理論框架出發(fā),在當前一些基本流水線的應(yīng)用分析基礎(chǔ)上加入硬件抽象機的作用,使其在實踐中具有現(xiàn)實可操作性和應(yīng)用的現(xiàn)實性。同時,以Java微處理器的邏輯結(jié)構(gòu)的分析等來解決流水線處理器中指令相關(guān)問題,充分發(fā)揮Java程序自身的內(nèi)部指令級的并行能力,實現(xiàn)了Java微處理器性能的提升。
二、以硬件抽象機為基礎(chǔ)的處理器設(shè)計
抽象機一般是應(yīng)用在軟件程序的編譯器中的。它起到一種高級語言與真實的硬件處理器溝通橋梁的作用,并能夠有效的減少一些與實際硬件處理器實現(xiàn)相關(guān)的細節(jié)。將抽象機應(yīng)用到位處理器中,從指令提取開始,然后進行指令的標記以及抽象機的執(zhí)行,再進行指令的調(diào)度及其執(zhí)行,最后進行指令的結(jié)果的寫回。這樣一種框架結(jié)構(gòu)設(shè)計,使一些具有標簽的指令技術(shù)得到應(yīng)用,是程序中的一些指令級并行被挖掘出來并得以應(yīng)用。(工作流程如圖1所示)
硬件實現(xiàn)中的抽象機常在流水線的指令譯碼以及分析的階段中,它所能實現(xiàn)的是帶有標簽指令的一種模式執(zhí)行。就傳統(tǒng)的處理器而言,其運行過程中,數(shù)據(jù)是先被輸入到流水線中的,然后以流水線執(zhí)行的形式產(chǎn)生出輸出結(jié)果,該種結(jié)果以具體數(shù)值的形式體現(xiàn)出來,之后再被寫回到相應(yīng)的寄存器或者是內(nèi)存中。硬件抽象機中所使用的是一種標簽執(zhí)行,不使用具體的數(shù)據(jù)。標簽執(zhí)行的環(huán)境下,當標簽從抽象機或者是堆棧中被抹去之后,只能將模擬執(zhí)行中新產(chǎn)生的標簽再放回到抽象機中時才可以再次工作。這樣一種模擬執(zhí)行的方式與流水線執(zhí)行有一些類似,但是這一過程中沒有真實數(shù)據(jù)的參與,因此這一過程被稱為一種虛擬的執(zhí)行。在虛擬執(zhí)行的過程中,通過對標簽化轉(zhuǎn)化的過程進行跟蹤觀察和分析和對實驗數(shù)據(jù)的收集和統(tǒng)計分析來確定標簽化轉(zhuǎn)化的速度等,提高其運行的質(zhì)量。
以硬件抽象機來完成模擬執(zhí)行過程,是在流水線譯碼的階段,是在分析標簽狀態(tài)以及標簽間相互關(guān)系的基礎(chǔ)上來實現(xiàn)的,在這一過程中可以通過對某一標簽被使用的指令位置來識別相應(yīng)程序塊上的一些數(shù)據(jù)關(guān)系;以數(shù)據(jù)分析為基礎(chǔ)來確定相應(yīng)程序中的一些指令相關(guān)關(guān)系,并且以此來揭示指令級并行的可能性并且為后期流水段指令的調(diào)度等做好一些準備工作。在這種環(huán)境下,指令單元所完成的是一些基于標簽的執(zhí)行工作,其整個過程可以通過一些硬件來完成。對于指令流的處理方式上,更多的是以順序的方式,但是就處理速度來將,比真實指令順序執(zhí)行的處理速度更快,能夠更好的滿足一些并行執(zhí)行的現(xiàn)實需求。
以硬件抽象機的工作原理為基礎(chǔ),對其結(jié)構(gòu)進行設(shè)計,使其在處理器中更好的完成相關(guān)指令的執(zhí)行情況,從而提供其性能。在具體的設(shè)計中,要從指令流的執(zhí)行情況,以標簽形式或者指令流的形式來完成相關(guān)的執(zhí)行工作,使程序指令得到更好的執(zhí)行,提高抽象機的工作效能。在設(shè)計的基礎(chǔ)上進行一定的模擬驗證,從設(shè)計上來完善具體的執(zhí)行性能,保證指令程序的運行正常,并且使其執(zhí)行效果得到保證。通過硬件抽象機的應(yīng)用,提高程序執(zhí)行情況,使運行指令在系統(tǒng)內(nèi)部得到有效的傳輸,并且不斷提高指令流的執(zhí)行效果,以執(zhí)行效果來實現(xiàn)處理器性能的綜合提高。
三、硬件抽象機的具體組成與工作過程
(一)硬件抽象機的組成部分
硬件抽象機由兩個部分組成即指令標記單元及操作數(shù)標簽堆棧(OTS),前者是將數(shù)據(jù)加載指令等生產(chǎn)者指令所產(chǎn)生出的結(jié)果標簽放到操作數(shù)標簽堆棧中,而數(shù)據(jù)存儲指令等消費者指令則是在指令的標記過程中將OTS中所使用過的一些標簽剔除。在這一過程中,指令標記技術(shù)能夠在生產(chǎn)者指令與消費者指令間建立一種數(shù)據(jù)流的關(guān)系,為指令的傳遞及其具體的操作提供便利。操作數(shù)標簽堆棧上的每一條指令,進入到指令單元時會分配到一個獨有的標簽,一個算數(shù)邏輯指令在被完成標記之后,在它被執(zhí)行的時候,與之相應(yīng)的指令輸入的標簽就會從OTS中彈出來,在執(zhí)行完成之后會生成一個新的結(jié)果標簽,該標簽會被壓入到OTS中去作為一個新的輸入量來完成該種結(jié)果指令的傳遞。
(二)硬件抽象機的工作過程
硬件抽象機的堆棧處理器中操作數(shù)被特定的操作者使用以后,便被從執(zhí)行堆棧中抹去。所以,一個數(shù)據(jù)加載指令的值只能為一個操作者指令所使用,這一操作中所形成的結(jié)果是能夠以一個標簽來作為唯一識別的。通過上面一種過程,Java字節(jié)碼指令對之間消費者與生產(chǎn)者關(guān)系也可以用標簽的形式識別出來,并且是一種類似于RISC處理其的執(zhí)行,這樣一種通過標簽形式來完成的執(zhí)行過程便是一個完整的模擬執(zhí)行過程。
我們所提到的硬件抽象技術(shù)的應(yīng)用和Java的指令折疊技術(shù)會出現(xiàn)一定的融合,這一過程中產(chǎn)生的一些指令代碼等會通過指令折疊邏輯之后生成一些與RISC指令相似的指令。那些被標記之后帶有一定標簽的指令是可以用來調(diào)度執(zhí)行的,并且標簽使用過之后就會被釋放,使其可以再重復(fù)應(yīng)用。就執(zhí)行的過程而言,指令標記技術(shù)的應(yīng)用使得程序能夠以數(shù)據(jù)流圖(DFD)的形式來表達,對于操作數(shù)標簽的記錄和分析等可以等同于一種對指令間一些相關(guān)數(shù)據(jù)問題的分析,能夠更好的揭示指令并行的問題,從而使指令能夠以RISC等引擎執(zhí)行。
從上述分析我們可以看出,抽象機的運行過程,是一個指令被標簽化和執(zhí)行的過程,通過標簽輸入或者輸出來實現(xiàn)相關(guān)數(shù)據(jù)的傳輸和轉(zhuǎn)化,從而使數(shù)據(jù)得以執(zhí)行。通過仿真模擬運行,來發(fā)現(xiàn)抽象機運行中標簽化運行情況以及指令的執(zhí)行過程,并且進行比較分析,使其能夠有效的應(yīng)用到微處理器中。為了保證其正常運行,我們應(yīng)該對其進行充分的實驗和檢驗,綜合考慮其標簽化的過程時間、指令級并行情況等,選擇性能更高者應(yīng)用到處理器中,以保證處理器更好的發(fā)揮其作用。
(三)抽象機的優(yōu)點
抽象機運行過程,是從指令流的執(zhí)行情況,以標簽的形式或者指令流的形式來完成相關(guān)的執(zhí)行工作,使程序指令得到更好的執(zhí)行,提高了抽象機的工作性能,保證了指令程序的運行正常,并且使其執(zhí)行效果得到了保證。通過硬件抽象機的應(yīng)用,提高程序執(zhí)行情況,使運行指令在系統(tǒng)內(nèi)部得到有效的傳輸,不斷提高指令流的執(zhí)行效果,以執(zhí)行效果來實現(xiàn)處理器性能的提高。
四、Java 微處理器的組成和工作過程
(一)Java微處理器的工作原理
Java微處理器的流水線中內(nèi)置有硬件抽象機,在工作中,硬件抽象機先成對的將指令標記,將Java字節(jié)轉(zhuǎn)化成為一些帶有標簽的指令,然后再通過標簽完成抽象的執(zhí)行,從中發(fā)現(xiàn)一些堆棧的依賴問題并予以解決,將堆棧指令轉(zhuǎn)化成為一些帶有標簽的以寄存器為基礎(chǔ)的指令,從而把一些可以并行執(zhí)行的指令轉(zhuǎn)化成組合發(fā)射出去。(工作過程如圖2所示)微處理器中,標簽的匹配單元會根據(jù)它在堆棧寄存器文件中的標簽映像的寄存器的值,實現(xiàn)對一些基于標簽指令的操作數(shù)狀態(tài)的有效跟蹤。在這些基于標簽指令的操作數(shù)處于就緒狀態(tài)時,把它們添加到已經(jīng)就緒序列中,然后通過硬件的邏輯將這些數(shù)據(jù)發(fā)射到RISC執(zhí)行引擎執(zhí)行中。微處理器中,指令一般是按照一定的順序發(fā)射的,但是也允許亂序執(zhí)行的現(xiàn)象,執(zhí)行結(jié)果以及微處理器的狀態(tài)更新會是按照一定的邏輯順序來執(zhí)行的。這種程序執(zhí)行的邏輯順序是一種程序執(zhí)行的外部展現(xiàn)形式,能夠有效的保證程序執(zhí)行的正確性。
(二)Java微處理器的優(yōu)點
通過理論分析和仿真實驗驗證,微處理器的這種結(jié)構(gòu)形式,使指令在微處理器內(nèi)部進行標簽化的轉(zhuǎn)化和執(zhí)行,按照一定的程序,使各種指令被辨別執(zhí)行,提高了微處理器的運作性能。同時,Java微處理器的結(jié)構(gòu)能夠有效的實現(xiàn)各種指令的順序執(zhí)行,使其對數(shù)據(jù)的傳輸和處理能力不斷增強,使得微處理器的結(jié)構(gòu)和性能更為完善。
五、抽象機與Java微處理器的結(jié)合
將抽象機與Java微處理器的優(yōu)勢有機結(jié)合,使其結(jié)構(gòu)不斷的優(yōu)化,提高標簽化的速度和指令執(zhí)行的效果。對其結(jié)構(gòu)進行設(shè)計時,要從微處理器的運行情況出發(fā),對其結(jié)構(gòu)形式進行合理的設(shè)計,使其能夠滿足數(shù)據(jù)和指令傳輸?shù)囊蟆>唧w的應(yīng)用中,將抽象機應(yīng)用到Java微處理器,使得抽象機應(yīng)用程序的調(diào)整以及指令的處理形式與Java微處理器的相關(guān)性能有機結(jié)合,從而提高微處理器指令執(zhí)行的效果,從整體上提升Java微處理器的性能。(抽象機應(yīng)用到Java微處理器如圖3所示)
六、微處理器的軟件模擬以及相關(guān)性能的評價
(一)微處理器結(jié)構(gòu)的評價
從Java 微處理器的結(jié)構(gòu)來看,在一定的運行環(huán)境下,通過對蹤跡處理器性能的仿真器的應(yīng)用來模擬微處理器的流水線工作過程,以它來對一些基于堆棧的硬件抽象機中的Java指令并行處理器進行仿真模擬。我們可以看到,在仿真器中,與標簽匹配的單元中我們通常假定它包含了64個標簽項。在模擬的過程中,我們利用修改過的開源JVM解釋器,以此來獲得微處理器中軟件測試程序的相關(guān)字節(jié)碼的執(zhí)行流。這種仿真器以接收到的Java字節(jié)碼流作為輸入,并且對這些代碼在指令流水線上進行一定的調(diào)度并完成執(zhí)行。在仿真模擬實驗的過程中,我們通過對SPECjvm98和Linpack基準的程序系統(tǒng)進行測試,前者包含了Compress等七個程序,通過對他們的分別測試來反應(yīng)Java程序的不同應(yīng)用情況,而sl數(shù)據(jù)集的一個用Mm程序等是一種單線程的版本程序。在仿真實驗中,我們使用了靜態(tài)預(yù)測器,在出現(xiàn)預(yù)讀取錯誤的情況下,仿真器會產(chǎn)生三個周期短的懲罰時間。在我們的實驗中,對于指令調(diào)度的限制是在基本序塊中來完成的,它支持一些指令的預(yù)取,并且使指令緩沖器及其數(shù)據(jù)的緩存器都假定為全部命中的狀態(tài)的。這樣一種模擬仿真實驗,能夠更好的還原微處理器內(nèi)部指令的流轉(zhuǎn)和執(zhí)行過程,使得各項程序都能順暢的執(zhí)行,保證微處理器性能的實現(xiàn)。
(二)微處理器ILP的執(zhí)行加強
為了驗證該種加強,我們先假定在微處理器是一種4發(fā)射的處理器,在同一個指令發(fā)射窗口中,當指令間沒有相互依賴關(guān)系時,在相同的周期內(nèi),處理器能夠同時發(fā)射出條指令并保證其得到執(zhí)行。但是當指令間存在一定的依賴關(guān)系時,前面指令執(zhí)行結(jié)束之后后面的指令才能被發(fā)射出去并被執(zhí)行。這樣一種運行基準的測試程序,能夠得到Java微處理器的指令及其執(zhí)行的百分率,通過對相關(guān)數(shù)據(jù)統(tǒng)計和分析,我們可以來確定微處理器運行的質(zhì)量及其相關(guān)性能指數(shù)。通過與國外一些文獻的比較,我們可以看到Java微處理器在ILP執(zhí)行上的一些優(yōu)勢,文獻中使用Cache來完成對Java程序代碼的儲存和執(zhí)行,使其在之后的使用過程中能夠直接從Cache中讀取出相應(yīng)的數(shù)據(jù)和指令,能夠在很大程度上提高指令執(zhí)行效率,并且該種形式使用的是定序的多發(fā)射結(jié)構(gòu)形式,以堆棧技術(shù)排歧技術(shù)的應(yīng)用來提高處理器的執(zhí)行效率。從文獻的結(jié)果來看,能夠?qū)崿F(xiàn)三指令組并行執(zhí)行的微處理器是比較少的,沒有相關(guān)的四指令執(zhí)行組。與文獻相比,我們所采用的仿真實驗結(jié)果,三指令的并行執(zhí)行比例是比較高的,而四指令的執(zhí)行組在總指令執(zhí)行中所占的比例變化范圍是較大的,通過這種數(shù)據(jù)的統(tǒng)計比較,我們可以看出程序的特征直接影響指令的執(zhí)行比率,而這也使我們看到Java微處理器結(jié)構(gòu)能夠?qū)崿F(xiàn)更多的指令級并行。
(三)微處理器性能加強
在微處理器模擬實驗中,將Java字節(jié)碼假定為一種單周期執(zhí)行,以此來獲得ILP的相關(guān)性能加速比。從實驗中,我們可以獲取Java 微處理器以及基礎(chǔ)彈發(fā)射的Java堆棧處理器的相關(guān)數(shù)據(jù)來比較ILP的加速比。就實驗結(jié)果而言,我們可以看到前者可以實現(xiàn)幅度較大的指令集增強,這也體現(xiàn)了Java微處理器能夠有效的實現(xiàn)平均ILP性能的加速。當我們以另外一種實現(xiàn)來進行相同指令周期的仿真模擬實驗時,可以看到處理器與單發(fā)射堆棧處理器的加速效果是更好的。從測試程序來看,Java微處理器所獲得的CPI的加速比是在13%到78%之間的,就實驗結(jié)果而言,Mpegaudio因為它比其他程序可以實現(xiàn)更多的指令被執(zhí)行,從而可以實現(xiàn)更好的性能加速比。此外,Compress,Mpegaudio和Linpack等程序也是我們在實驗時所要注意的,對他們的運行所產(chǎn)生的CPI加速比結(jié)果進行一定的比較分析,得出其運行的類型等,以此來選擇適宜的計算機程序,使微處理器能夠更好的運行。
七、結(jié)語
在計算機技術(shù)不斷發(fā)展的背景下,綜合應(yīng)用新技術(shù)對微處理器結(jié)構(gòu)進行科學設(shè)計,使其性能不斷提升。抽象機所具有的一些性能特點使其能夠完成微處理器相關(guān)的功能需求,將其應(yīng)用于Java微處理器中,使指令執(zhí)行速度不斷增強,從而提高其使用性能。在Java微處理器的結(jié)構(gòu)設(shè)計上,從堆棧抽象機的工作流程來分析,對于微處理器中所使用的抽象機指令級并行情況進行一種仿真的驗證,使處理器可以實現(xiàn)78%到173%的指令級并行上的增強,并且能夠?qū)崿F(xiàn)處理器性能的平均值的提高。
以抽象機的應(yīng)用原理作為基本出發(fā)點進行綜合的設(shè)計,保證其結(jié)構(gòu)設(shè)計等能夠更好地滿足微處理器的運行需求。從抽象機運行的過程來分析其中的指令執(zhí)行形式和過程,注重指令執(zhí)行的效果,以提高抽象機的運行效率。在Java微處理器的設(shè)計中,從結(jié)構(gòu)的設(shè)計出發(fā),將抽象機與微處理器有機結(jié)合,以抽象機的工作流程來提高微處理器中指令級并行執(zhí)行的量。在結(jié)構(gòu)設(shè)計完成時,要應(yīng)進行一定的實驗,測試不同系統(tǒng)下微處理器的運行情況,從而為微處理器的運行選擇最佳的運行系統(tǒng)環(huán)境,提高其綜合運行的質(zhì)量。
從技術(shù)擴展的角度出發(fā),硬件抽象機的應(yīng)用能夠與動態(tài)指令的翻譯有機結(jié)合,從而實現(xiàn)處理器執(zhí)行引擎的有效利用,是不同的機器代碼得以動態(tài)執(zhí)行。對于基于硬件抽象機的微處理器的具體設(shè)計方法,我們可以根據(jù)指令集計算機的執(zhí)行和處理器情況來利用一些高性能的處理器內(nèi)核從而實現(xiàn)一些結(jié)構(gòu)上的兼容。在微處理器元件的選擇上,從擴展的角度出發(fā),結(jié)合計算機技術(shù)的發(fā)展方向等使其具有一定的擴展性,使其指令級的執(zhí)行等能夠被執(zhí)行,從而提高微處理器的性能。
參考文獻:
[1]Hai-chen Wang,Xiang-Mo Zhao,Hai-Sheng Wang,An abstract machine-based dynamatic translation technique in java processors[J],2010(1)
[2]H.C.Wang,C.K.Yuen, Exploiting an abstract-machine-based framework in the design of a Java ILP processor[J], Journal of Systems Architecture: the EUROMICRO Journal,2009(1)
[3]王永文,張民選. 高性能微處理器微體系結(jié)構(gòu)級功耗模型及分析[J].計算機學報,2004(10)
[4]王海晨,趙祥模.抽象機在Java微處理器中的應(yīng)用研究[J].計算機技術(shù)與發(fā)展,2011(6)
[5]王祚棟,魏少軍.微處理器功能驗證的模擬加速方法[J].計算機輔助設(shè)計與圖形學學報,2005(8)
[6]張良,易江芳,佟冬,程旭,王克義. 使用局部建模的微處理器測試程序自動生成方法[J].電子學報,2011(7)
[7] McGhan H,Connor M O’.PicoJava:A Direct Execution Engine for Java Bytecode[J].IEEE Computer,1998.31:22~3O.
[8]Embedded Java Processor[C]∥Proceedings of the 27th Inter—national Symposium on Computer Architecture.[S.1.]:[S.n.],2000:294-305.
[9]Connor M O’,Michael J.picoJava-I:The Java Virtual Ma—chine in Hardware[J].IEEE Micro,1997,17:45—53.
[10]Diehl S,Hartel P,Sestofi P.Abstract machines for program—ming language implementation[J].Future Generation Corn—puter Systems,2000,16:739-751.
[11]Lee J,Smith A J.Branch prediction strategies and branch target buffer design[J].IEEE Computer,1984,17:6-22.
[12]Hu S L,Kim I,Lipasti M H.et a1.An approach for imple—menting eficient superscalar cisc processors[C]∥In Proc.Of the 12th International Symposium on High-Performance Com·-puterArchitecture(HPCA一12).Austin,TX:[S.n.],2006.
作者簡介:馬暢翼,女,1994年生,山東省日照市人,曲阜師范大學計算機科學學院學生。主要研究數(shù)據(jù)挖掘技術(shù)在生物信息學方面的應(yīng)用,用粒子群算法解決了SNP互作模式識別的問題。