楊晨光,李 偉,杜怡然
戰略支援部隊信息工程大學 密碼工程學院,鄭州 450001
粗粒度可重構處理器具有豐富的計算資源和互連資源,能夠適用于密集型計算,同時兼具高能效與靈活性的特點使其受到了學者的廣泛關注。粗粒度可重構密碼邏輯陣列(coarse-grained reconfigurable cipher logical array,CRCLA)作為一種面向密碼算法的專用可重構處理器,在運算單元中添加了適用于密碼運算的模塊,并在互連以及控制方面做了針對性設計,但這也導致傳統的通用可重構陣列編譯架構已不解決的問題。
對于面向CRCLA 的編譯技術來說,其可分為前端設計與后端劃分、映射。首先不同的編譯前端因優化方式的不同將生成不同的數據流圖,從而造成編譯后端映射性能的差異。那么為充分發揮本文CRCLA的執行效率,需結合CRCLA 結構與密碼算法運算特征對前端的編譯框架、編譯技術進行研究,構建面向CRCLA的前端分析。同時為了擴展CRCLA 的可用性,本文采用高級語言C++來編寫密碼算法代碼,雖然開發人員無需理解硬件實際結構,但也增加了前端生成中間格式的難度。
可重構陣列編譯器的支持,不僅能最大程度發揮出陣列的性能還可以降低開發難度。REmus II可重構處理器編譯器[1],以帶有標注信息的代碼作為輸入,通過預處理與模板調用模塊進行識別,并對識別成功的模塊調用模板進行代碼宏替換,最終進行配置信息的生成,但該編譯器對輸入代碼的語法具有極大的限制,且不支持跨循環的輸入輸出依賴。Spatial[2]編譯器支持在可重構架構上實現的加速器,使用專門的領域特定語言Spatial允許領域專家快速開發、優化硬件加速器,但Spatial 語言只支持加速器,無法適應粗粒度可重構陣列的開發。TIRAMISU[3]是一個多面體編譯器框架,引入了一種命令式的調度語言,允許進行細粒度的優化,從而生成高性能的代碼,但命令式調度語言的編寫需熟悉具體的硬件結構。TPA-S[4]編譯器基于眾核處理器結構,以CUDA 編程語言為輸入,主要專注于控制流程序,但在面對密碼算法這種計算復雜的程序時無法發揮較好的性能。
上述編譯器基本采用專門的領域專用語言進行開發,同時針對硬件結構進行了優化,沒有統一的編譯框架與結構模型,因此在面對其他可重構結構時具有不確定性。由于本文的可重構密碼邏輯陣列針對密碼算法的實現進行了特殊設計,上述編譯器在實現密碼算法代碼映射時不能達到較好的性能。因此,為發揮本文可重構密碼邏輯陣列的高性能與靈活性的特點,本文設計以C++編寫的代碼作為輸入,以FLEX、BISON編譯框架進行自動化識別的前端。
設計過程中,由于密碼算法眾的特殊運算如S盒等可用C++代碼以不同的方式實現,但在可重構密碼邏輯陣列中可用單個算子運行,因此本文以基于注意力機制的圖嵌入模型進行檢測識別,以較高的分類精度精簡數據流圖。同時,基于可重構密碼邏輯陣列結構特點對數據流圖進行優化,提高了映射性能。
本文采用FLEX、BISON 編譯框架來設計編譯器,以高級語言C++編寫的代碼作為輸入,該語言能夠忽略底層結構,從而方便非專業人員無障礙使用可編程密碼邏輯陣列[5-6]。FLEX、BISON編譯框架源代碼公開,且免費使用,同時默認生成C 語言程序,相對其他框架在面對C++工程項目時更易維護。
編譯前端的分析器設計中,FLEX 將具有輸入的程序分割成有意義的單元,這些單元可以是變量名、操作名、字符串等,FLEX使用一系列的標記描述產生一個能識別程序的詞法分析器。定義一系列能夠理解的規則列表,將這些標記進行連接,即為語法分析器。提取出語法樹中的關鍵信息,即為語義分析器。
詞法分析將順序地讀入輸入源程序的有限字符序列,根據分析器中的詞法規則進行匹配[7],匹配采用的方法為正則表達式法。通過詞法規則可以識別簡單的字符、運算符號、變量名、變量類型的匹配,還可識別自定義的函數名。同時采取匹配優先級的方法來解決規則沖突,具體指的是在前面的優先級較高,如匹配函數名“matrix”,只需將函數名的定義放在變量名的定義之前即可。
詞法分析器將輸入的字符流識別為有意義的單詞符號,語法分析程序根據語法規則,采用遞歸下降、移進規約的思想識別單詞符號構建語法樹[8-9]。自葉子節點進行語法匹配并逐步規約到根節點,其中語法規則的設置需要依據編程語言的文法而確定的。
以常規運算“Value=Msg^Key”作為推導示例,從語法規則逐步遞進進行語法匹配,每個詞素都將被識別到對應的標識符,最后逐步歸約,并將每一步歸約的節點信息存入節點鏈表中。其中目的操作數“Value”經“Exp->VAR->Value”匹配規則可遞歸到“Exp”,并經由“Exp ASSIGN EXP ->DefList”將整條語句規約到根節點“DefList”,那么將每次遞歸到的節點存入鏈表中,就會得到完整的語法樹鏈表。
語義分析主要是對構建的語法樹進行分析,通過相應的子程序進行語義檢查提取出關鍵信息[10-12]。本文以生成數據流圖為目標,因此需提取有關運算語句間數據傳遞的關鍵信息,將其以相應的數據格式保存起來,并最終生成運算操作表。操作表中的運算操作需按順序存放,以指示密碼算法代碼中運算的執行順序。同時為存儲密碼算法中的輸入數據供可重構密碼邏輯陣列的使用,將定義的變量名存入變量表中。
本文針對數據流圖生成的需求,設計了語義分析程序。該程序根據語法樹的格式編寫代碼,從語法樹根節點出發,逐條語句進行分析,識別密碼算法中的運算語句的關鍵信息,具體語義分析流程圖如圖1所示。

