在大眾已經習慣的計算模式中,處理器和專用集成電路(ASIC)一直是兩大主流。伴隨著應用領域特別是嵌入式環境對系統的性能、能耗、上市時間等指標需求的不斷提高,傳統的計算模式暴露出了種種弊端。可重構計算技術集中了處理器和專用集成電路的優勢,能夠提供高效靈活的計算能力,自上世紀九十年代以來越來越受到業界的重視。不過,目前對可重構計算技術的研究仍舊處于初期階段,還有很多難題等待解決。
可重構沖擊傳統計算模式
面臨一個應用,如何去實現它?軟件設計者會使用編程語言編寫一段代碼,將其編譯后在處理器上執行;硬件設計者則會利用原理圖或者硬件描述語言進行設計,然后以專用集成電路的方式實現。處理器和專用集成電路已經成為了傳統計算模式的兩大主流,我們也已經習慣了這兩種計算模式。但在和這兩位“老朋友”打交道的時候,仍舊會時不時感覺到有很多不盡如人意的地方。
處理器(包括通用處理器和各種專用的嵌入式處理器)計算模式的特點在于它們都具有各自的指令集,通過執行指令集中的相關指令來完成計算,改寫軟件指令就能改變系統實現的功能,而不用去改動底層的硬件環境。但處理器的運算速度要比ASIC慢很多,這主要是因為處理器必須從存儲器中讀取每條指令,將其譯碼后再執行,因而每個獨立的操作具有更高的執行開銷。另外,處理器的指令集是由處理器自身體系結構決定的,沒有用專門指令實現的操作只能使用已有的指令組合來處理,這也增加了執行的開銷。
?
?
專用集成電路是針對某一特定應用專門設計的硬件電路。專用集成電路計算模式的特點在于用硬件來實現應用的操作。因為針對特定應用設計,所以在執行相應應用時具有很高的速度、效率和精度。但其缺陷在于開發周期太長,代價太高。而且硬件電路一旦制作好以后是不能夠被隨意改動的。這就意味著如果功能的需求發生了變化,就需要重新設計和重新加工新的專用集成電路芯片。哪怕只是芯片上的很小一部分線路需要修改,也要重新制作整個芯片。如果針對各種不同的應用都專門設計專用的電路芯片,就會帶來高昂的成本。
由此可見,現有的主流計算模式中存在的主要問題是:處理器方式能夠靈活地實現各種應用,但卻在性能上有缺陷;而硬件邏輯實現性能雖然高,但靈活性卻很差。為了在計算性能和實現靈活性上做一個很好的權衡,可重構計算(Reconfigurable Computing)技術浮出了水面。
技術發展現狀
可重構計算的概念早在上個世紀六七十年代就有學者以不同的表述方式提出過。由于技術條件的限制,直到九十年代中期才逐漸興起。目前比較權威的定義是“設立物理控制點定制硬件該如何工作,通過改動這些控制點使用戶能夠使用相同的硬件執行不同的應用”。當前已經有多個基于可重構計算技術的原型系統被開發出來,運用在自動目標識別、串匹配、數據壓縮等應用領域,取得了非常好的效果。最近幾年,可重構計算技術已經邁過了探索階段,研究者們開始更深入地對可重構計算通用模型進行研究,為后續的可重構計算系統的廣泛應用打好基礎。
?
?
當前在研的可重構計算系統往往由一個或多個可重構邏輯器件以協處理器的方式和一個通用處理器耦合而成,如圖2所示。這里的可重構邏輯器件可以是系統定制的,也可以是商業化的部件(如FPGA芯片)。對可重構邏輯器件進行的配置可以使它實現相應的功能,能夠以準ASIC的計算速度對應用中的計算密集部分給予加速執行以提高整個應用的執行性能。系統中的通用處理器主要負責對可重構邏輯器件進行資源管理和任務調度。另外,應用中存在的那些不能夠采用硬件邏輯實現或者采用硬件實現也不會帶來很大性能收益的部分也需要在通用處理器上編程實現,例如遞歸操作。因為每一層遞歸都需要使用相同的資源,而遞歸的層數又往往不能預先知道,硬件無法預留夠充足的資源,所以此類操作適合在通用處理器上實現。
可重構計算技術的研究對可重構邏輯器件的開發有著極強的依賴性。正是由于可重構計算系統中使用了可編程邏輯器件,才使得它能夠高效靈活地實現多種應用。在研究的早期,研究者們受到可重構邏輯器件的限制,并不能開展很多卓有成效的工作。因為缺乏統一的可重構硬件平臺,一些研究機構針對某些特定應用開發了自己相應的可重構邏輯器件。這些器件缺乏一致的模型,彼此間不兼容,不具有普適性。而專門的可重構邏輯器件開發帶來的高昂代價也給可重構計算技術的普及設置了巨大的障礙。伴隨著超大規模集成電路技術的不斷進步,集成在芯片上的門電路數目可以做到“數以百萬計”,這使得業界能夠設計出功能強大結構復雜的可重構邏輯器件,也昭示著可重構計算技術迎來了發展的大好時機。當前的很多商業化可重構邏輯器件具備有充足的可編程邏輯資源,有的芯片上還集成了乘法器、RAM等結構,在最近的高端產品上更是集成了處理器核來增強系統的功能和性能。
當前,可重構計算技術的研究焦點在于動態可重構技術特別是運行時(run-time)可重構技術。所謂動態可重構技術,是相對于靜態可重構技術而言的。靜態可重構技術是指在可重構計算系統開始執行任務時,一次性將可重構邏輯器件配置為系統所需的某個或幾個功能。這些配置好的功能在整個任務執行期間不會被改變。直到系統完成該任務后,可重構邏輯器件才可以被配置為其他的功能去完成別的任務。動態可重構技術與此相反,在任務執行過程中可重構邏輯器件的功能可以被隨時改變。
運行時可重構技術建立在動態可重構技術的基礎之上,它能夠在器件上已有任務正常執行的同時對器件的空閑資源進行新的配置。運行時可重構技術可以根據應用實現中的實際需求,對可重構邏輯器件上的資源做相應的調配。它能夠更充分地利用可重構邏輯器件上的資源,并且使硬件去“適應”應用的需求做調整成為可能。運行時可重構計算技術的研究還存在很多技術難點,有的已經造成了當前可重構計算技術發展的瓶頸。
技術優勢和應用前景
可重構計算技術除了具有較高的性能和較大的靈活性以外,還具有很多其他優勢,例如系統能耗低、可靠性高等等。這些優勢使得可重構計算技術在各個應用領域特別是嵌入式應用領域有著廣闊的應用前景。
在過去的研究中已經發現,很多嵌入式應用,例如多媒體應用、加/解密應用以及通信應用等都具有它們固有的執行特征。
多媒體應用具有較多的整數算術指令,這主要是因為大多數多媒體應用中執行的都是定點數據上的算術密集型信號處理操作。
加/解密應用中主要是位運算操作,而且在執行過程中極少出現分支指令,位運算操作可以通過移位操作和邏輯運算來實現。
通信應用的特征是使用大量的分支指令,這主要是由通信應用中復雜的控制流導致的,但其中較少使用到算術和移位等操作。
可以看到,這幾類應用都是屬于計算密集型應用,可以利用硬件加速計算核心的執行來提高整個應用的性能。應用中較少使用到浮點算術操作,這一點也正好適合利用硬件實現。在多媒體和通信應用中,大量的操作都是針對寬度為一個或多個字節的數據進行的,而在加/解密應用中主要處理的是寬度為1的位數據。針對應用中的這些差異,當前的商業化可重構邏輯器件中提供了大量的不同粒度的資源來支持不同數據寬度的計算。因此,上述在嵌入式領域中的主流應用都非常適合利用可重構計算技術實現。
可重構計算技術具有很好的低能耗特征。在傳統的處理器計算模式中,大量的能耗耗費在指令的取指、譯碼過程中;IC模式則因為在硬件電路的設計過程中針對特定應用進行充分優化,具有較低的能耗損失。在可重構計算系統中,能耗最高的計算核心部分轉移到了可重構邏輯器件上執行,減輕了通用處理器的負擔,減少了相關的能耗。當應用在可重構邏輯器件上執行時,可重構邏輯器件還可以利用自己的器件特性做調整來達到減少系統能耗的目的。例如,在現有的商業化可重構邏輯器件中,芯片上同時存在著多個時鐘域,不同的時鐘域可以具有各自的時鐘頻率。可重構邏輯器件能夠為芯片上用于執行應用的那部分資源提供高的時鐘頻率以提高性能,同時可以將其他閑置部分的時鐘頻率降低以降低能耗,甚至有的器件可以利用門控時鐘對芯片上沒有在執行計算任務的部分給予斷電處理,進一步降低整個系統的能耗損失。
可重構計算技術還具有天生的容錯(fault-tolerant)特性。因為可重構邏輯器件的可重構特性為錯誤的檢測、診斷提供了方便。同時,可重構邏輯器件擁有大量的可重構邏輯資源,又為錯誤的掩蓋、修復提供了基礎。當可重構邏輯器件上出現錯誤,導致系統故障的時候,可以將可重構邏輯器件上的一部分配置為測試模式發生器,對器件上的某些區域做測試,同時還可以利用器件上的其他資源對測試結果進行分析,以得到具體的錯誤信息。一旦將錯誤定位后,可以采用對可重構邏輯器件重新配置的方法,避開產生錯誤的芯片區域,利用其周邊的其他可重構邏輯資源組合替代原本在出錯區域上實現的功能。可重構計算系統的高容錯性和極強的可靠性滿足了惡劣的工作環境對計算系統的苛刻要求,因此當前在航空航天軍事等領域對可重構計算系統的需求逐漸增大,例如NASA就已經將運行時可重構計算系統的研發和應用列入了2005年的火星探測計劃當中。
可重構計算技術大大縮短了產品上市時間。可重構邏輯器件在很長一段時間里主要用于進行硬件系統的原型設計。這一點在當前新的應用需求下有了進一步發展。利用可重構計算技術的原型系統在經過針對不同應用的不同配置后就成為了相應的產品可以直接投放市場,這消除了需要針對各個應用進行單獨設計帶來的時間開銷,同時減少了設計中出現錯誤的概率,系統的可靠性也得到了提高。另外,當前的很多應用領域瞬息萬變,各種新標準新應用層出不窮。在這種情況下,可重構計算系統能夠“以不變應萬變”,仍舊利用現有資源,根據實際情況及時調整系統功能以滿足市場需求。
在一些關鍵任務執行中,很多任務要到開始前一刻才能最終確定,可重構計算系統的存在無疑為這類應用也提供了有力的支持。仍舊以NASA為例,他們在航天飛機發射前的幾個小時內,才會把當前的一些重要信息配置到機上的可重構邏輯器件中。在火星車的設計中,也在大量關鍵部件上使用了可重構邏輯器件,以滿足系統可能的變動要求。
可重構計算技術還有很多優勢。例如,相對于傳統的一個平臺支持一個應用的做法,可重構計算系統中的同一套硬件設備可以支持多個應用,大大減輕了系統重量,這對于那些對重量有著嚴格要求的應用領域非常有利。比如,嵌入式領域的“穿戴計算”,還有航天領域里的衛星系統等等。
當前的可重構計算技術主要還是用于尖端技術領域中的計算平臺,但隨著可重構邏輯器件成本逐漸降低,運行時可重構計算技術不斷完善,我們有理由相信可重構計算技術具備的種種優勢會使其在更多的領域里大有作為。
面臨的關鍵難題
前文已經提到,可重構計算技術的研究焦點是運行時可重構技術。對運行時可重構技術的研究和應用主要是為了解決在下述兩種情況下可重構計算系統中存在的問題。
第一種情況是為了減少應用執行的啟動時間。可重構計算系統可以先在器件上配置好應用執行的啟動所必需的功能,讓應用運行起來。在應用開始執行的同時再在器件的其他部分上配置出后續執行所需要的功能,而不必等待整個應用都配置完成后才開始運行,如圖3所示。
?
?
第二種情況是利用有限的資源處理大規模應用。如果某個規模較大的應用在實現時所需的可重構邏輯資源超過了可重構邏輯器件可以供給的最大資源量,這時可重構計算系統會將大的應用劃分為多個在執行時具有先后次序的子部分。在應用執行過程中,某個先執行的子部分完成工作后,可以在其占據的器件資源上按次序配置后續的應用子部分,以此來保證應用的正確實現,如圖4所示。
?
?
運行時可重構技術研究的深入和成熟還能夠促進其他相關領域的計算技術得到長足進展,例如進化硬件和系統容錯技術等。但在當前,運行時可重構技術還面臨著一些關鍵問題亟待解決:
可重構邏輯器件的支持。可重構計算技術的發展對可重構邏輯器件有著很強的依賴性。當前的器件功能和性能都有了很大提升,已經能夠對運行時可重構技術提供相關支持。例如,運行時可重構計算技術需要能夠在不影響任務正常執行的情況下,對器件的空閑資源進行配置。相應的,當前的商業可重構邏輯器件能夠提供部分重構(partial-reconfiguration)的能力。但是現在存在的最大問題在于器件配置過程耗費的時間比較長。隨著芯片上的可重構邏輯資源數量越來越多,相應的配置文件規模也越來越大,配置過程需要毫秒量級的時間,但是可重構邏輯器件上的應用是以微/納秒量級的時間在執行,因此配置過程成為了整個系統的瓶頸。經常會發生應用執行到一半,但后續功能還沒有配置好的情況。這時候應用的執行可能會使用到錯誤的配置,因此它必須等待,這極大地降低了系統性能。還有一種可重構邏輯器件能夠為運行時可重構技術提供支持,它被稱做多上下文(multi-context)器件。這種器件的特點在于,它將器件的多個配置文件存儲在芯片上,當需要發生功能切換時,能夠在單周期內完成器件的配置。但是這種器件技術目前尚未成熟。
軟/硬件任務的劃分。在可重構計算系統中,存在著可重構邏輯器件和通用處理器兩大部分。如何使一個應用高效運行在可重構計算系統上,首先就需要對應用進行任務劃分,將軟/硬件任務分別映射到通用處理器和可重構邏輯器件上執行。在任務的劃分中,要充分考慮到任務執行的特征,把那些負擔繁重并且性能要求高的計算任務劃分為硬件任務,同時把那些不適合用硬件加速執行的任務和對硬件資源進行管理的任務劃分為軟件任務。軟/硬件任務間的通信是一個需要重點思考的問題。當前的很多可重構計算系統采用的都是軟/硬件任務非并行執行的方式。當軟件任務執行到某個點的時候,會將應用執行的控制權交給可重構邏輯器件,然后軟件任務會一直等待可重構邏輯器件將計算結果和控制權返回給通用處理器再繼續執行。這無疑降低了系統的性能。更先進的做法是軟件任務可以和硬件任務并行執行,兩者間以中斷或者其他方式互相通告狀態和傳遞數據。但是這么做會引入數據一致性、任務間同步等問題,加大了系統管理的難度。軟/硬件任務的劃分一直以來都是在嵌入式系統研究中的難點,它的好壞直接影響到了應用的執行性能,但至今還是缺乏成熟的算法支持。
任務調度的支持。任務調度是傳統操作系統中的關鍵技術。在運行時可重構計算系統中,調度算法的好壞也直接影響到系統性能的高低。特別是針對大規模應用中的硬件任務不能夠一次性地配置到器件上的情況,任務調度顯得尤其重要。任務調度主要有兩個目的:一個是優化器件的配置序列,另一個是充分利用器件上的資源。任務調度器應該盡可能地將要同時執行或者先后執行次序比較緊密的任務一次性地調度到器件上,同時在將任務調出器件的時候也要考慮到任務是否會在后續執行中又被使用到。調度器對配置序列進行優化,能夠減少配置過程帶來的時間開銷,減輕配置時間太長給系統帶來的瓶頸影響。器件上的資源是非常寶貴的,在任務繁重的時候應該保證有盡可能多的資源加入到計算當中。而且在對器件進行部分配置的時候,也要重點考慮將那些當前空閑的資源配置為新的功能,以減少后面可能會導致的“抖動”(器件上的現有功能被新的配置覆蓋后,應用執行過程又需要該功能時只能再次將該功能重新配置到器件上)。另外,如果應用對于能耗要求較高,任務調度還需要注意到器件上各個時鐘域里的資源利用情況,可以將功能集中實現在某一區域以達到降低能耗的目的。在后續的運行時可重構技術的研究探索中,還有可能涉及到軟/硬件任務遷移(migration)的情況,這就對調度器提出了更高的要求。
未來方向
上述是當前的運行時可重構計算技術研究中需要解決的幾個關鍵問題,國內外已經有很多的機構都在潛心研究,希望能有所突破。雖然目前可重構計算技術已經有了很大的發展,但是為了能夠將它應用到更廣闊的空間,還需要做更多的工作。
并行的可重構計算系統架構。雖然可重構計算系統有著較高性能和極強的靈活性,但在很多應用場合中,還是會碰到一些問題。首先還是器件問題。相對于通用處理器,當前的主流可重構邏輯器件的頻率仍舊較低,這就對進一步加快應用執行性能產生了阻礙。其次,可重構計算系統不能很好地處理大型應用。因為系統處理能力和資源數量的約束,可重構計算系統對于大型應用的實現還存在著很多問題。最后是應用領域的獨特需求。目前在很多可重構計算系統適用的應用領域中,如穿戴計算、汽車電子等,系統分布化已經成為了趨勢,可重構計算系統務必要能夠滿足應用需求。基于以上幾點,開發并行的可重構計算系統架構已經成為今后必然的趨勢。并行的可重構計算系統中包含有多個可重構計算系統,它們彼此間以可重構的網絡相連接。并行可重構計算系統中存在著三個層次上的并行:第一是單個系統中可重構邏輯器件上的多個硬件任務間的并行;第二是單個系統中通用處理器上的軟件任務和可重構邏輯器件上的硬件任務間的并行;第三是各個系統間軟/硬件任務的并行。并行可重構計算系統中還存在著兩個層次上的重構:一個是單個系統內部的器件重構,另一個是各個系統間的互連重構。并行可重構計算系統的結構要比傳統的分布式并行系統復雜很多,給系統管理和應用帶來了很多新的難題。
統一的應用開發模型。當前可重構計算系統沒有被廣泛應用,還有一個很重要的因素就是現在的可重構計算系統并沒有提供給應用開發者統一的應用開發模型。因為可重構計算系統中有軟件任務和硬件任務的區分,而在應用開發者中占絕大多數的軟件程序員們缺乏對硬件平臺的理解和編寫硬件任務的能力。同時,軟件程序員和硬件設計者之間的溝通又往往不夠充分。這些都導致了應用開發者利用可重構計算技術時的困難重重。又因為目前可以構成可重構計算系統的硬件資源門類繁多,在一個系統上開發的應用缺乏良好的移植性,所以沒有一個很好的方法能夠幫助開發者們快速高效地開發應用。基于以上兩點,現在需要做的是將可重構計算系統的底層實現對應用開發者透明化,通過提供給應用開發者們統一的應用開發模型,使他們能夠按照慣常的開發流程進行可重構計算系統上的應用開發。他們編寫的代碼具有一定的可移植性,經過可重構系統集成開發環境處理后,可以直接在相應的可重構計算系統上運行。這個“統一化”的過程是復雜和困難的,但是如果希望可重構計算技術能夠深入人心,讓廣大應用開發者認可并使用可重構計算技術,那么這個過程就是必需的。
可重構計算技術是一項新興的能夠有效提高系統計算能力的技術。它的誕生是為了滿足人們對計算性能永無窮盡的需求,在很多領域都有著廣闊的應用前景。目前,可重構計算技術的研究尚處于初級階段,還有很多技術難題沒有得到圓滿解決。但是在可以預見的將來,伴隨著可重構邏輯器件技術的不斷進步,可重構計算技術一定能夠在更多的場合被應用,發揮出更多的效用。
評論
查看更多