針對已調(diào)度匯編代碼的控制流圖重構(gòu)方法
【專利摘要】本發(fā)明涉及一種針對已調(diào)度匯編代碼的控制流圖重構(gòu)方法,包括:對源程序進(jìn)行靜態(tài)分析,根據(jù)全局延遲槽列表信息,獲取源程序所有可能的執(zhí)行路徑,由此構(gòu)建指令流圖;其中,指令流圖中的每個結(jié)點(diǎn)代表一條指令;遍歷指令流圖中的各個結(jié)點(diǎn),根據(jù)各個結(jié)點(diǎn)的入度和出度信息,創(chuàng)建基本塊,生成控制流圖;基于控制流圖,分析各基本塊中的各個執(zhí)行包,對執(zhí)行包建立匯編級數(shù)據(jù)依賴圖;根據(jù)源體系結(jié)構(gòu)指令集信息,確定執(zhí)行包中各條指令的時間戳信息;根據(jù)各條指令的時間戳信息,進(jìn)行指令的跨塊或跨包移動;根據(jù)匯編級數(shù)據(jù)依賴圖,修改各條指令的時間戳信息;根據(jù)各條指令修改后的時間戳信息,重排序各條指令,由此復(fù)原源程序中每條指令的等價(jià)執(zhí)行。
【專利說明】針對已調(diào)度匯編代碼的控制流圖重構(gòu)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)字?jǐn)?shù)據(jù)處理領(lǐng)域,具體涉及一種針對已調(diào)度匯編代碼的控制流圖重構(gòu)方法。
【背景技術(shù)】
[0002]在數(shù)字信號處理器領(lǐng)域中,很多軟件都是針對具體的目標(biāo)體系結(jié)構(gòu)特征,以匯編的形式實(shí)現(xiàn)。這些軟件難以理解和維護(hù),也不易完成不同體系結(jié)構(gòu)之間的移植。在逆向工程、二進(jìn)制翻譯領(lǐng)域,完成這些工作的第一步是對源匯編程序控制流的重構(gòu)。
[0003]在編譯器設(shè)計(jì)領(lǐng)域,很多代碼優(yōu)化技術(shù)都是直接針對匯編代碼進(jìn)行,主要包括:鏈接時程序全局分析及優(yōu)化、代碼壓縮、二進(jìn)制翻譯等。這些優(yōu)化技術(shù)都是基于匯編代碼的控制流圖(Control Flow Graph,CFG)完成。然而,編譯器生成的匯編代碼具有特定的體系結(jié)構(gòu)特征,其涵蓋的調(diào)度信息使得匯編代碼的CFG的構(gòu)建更加復(fù)雜。
[0004]對于具有超長指令字架構(gòu)(very long instruction word, VLIW)結(jié)構(gòu)的微處理器,分支指令是提高其性能的一個重要障礙。等待分支結(jié)果的延遲會造成流水線停頓,從而降低指令并行度。硬件設(shè)計(jì)中的延遲槽結(jié)構(gòu)有助于解決此類控制相關(guān)而帶來的性能問題,并與編譯器配合完成分支指令的延遲槽調(diào)度。現(xiàn)有技術(shù)中,為了減少分支指令帶來的流水線停頓周期,將一些與分支指令不相關(guān)的有用指令填充到該分支指令后的延遲槽中,以提升處理器的性能。這些指令不受分支指令結(jié)果的影響,無論分支成功與否,流水線都會執(zhí)行這些指令。因此,在還原源程序的控制流時,常用方法是,根據(jù)分支指令的執(zhí)行周期數(shù),將其延遲槽中的所有指令前移,由此得到源程序執(zhí)行時機(jī)器無關(guān)的控制流。然而,對于一些高性能的處理器,其優(yōu)化的編譯器允許延遲槽調(diào)度的對象是分支指令。對于這種延遲槽中有其他的分支指令的情況時,現(xiàn)有的控制流分析方法不再適用。
[0005]針對帶延遲槽的分支指令的匯編程序的CFG的建立,一般方法是:首先根據(jù)子片段信息將匯編代碼分塊,其次不考慮延遲槽,將各個基本塊之間的簡單跳轉(zhuǎn)關(guān)系添加至CFG中,最后,針對帶有延遲槽的分支指令,通過多次迭代,在CFG中添加所有可能的跳轉(zhuǎn)邊,但這種方法僅僅將源匯編代碼按基本塊分割,添加可能的跳轉(zhuǎn)分支,從中很難恢復(fù)源程序的執(zhí)行序。
[0006]對上述一般方法做改進(jìn)后,提出的方法是:針對調(diào)度后的匯編代碼提出建立控制數(shù)據(jù)流圖(Control and Data Flow Graph, CDFG)的算法,該算法是在上述一般方法的基礎(chǔ)上生成CFG,在處理帶有延遲槽的指令時,通過引入虛擬寄存器來打破原指令的多周期執(zhí)行,完成去延遲槽操作。但是該方法在解決多周期指令的去延遲槽操作時,引入了較多的額外指令,效率較低。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的目的是提供一種針對已調(diào)度匯編代碼的控制流圖重構(gòu)的方法。
[0008]本發(fā)明提供了一種針對已調(diào)度匯編代碼的控制流圖重構(gòu)方法,包括:[0009]對源程序進(jìn)行靜態(tài)分析,根據(jù)全局延遲槽列表信息,獲取源程序所有可能的執(zhí)行路徑,由此構(gòu)建指令流圖;其中,指令流圖中的每個結(jié)點(diǎn)代表一條指令,每一條邊代表一條指令到另一條指令一種的可能執(zhí)行序關(guān)系;
[0010]遍歷所述指令流圖中的各個結(jié)點(diǎn),根據(jù)所述各個結(jié)點(diǎn)的入度和出度信息,創(chuàng)建基本塊,生成控制流圖;
[0011]基于控制流圖,分析各基本塊中的各個執(zhí)行包,對所述執(zhí)行包建立匯編級數(shù)據(jù)依賴圖;根據(jù)源體系結(jié)構(gòu)指令集信息,確定所述執(zhí)行包中各條指令的時間戳信息;
[0012]根據(jù)所述各條指令的時間戳信息,進(jìn)行指令的跨塊或跨包移動;
[0013]根據(jù)所述匯編級數(shù)據(jù)依賴圖,修改所述各條指令的時間戳信息;根據(jù)各條指令修改后的時間戳信息,重排序所述各條指令,由此復(fù)原所述程序中每條指令的等價(jià)執(zhí)行。
[0014]優(yōu)選地,對源程序進(jìn)行靜態(tài)分析,初始化指令隊(duì)列和全局延遲槽列表,添加初始指令至指令隊(duì)列,在指令隊(duì)列為非空時,根據(jù)所述全局延遲槽列表,分析處理指令隊(duì)列中的隊(duì)首指令,建立所述隊(duì)首指令與其所有可能的直接后繼指令的連接關(guān)系,并將非空的所有可能的直接后繼指令加入所述指令隊(duì)列,在所述指令為分支指令時,將該分支指令的延遲槽信息添加至全局延遲槽列表中,重復(fù)上述操作,直到指令隊(duì)列為空,由此生成指令流圖。
[0015]優(yōu)選地,廣度優(yōu)先遍歷所述指令流圖中的各個結(jié)點(diǎn),以所述指令結(jié)點(diǎn)的入度和出度是否大于1,作為基本塊邊界劃分的依據(jù),以此合并指令序列,創(chuàng)建基本塊,并添加所述指令流圖中的邊信息,生成控制流圖。
[0016]優(yōu)選地,通過對所述執(zhí)行包建立匯編級數(shù)據(jù)依賴圖,描述執(zhí)行包中的各條指令間的寫后讀依賴和/或讀后寫依賴。
[0017]優(yōu)選地,根據(jù)當(dāng)前指令所在執(zhí)行包分配的基準(zhǔn)時間Tb,計(jì)算指令的發(fā)射時間Tf=Tb+0.01*n,計(jì)算指令的寫回時間Tw=Tf+delay ;其中,delay為指令執(zhí)行時需要的周期數(shù),
0.01為一任意數(shù)值。
[0018]優(yōu)選地,在[Tw]大于當(dāng)前執(zhí)行包的基準(zhǔn)時間Tbl時,比較[Tw]和當(dāng)前基本塊中最后一個執(zhí)行包的基準(zhǔn)時間Tb2 ;在[Tw]大于當(dāng)如基本塊中最后一個執(zhí)行包的基準(zhǔn)時間Tb2時,當(dāng)前指令進(jìn)行跨塊移動;在[Tw]不大于當(dāng)前基本塊中最后一個執(zhí)行包的基準(zhǔn)時間Tb2時,當(dāng)前指令進(jìn)行跨包移動;其中,[Tw]為對當(dāng)前指令的寫回時間Tw的下取整。
[0019]本發(fā)明針對已調(diào)度匯編代碼,能夠準(zhǔn)確完成源程序的控制流圖的重構(gòu),從中恢復(fù)源程序的執(zhí)行序,而且在解決多周期指令的去延遲槽操作時,根據(jù)指令的時間戳信息完成指令的移動,引入的額外指令較少。
【專利附圖】
【附圖說明】
[0020]圖1為本發(fā)明實(shí)施例已調(diào)度匯編代碼的控制流圖重構(gòu)方法流程圖;
[0021]圖2為本發(fā)明實(shí)施例構(gòu)建指令流圖的流程圖
[0022]圖3A為本發(fā)明實(shí)施例匯編代碼片段;
[0023]圖3B為圖3A的指令流圖;
[0024]圖3C為圖3B的控制流圖;
[0025]圖4為本發(fā)明實(shí)施例中并行代碼線性化流程?!揪唧w實(shí)施方式】
[0026]下面通過附圖和實(shí)施例,對本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
[0027]圖1是本發(fā)明實(shí)施例已調(diào)度匯編代碼的控制流圖重構(gòu)方法流程圖。如圖1所示,本發(fā)明實(shí)施例包括:
[0028]步驟110,對源程序進(jìn)行靜態(tài)分析,根據(jù)全局延遲槽列表信息,獲取源程序所有可能的執(zhí)行路徑,由此構(gòu)建指令流圖;其中,指令流圖中的每個結(jié)點(diǎn)代表一條指令,每一條邊代表一條指令到另一條指令一種可能的執(zhí)行序關(guān)系。
[0029]指令集中只有分支指令才影響程序的控制走向。對于特定的目標(biāo)體系結(jié)構(gòu),分支指令的延遲槽個數(shù)一定。在對源程序進(jìn)行靜態(tài)分析時,根據(jù)分支指令的延遲槽信息,從指令級獲取程序所有可能的執(zhí)行路徑,獲得指令流圖(Instruction Flow Graph, IFG)。IFG著重關(guān)心程序中的各條指令間可能的邏輯控制流向,是有向圖。其中的每個結(jié)點(diǎn)代表一條指令,每一條邊代表從一條指令到另一條指令一種可能的執(zhí)行序關(guān)系。
[0030]下面具體說明構(gòu)建IFG的方法。圖2為本發(fā)明實(shí)施例中構(gòu)建IFG的流程圖。在圖2中,首先,初始化指令隊(duì)列和全局延遲槽列表,添加初始指令,并將該初始指令加入指令隊(duì)列中。其次,判斷指令隊(duì)列的長度是否大于0,在指令隊(duì)列的長度不大于O時,結(jié)束當(dāng)前操作,在指令隊(duì)列長度大于O時,分析處理指令隊(duì)列中的隊(duì)首元素,對隊(duì)首元素Head調(diào)用ProcessNode函數(shù),建立隊(duì)首指令與其所有可能的直接后繼指令的連接關(guān)系,并將非空的所有可能的直接后繼指令加入所述指令隊(duì)列,重復(fù)上述步驟,直到指令隊(duì)列為空,由此生成IFG。其中的核心函數(shù)ProcessNode的處理步驟如下:
[0031]I)判斷當(dāng)前指令是否為當(dāng)前文件的最后一條指令,如果不是,則暫定當(dāng)前指令的1-分支指令True_Insn為其直接后繼指令,暫定當(dāng)前指令的O-分支指令False_Insn為空,如果是,判斷延遲槽列表的長度是否為0,如果是,則轉(zhuǎn)至6);
[0032]2)遍歷全局延遲槽列表中的每條分支指令的延遲槽信息,將其延遲槽個數(shù)減I。如果有任意一條分支指令的延遲槽個數(shù)為O,則暫定當(dāng)前指令的1-分支指令True_Insn為分支指令的目標(biāo)地址所在的指令,判斷該分支指令是否為條件分支,如果為條件分支,則暫定當(dāng)前指令的O-分支指令False_Insn為其直接后繼指令;
[0033]3)如果當(dāng)前指令的O-分支指令False_Insn在IFG中已經(jīng)存在,則在IFG中建立當(dāng)前指令與False_Insn的連接關(guān)系,否則,添加False_Insn至IFG中,并建立當(dāng)前指令與False_Insn的連接關(guān)系;
[0034]4)如果當(dāng)前指令的1-分支指令True_Insn在IFG中已經(jīng)存在,則在IFG中建立當(dāng)前指令與True_Insn的連接關(guān)系,否則,添加True_Insn至IFG中,并建立當(dāng)前指令與True_Insn的連接關(guān)系;
[0035]5)判斷當(dāng)前指令是否為分支指令,如果是,添加當(dāng)前分支指令的延遲槽信息至全局延遲槽列表;
[0036]6)函數(shù)返回。
[0037]圖3A為本發(fā)明實(shí)施例匯編代碼片段。依照圖2對圖3A中匯編代碼片段構(gòu)建的指令流圖如圖3B所示。
[0038]步驟120,遍歷所述指令流圖中的各個結(jié)點(diǎn),根據(jù)所述各個結(jié)點(diǎn)的入度和出度信息,創(chuàng)建基本塊,生成控制流圖。[0039]編譯器設(shè)計(jì)中的控制流圖(Control Flow Graph, CFG)是對程序中分支跳轉(zhuǎn)關(guān)系的抽象,描述程序所有可能的執(zhí)行路徑,常用于編譯調(diào)度優(yōu)化。傳統(tǒng)的CFG構(gòu)建有兩步:創(chuàng)建基本塊,添加基本塊之間的連接關(guān)系。
[0040]基本塊是程序中的只有一個執(zhí)行入口和執(zhí)行出口的指令序列。在CFG中,每個結(jié)點(diǎn)代表一個基本塊,且控制流只能從每個結(jié)點(diǎn)的第一條指令進(jìn)入,從其最后一條指令退出。
[0041]構(gòu)建CFG的步驟如下(開始時當(dāng)前基本塊cur_block為空):
[0042]步驟121,廣度優(yōu)先遍歷IFG中的各個結(jié)點(diǎn)Xi;
[0043]步驟122,判斷當(dāng)前結(jié)點(diǎn)Xi的入度是否大于1,如果是,說明cur_block已經(jīng)到最遠(yuǎn)出口位置,初始化新基本塊succ_block,將當(dāng)前結(jié)點(diǎn)添加到succ_block中,添加邊信息<cur_block,succ_block> 至 CFG 中,succ_block 作為當(dāng)前基本塊,轉(zhuǎn)到步驟 125 ;
[0044]步驟123,判斷當(dāng)前結(jié)點(diǎn)Xi的出度是否大于1,如果是,則說明cur_block已經(jīng)到最遠(yuǎn)出口位置,將當(dāng)前結(jié)點(diǎn)添加到cur_block中,初始化新基本塊succ_block,添加邊信息<cur_block,succ_block> 至 CFG 中,succ_block 作為當(dāng)前基本塊,轉(zhuǎn)到步驟 125 ;
[0045]步驟124,添加當(dāng)前結(jié)點(diǎn)Xi至當(dāng)前基本塊cur_block中;
[0046]步驟125,重復(fù)上述步驟121-124,直到遍歷完所有的結(jié)點(diǎn)。
[0047]CFG中各個結(jié)點(diǎn)(每個結(jié)點(diǎn)代表一個基本塊)間的連接關(guān)系代表著源程序的執(zhí)行序,因此在創(chuàng)建基本塊時,原有的分支跳轉(zhuǎn)指令不必添加至CFG中。
[0048]依據(jù)上述步驟121-125,構(gòu)建的圖3B的CFG如圖3C所示。
[0049]步驟130,基于控制流圖,分析各基本塊中的各個執(zhí)行包,建立所述執(zhí)行包的匯編級數(shù)據(jù)依賴圖;根據(jù)源體系結(jié)構(gòu)指令集信息,確定所述執(zhí)行包中各條指令的時間戳信息。
[0050]步驟140,根據(jù)所述各條指令的時間戳信息,進(jìn)行指令的跨塊或跨包移動。
[0051]步驟150,根據(jù)所述匯編級數(shù)據(jù)依賴圖,修改所述各條指令的時間戳信息;根據(jù)各條指令修改后的時間戳信息,重排序所述各條指令,由此復(fù)原所述程序中每條指令的等價(jià)執(zhí)行。
[0052]需要說明的是,步驟130-150是并行代碼線性化的過程,是基于步驟120生成的CFG,復(fù)原程序中每條指令的等價(jià)執(zhí)行。圖4為本發(fā)明實(shí)施例中并行代碼線性化流程。下面結(jié)合步驟130-150及圖4,對并行代碼線性化流程的過程作具體的描述:
[0053]I)遍歷CFG中的基本塊;
[0054]2)遍歷基本塊中的執(zhí)行包;分析執(zhí)行包內(nèi)的各條指令,建立匯編級數(shù)據(jù)依賴圖(Assembly data dependence graph, ADDG),進(jìn)行數(shù)據(jù)依賴分析;為每個執(zhí)行包分配包發(fā)射的基準(zhǔn)時間Tb;
[0055]3)遍歷執(zhí)行包中的每條指令;根據(jù)源體系結(jié)構(gòu)指令集信息,計(jì)算當(dāng)前指令的寫回時間Tw;判斷[Tw]是否大于當(dāng)前執(zhí)行包的Tbl;在[Tw]不大于當(dāng)前執(zhí)行包的Tbl時,直接跳轉(zhuǎn)到5);
[0056]4)在[Tw]大于當(dāng)前執(zhí)行包的基準(zhǔn)時間Tbl時,判斷[Tw]是否大于當(dāng)前基本塊中最后一個執(zhí)行包的Tb2 ;在[Tw]大于當(dāng)前基本塊中最后一個執(zhí)行包的基準(zhǔn)時間Tb2時,根據(jù)Tw對當(dāng)前指令進(jìn)行跨塊移動;在[Tw]不大于當(dāng)前基本塊中最后一個執(zhí)行包的基準(zhǔn)時間Tb2時,根據(jù)Tw對當(dāng)前指令進(jìn)行基本塊內(nèi)的跨包移動;
[0057]5)判斷當(dāng)前指令與執(zhí)行包內(nèi)其他指令是否存在讀后寫依賴(write afterread, WAR)、寫后讀依賴(read after write, RAW)的依賴關(guān)系;在當(dāng)前指令與執(zhí)行包內(nèi)其他指令存在WAR、RAW關(guān)系時,修改當(dāng)前指令的寫回時間Tw;在當(dāng)前指令與執(zhí)行包內(nèi)其他指令不存在讀后寫依賴WAR、寫后讀依賴RAW的依賴關(guān)系時,重復(fù)上述操作。
[0058]需要說明的是,[Tw]為對當(dāng)前指令的寫回時間Tw的下取整。
[0059]在一個實(shí)施例中,以TI匯編代碼片段和經(jīng)線性化后的TI代碼片段為例,說明匯編代碼線性化的過程,下表是匯編代碼片段和經(jīng)時間戳定義的匯編代碼片段,以下內(nèi)容僅為方便說明:
匯編代碼片段為各條指令定義時間戳
【權(quán)利要求】
1.一種針對已調(diào)度匯編代碼的控制流圖重構(gòu)方法,其特征在于,所述方法包括: 對源程序進(jìn)行靜態(tài)分析,根據(jù)全局延遲槽列表信息,獲取源程序所有可能的執(zhí)行路徑,由此構(gòu)建指令流圖;其中,指令流圖中的每個結(jié)點(diǎn)代表一條指令,每一條邊代表一條指令到另一條指令一種可能的執(zhí)行序關(guān)系; 遍歷所述指令流圖中的各個結(jié)點(diǎn),根據(jù)所述各個結(jié)點(diǎn)的入度和出度信息,創(chuàng)建基本塊,生成控制流圖; 基于控制流圖,分析各基本塊中的各個執(zhí)行包,對所述執(zhí)行包建立匯編級數(shù)據(jù)依賴圖;根據(jù)源體系結(jié)構(gòu)指令集信息,確定所述執(zhí)行包中各條指令的時間戳信息; 根據(jù)所述各條指令的時間戳信息,進(jìn)行指令的跨塊或跨包移動; 根據(jù)所述匯編級數(shù)據(jù)依賴圖,修改所述各條指令的時間戳信息;根據(jù)各條指令修改后的時間戳信息,重排序所述各條指令,由此復(fù)原所述源程序中每條指令的等價(jià)執(zhí)行。
2.如權(quán)利要求1所述的針對已調(diào)度匯編代碼的控制流圖重構(gòu)方法,其特征在于,所述對源程序進(jìn)行靜態(tài)分析,根據(jù)全局延遲槽列表信息,獲取源程序所有可能的執(zhí)行路徑,由此構(gòu)建指令流圖包括: 對源程序進(jìn)行靜態(tài)分析,初始化指令隊(duì)列和全局延遲槽列表,添加初始指令至指令隊(duì)列,在指令隊(duì)列為非空時,根據(jù)所述全局延遲槽列表,分析處理指令隊(duì)列中的隊(duì)首指令,建立所述隊(duì)首指令與其所有可能的直接后繼指令的連接關(guān)系,并將非空的所有可能的直接后繼指令加入所述指令隊(duì)列,在所述指令為分支指令時,將該分支指令的延遲槽信息添加至全局延遲槽列表中,重復(fù)上述操作,直到指令隊(duì)列為空,由此生成指令流圖。
3.如權(quán)利要求1所述的針對已調(diào)度匯編代碼的控制流圖重構(gòu)方法,其特征在于,所述遍歷所述指令流圖中的各個結(jié)點(diǎn),根據(jù)所述各個結(jié)點(diǎn)的入度和出度信息,創(chuàng)建基本塊,生成控制流圖包括: 廣度優(yōu)先遍歷所述指令流圖中的各個結(jié)點(diǎn),以所述指令結(jié)點(diǎn)的入度和出度是否大于1,作為基本塊邊界劃分的依據(jù),以此合并指令序列,創(chuàng)建基本塊,并添加所述指令流圖中的邊信息,生成控制流圖。
4.如權(quán)利要求1所述的針對已調(diào)度匯編代碼的控制流圖重構(gòu)方法,其特征在于,所述基于控制流圖,分析各基本塊中的各個執(zhí)行包,建立所述執(zhí)行包的匯編級數(shù)據(jù)依賴圖,包括: 通過建立所述執(zhí)行包的匯編級數(shù)據(jù)依賴圖,描述執(zhí)行包中的各條指令間的寫后讀依賴和/或讀后寫依賴。
5.如權(quán)利要求1所述的針對已調(diào)度匯編代碼的控制流圖重構(gòu)方法,其特征在于,所述根據(jù)源體系結(jié)構(gòu)指令集信息,確定所述執(zhí)行包中各條指令的時間戳信息,包括: 根據(jù)當(dāng)前指令所在執(zhí)行包分配的基準(zhǔn)時間Tb,計(jì)算指令的發(fā)射時間Tf=Tb+0.01*n,計(jì)算指令的寫回時間Tw=Tf+delay ;其中,delay為指令執(zhí)行時需要的周期數(shù),0.01為一任意數(shù)值。
6.如權(quán)利要求1所述的針對已調(diào)度匯編代碼的控制流圖重構(gòu)方法,其特征在于,所述進(jìn)行指令的跨塊或跨包移動包括: 在[Tw]大于當(dāng)前執(zhí)行包的基準(zhǔn)時間Tbl時,比較[Tw]和當(dāng)前基本塊中的最后一個執(zhí)行包的基準(zhǔn)時間Tb2 ;在[Tw]大于當(dāng)前基本塊中最后一個執(zhí)行包的基準(zhǔn)時間Tb2時,當(dāng)前指令進(jìn)行跨塊移動;在[Tw]不大于當(dāng)前基本塊中最后一個執(zhí)行包的基準(zhǔn)時間Tb2時,當(dāng)前指令進(jìn)行跨包移動;其中,[Tw ]為對當(dāng)前指令的寫回時間Tw的下取整。
【文檔編號】G06F9/44GK103577242SQ201310565945
【公開日】2014年2月12日 申請日期:2013年11月14日 優(yōu)先權(quán)日:2013年11月14日
【發(fā)明者】應(yīng)歡, 王雷歐, 王東輝, 洪纓 申請人:中國科學(xué)院聲學(xué)研究所