圖1 語義分析流程圖Fig.1 Semantic analysis flow chart
圖1中語義分析流程從語句鏈表開始,將循環結構展開。然后依據等號標志ASSIGN、操作符與函數名取出定義語句、運算語句、賦值語句的關鍵信息,并將操作對應的源操作數、目的操作數與運算符存入操作表oper中,將變量名與值存入變量表vartable中,逐條語句進行分析直到語句鏈表為空。
編譯前端需要將密碼算法代碼生成可被后端使用的中間形式,而可重構密碼邏輯陣列運行密碼算法,是通過分析算法中的運算及數據依賴生成配置數據,數據流圖形式符合編譯后端需求,因此采用數據流圖作為中間代碼格式。針對數據流圖的生成,本文對1.2 節經語義分析后得到的操作表oper 和變量表vartable 進行分析,oper 中順序存放著密碼算法運算操作,單條運算包含源操作數、目的操作數、操作符,vartable 中存儲著密碼算法代碼中所有的變量名,通過分析可得運算節點間的依賴關系。
本文針對數據流圖的生成設計了算法,如下所示為數據流圖生成算法的偽代碼,算法輸入為1.2 節得到的運算操作表Operate,輸出為數據流圖Graph,整體過程為構建操作表中各操作的父子節點關系,具體生成過程如下。
本文采用高級語言C++,屏蔽掉了可重構密碼邏輯陣列的內部結構,便于非專業人員使用以編寫代碼,但為了使得代碼更好地在可重構密碼陣列上運行,在編譯前端時還需進行具體的分析和優化。從密碼算法特征和陣列內部結構來看,密碼算法中某些特殊運算如S盒替換運算、比特置換等運算在可重構密碼陣列中可當作單步算子進行計算,而在C++編寫的代碼中,因編寫人員的不同,可能會有多種方式編寫代碼來實現上述算子的功能。那么在生成中間格式時,需對上述得到的數據流圖進行檢測,以識別相應子圖所對應的功能。
本文對于代碼相似性檢測問題,提出一種以圖嵌入與注意力機制結合的方法。圖嵌入方法將代碼轉化的數據流圖轉化為低維embedding降維,并提取出特征向量[13-15],圖注意力可對周圍鄰居節點的特征進行聚合[16-18]。為提高子圖識別的準確度,在圖嵌入的基礎上,加入圖注意力機制構建節點與其鄰接節點的注意力系數,然后聚合鄰居節點的特征以優化當前節點的特征向量,最后對子圖所含節點的向量使用加權平均得到整張圖的向量。
2.2.1 基于注意力的圖嵌入模型
圖嵌入的目的就是將高維的圖數據轉化為低維稠密向量,并且保留原圖的結構特征。圖嵌入預定義一個嵌入維數D(D遠小于節點數量N),使得G轉換到D維空間[19]。在圖2 所示的基于GAT 和注意力機制的圖嵌入模型中,首先將數據流圖數輸入GAT 網絡中進行運算以獲得有依賴關系的節點對間注意力權重與節點特征向量,再根據權重采取隨機游走策略生成多個節點路徑,并輸入deepwalk 圖嵌入模型中生成節點特征向量,最后使用Attention注意力機制獲得圖嵌入向量展示。

圖2 基于注意力機制的圖嵌入模型Fig.2 Graph embedding model based on attention mechanism
在進行運算之前,需明確圖的輸入。給定一個圖G=(V,E),其中V為圖中節點集合,E代表圖中所有邊,可以對每個節點采用一個D維的特征向量表示。為了使得節點特征參與運算,需提取出圖中節點的特征表示。數據流圖中節點主要由AG、BP、NBF、LG、LT等不同運算類型組成,圖3(a)中不同類型節點具有不同的屬性,圖3(b)則表示由不同的節點屬性所組成的圖,且采用one-hot編碼。

圖3 圖輸入示例Fig.3 Figure input example
2.2.2 GAT網絡模塊
在獲得圖的輸入形式后,就可以通過GAT 圖注意力網絡獲得節點對間的注意力權重。注意力權重需同時考慮兩個節點的影響,那么其表達公式如下所示:
其中,公式(1)中顯示節點j對節點i的影響,hi和hj分別代表節點i和j的特征表示,W為投影矩陣,用于對節點進行特征維度的變換,||表示向量拼接操作,在這個過程中特征向量進行了可學習的線性映射。
公式(2)中LeakyReLU為激活函數,使公式(1)中得到的向量映射為一個標量,最后使用公式(3)中的softmax進行歸一化操作,其中Ni為節點i的所有鄰居節點。公式(4)利用歸一化后的注意力權重,計算與鄰居節點特征的加權平均,從而優化當前節點的特征向量。后續GAT中將以公式(3)和公式(4)不斷優化注意力權重系數與特征向量。
2.2.3 圖嵌入網絡模塊
獲得權重系數后,本文采用基于隨機游走的deepwalk 進行圖嵌入,在進行隨機游走時采用AliasTable 方法。本文的數據流圖為有向數據流圖,采用C_Table 列表存儲每個節點的子節點,那么游走的節點就從子節點中進行隨機選取,最終組成多條路徑,并生成節點的嵌入向量。
如圖4中所示,為AliasTable轉移策略。假設有A、B、C、D四個轉移節點,把轉移概率想象成等長度的線段,并且根據可轉移節點想象成N份,那么優化時采取多缺少補的策略逐步轉化為圖4(b)所示的等長度轉移表。為使得選取過程更快,AliasTable 方法用1 表示轉移表的長度,隨機選擇一個[0,1]的隨機數random,以圖4(b)為例,若0<random<1/6就選擇節點A轉移,1/6<random<1/4就選擇節點B轉移。經過隨機游走后將產生的多條路徑輸入到deepwalk 圖嵌入網絡中將生成K條特征向量。

圖4 AliasTable轉移策略Fig.4 AliasTable migration policy
2.2.4 注意力機制模塊
由上述GAT網絡模塊與圖嵌入模塊分別得到節點特征向量Gi、Di,為充分利用從不同方面得到的向量,則利用公式(5)進行相加得到最終向量xi,但由于不同的向量對整張圖的影響是不同的,因此需求得向量xi對應的權重,則這K向量的權重可由下式得到:
公式(6)中b為偏置向量,W為權重矩陣,為注意力向量,計算過后將得到該向量的注意力分數。那么為與其他進行比較,公式(7)用softmax進行歸一化的操作,顯然當計算出的αi越大時,該向量對整張圖的影響越大,最后如公式(8)利用αi計算出圖特征向量Z。最后采用余弦相似度度量代碼片段之間的相似值[20-22],并進行分類。
在代碼識別并替代后得到的數據流圖,還存在著冗余節點及節點并行度不足的缺點[23],其中冗余節點增加了數據流圖的長度,節點并行度決定著運算的性能。密碼算法代碼中可能存在函數,在進行語義分析時函數體與主代碼是分別進行分析的,因此為保證密碼算法數據流圖的完整,需用函數數據流圖替換對應的函數節點,獲得完整數據流圖后。本節采用函數展開、冗余節點消除與數據流圖分層的順序對數據流圖進行優化。
2.3.1 函數展開
對密碼算法代碼進行分析可能會得到多個數據流圖,分別為主代碼和函數體生成,而函數在主代碼數據流圖Graph中為一個運算節點,因此為得到完整的數據流圖,需將函數代表的運算填補到該函數節點,即函數展開方式。函數展開是用相應的數據流圖替代函數節點,并不會影響函數體數據流圖內的連接關系,關鍵是主代碼中函數節點的源操作數、目的操作數如何替代函數體的參數與返回值,并建立運算節點間的連接關系。
圖5(a)展示了函數在代碼中的使用方式,即可將返回值直接賦值,也可直接參與運算。進行函數展開主要包括如下三個方面:

圖5 函數展開方式Fig.5 Function expansion
(1)構造函數操作數、參數連接關系
將函數節點分為兩個賦值節點,兩節點間為函數體。具體過程如圖5(b)所示,將源操作數與函數體參數構成賦值語句A1;函數節點為運算節點,直接將返回值替代函數參與運算,構成語句A2。
(2)消除編號、變量名沖突
對函數體數據流圖中的節點標志Tag 進行重新編號,同時若定義的變量名存在于主代碼中需重新構造,這是為避免編號值、變量名重復,造成數據流圖混亂。
(3)構造A1、A2 父子節點
根據原函數節點的父子節點,重新構造A1 與其父節點,A2 與其子節點的連接關系,展開后主代碼數據流圖填補完整。
2.3.2 冗余節點消除
目前數據流圖Graph 中還存在著許多不影響運算結果的節點,也就是冗余節點。冗余節點主要是由賦值語句,及可計算的運算語句構成的。運算語句目的操作數可經由計算得到值,賦值語句作為中轉節點,連接不同運算節點。冗余節點的兩種形式如圖6所示。
為簡化數據流圖Graph,需消除冗余節點。對于圖6(a)運算冗余,由于其可計算性,依據循環變量值進行計算得到目的值,并替換此次循環內部所有目的值,如圖6所示“keys[index-1]”,若當前s為0可得目的值index為4,替換后可得“keys[3]”,經由簡化后不僅去除了冗余節點,還優化了循環內部運算。
對于循環中的賦值語句冗余節點如圖6(b)中所示,r是由tmp2 進行賦值的,因此r可用tmp2 代替。那么為消除循環內的賦值語句,可構建其父節點與子節點兩者間的連接,以簡化數據流圖。
2.3.3 數據流圖分層
本文為提取數據流圖間節點的并行性,設計了數據流圖分層算法。如下所示為數據流圖分層的偽代碼,算法利用數據流圖Graph作為輸入,以分層后的數據流圖Graph_Level為輸出。
若節點中源操作數為外部輸入,數據流圖生成的Graph不考慮其連接關系。若父節點為空即運算數據都為外部輸入,則為無前驅節點。本文算法以無前驅節點作為并行的依據,將無前驅的節點作為一層,此后刪除該層節點與其子節點的連接關系,從剩余的節點中選擇新的無前驅節點作為一層,直到數據流圖為空。
為驗證可重構密碼處理器編譯前端的有效性,將從詞法、語法、語法分析器功能測試,以及數據流圖生成與優化兩大部分進行測試。本文使用C++在VSCODE 平臺上編寫代碼,并基于QT 圖形用戶界面開發框架綜合所研究內容,設計一款CRCLA 前端測試平臺。本節選取典型的密碼算法在測試平臺上進行中間格式生成實驗,實驗運行環境為Intel Core i5-6300HQ@ 2.30 GHz內存。
詞法分析器對輸入的密碼算法源代碼進行分析,得到所有字符串對應的標識,語法分析器依據語法規則識別出字符串間的關系,通過語義分析提取出關鍵信息。使用測試用例在軟件平臺上進行詞法、語法分析測試,所得結果如圖7所示。從圖中可知,分析器將輸入的詞素流,轉換成對應的標識,并依據語法規則生成語法樹,經過比對語法樹與對應的語句完全對應。

圖7 詞法、語法分析結果Fig.7 Results of lexical and grammatical analysis
通過對測試結果的分析,可以發現字符流可以被正確識別,如圖中左側的for 循環,其循環變量“s”與循環值“9”在右圖中被正確識別為變量ID與整數INT。循環內部的第一條運算語句其目的操作數“Msg”、等號“=”被正確識別為ID、ASSIGNOP。該測試表明無論是循環、運算語句都能識別正確。
對于語法樹結構,可以看到按照語法規則識別從標志Statement 開始,以SEMI 結束,中間為語句中提取出的關鍵信息,相鄰兩行不對齊表父子節點,對齊為兄弟節點。分析結果顯示提取出了用例中的所有關鍵信息,語法樹結構正確。
將圖7中的語法樹作為識別對象,根據語法樹結構編寫語義分析器,目的是從中提取出語句的關鍵信息,如運算操作符、函數名,以及源操作數、目的操作數等,并組成操作表。操作表可為后面數據流圖的生成提供必要信息,語義分析后得到的操作表如圖8所示。

圖8 語義分析結果Fig.8 Semantic analysis results
圖8 中的操作表與圖7 左側的for 循環對比對可以看到循環已被展開,且圖8 中的每條操作存儲著操作符、變量名及數組位置。經過比對可發現操作表中操作的順序及其存儲信息存放正確,接下來可依據該操作表進行數據流圖的生成與優化。
從操作表與測試用例對比中可以看到循環已被展開,那么以存儲正確的操作表為輸入,接下來可進行數據流圖的生成與優化,根據本文設計的數據流圖生成算法得到數據流圖Graph。
如圖9(a)所示測試采用DES加密密碼算法中的單次循環,經過數據流圖生成后將會得到如圖9(b)所示的數據流圖Graph,Graph中的元素包括節點標志、父母節點、子節點與運算類型FU,從數據中可以分析出節點間的連接關系。與測試用例進行比對,數據流圖生成正確。

圖9 數據流圖生成流程Fig.9 Data flow chart generation process
3.2.1 代碼檢測實驗與分析
為研究本文基于注意力的圖嵌入模型對代碼識別的效果,本文將其與deepwalk、GAT 網絡在同樣的實驗條件下進行對比,并進行分析。實驗使用BigClone-Bench代碼克隆數據集,從中提取出克隆代碼片段及克隆對的類別,并且將提取出的數據以8∶2的比例分割為訓練集和測試集,在進行測試前先對相應的代碼片段預處理,生成數據流圖。接著對數據集進行標注,功能相似的標注為1,反之為0。測試結果為相似功能測試,從同功能測試數據集中抽取5個代碼對,進行排列組合后生成10 組測試用例,并送入上述3 個模型中進行測試,測試結果如表1所示。
從表中可以看出本文提出的代碼檢測模型,對同種類代碼檢測的相似度都在80%以上,高于單獨deepwalk、GAT 網絡的檢測結果。deepwalk 采取隨機游走的策略雖然可以盡可能地探知上下文結構,但是代碼中存在許多不重要的節點,從而產生了許多不必要的噪聲影響結果,在GAT 網絡中,當前節點聚合了鄰居節點的特征,但只能獲得相鄰的一階鄰居,而無法影響過長的N階鄰居節點,影響了對整體結構特征的聚合。
本文的基于注意力的圖嵌入模型,結合了兩者的特點,首先提取出當前節點對其鄰居節點的注意力權重,并在圖嵌入網絡中以此注意力權重構建有價值的節點序列,從而生成節點特征向量,最后聚合了GAT和圖嵌入的特征向量能夠充分代表當前代碼片段的特征,模型較高的識別相似度有利于功能分類的正確性。
為測試對功能進行分類性能,將與deepwalk、node2vec、GAT經典算法進行分類性能的比較實驗。實驗中采取10折交叉驗證(10-fold cross validation,10-CV)來對分類性能的準確率(Precision)、召回率(Recall)、F1等結果進行全面評估,具體的計算公式如下所示:
公式中TP為真值與預測值為正值1;FP為真值為假值0,預測值為正值1;FN為真值為1,預測值為0;TN為真值與預測都為0;公式(9)針對預測結果而言,預測正例的樣本中有多少是真正正例的;公式(10)針對原來樣本而言,代表正例有多少被預測成功了;F1 為考慮Precision與Recall影響的運算結果。最終的實驗結果如表2所示。

表2 分類性能對比Table 2 Classification performance comparison
從表中可以看出,本文的方法取得了較好的分類性能,在Precision、Recall、F1 三個指標均取得了性能的提升,以上實驗結果表示本文提出的模型可以很好地提取出節點之間的隱含關系特征,很大程度提升了功能分類預測的效果。
3.2.2 數據流圖優化測試
在數據流圖初始生成后,會存在各種缺陷,若不進行優化,會對后續的映射產生各種不利影響,因此需對生成后的數據流圖進行相應優化。數據流圖首先展開函數節點,消除冗余節點,最后采用數據流圖分層算法進行并行化,具體的優化過程如圖10所示。

圖10 數據流圖優化流程Fig.10 Data flow diagram optimization process
如圖10(a)所示采用包含函數和循環的一段代碼作為測試用例,將循環體展開,經數據流圖生成后可得到圖10(b)所示的數據流圖,虛線框中包含有可展開的函數節點,與函數體對應的數據流圖。經函數展開后得到圖10(c)所示的數據流圖,虛線框中為展開后的函數節點,框中ASSIGN 節點為函數參數賦值語句,在測試用例中對應的為“W1,W2=tmp0,tmp1”,函數體的返回參數W直接參與運算。
由于數據流圖中的ASSIGN語句為冗余節點,進行優化可縮減數據流圖的規模,同時為提取出節點間的并行性,采用數據流圖分層算法進行分層,運行后可得到圖10(d)所示的數據流圖。經數據流圖優化過后,不僅提取出節點間的并行性,還精簡了數據流圖,并且數據流圖與測試用例相對應。
為檢驗本文提出的CRCLA 編譯前端的優勢,本節從優化后的數據流圖長度,以及最終映射在CRCLA 上的密碼算法執行性能上進行對比。如表3所示,在處理相同的以高級語言C++編寫的密碼算法代碼時,以前面介紹的面向可重構結構的編譯器REmus、Spatial、TIRAMISU 與面向眾核結構的TAP-S 編譯器作為比較對象,本文生成的DFG長度只占其他編譯器的十分之一左右。

表3 不同密碼算法下的DFG長度Table 3 Length of DFG under different password algorithms
這是因為在實際編寫密碼算法程序的過程中,高級語言C++可以不同方式實現密碼算法中的特殊函數運算如S盒、比特置換,但這些特殊功能在本文的CRCLA中可用單算子進行實現。其他編譯器沒有對此進行相應優化,在對源代碼進行分析時依然采用原有的數據結構,而本文的編譯器采取代碼識別的方法對特殊功能結構進行識別并替代,因此其他編譯器獲得的DFG 長度遠大于本文。
此外,本文取得的數據流圖由于將特殊功能結構進行替換,從而避免了大量非必要的運算節點映射在CRCLA 中。因此在面對特殊功能如S 盒等,本文用單條運算映射,而其他編譯器則需用一串運算節點進行映射。在這種情況下,本文映射密碼算法到CRCLA上時,CRCLA 可用更少的計算步驟與時間進行運行,從而提高了映射性能。
為精確展示本文前端的有效性,以其他編譯器前端分析產生的數據流圖作為輸入,將其映射到本文的CRCLA 硬件上進行仿真測試,最終得到的執行性能如表4所示。相比于其他編譯器,本文前端獲得的數據流圖在CRCLA上執行的性能平均提高了約37%。

表4 不同密碼算法下的映射性能對比Table 4 Comparison of mapping performance under different password algorithms 單位:Mbit/s
本文針對粗粒度可重構密碼邏輯陣列,設計了一款自動化編譯前端工具。該前端設計包含詞法、語法、語義分析器,可提取出源代碼中的關鍵信息并生成數據流圖。利用基于注意力機制的圖嵌入模型識別圖結構,并用同功能的算子進行替換,解決如S 盒替換函數在CRCLA中可用單算子代替實現的問題。最終使用內聯替換、冗余移除、數據流圖分層算法等技術解決數據流圖并行度不足與過長問題。該編譯前端具有自動化生成適用于CRCLA 的數據流圖,為可重構密碼邏輯陣列的使用提供強有力的支持。實驗結果驗證了該編譯前端工具自動化與高性能的優點。