Opencl編譯的制作方法
【專利摘要】本發(fā)明涉及OPENCL編譯。提供了用于增加集成電路(IC)的可編程邏輯的編譯過程的速度并且降低其處理耗力的系統(tǒng)和方法。例如,在一個實施例中,一種方法包括:獲取高級程序,其包括用于在集成電路(IC)的可編程邏輯上實現(xiàn)的計算機(jī)可讀指令;將高級程序轉(zhuǎn)換為表示執(zhí)行高級程序的功能所需的功能組件的低級代碼;基于高級程序,生成包括用于實現(xiàn)低級代碼的計算機(jī)可讀指令的主機(jī)程序;獲取對高級程序的修改;確定修改是否能夠由使用低級代碼的新主機(jī)程序?qū)崿F(xiàn);以及當(dāng)修改不能由使用低級代碼的新主機(jī)程序?qū)崿F(xiàn)時生成實現(xiàn)修改的新主機(jī)程序。
【專利說明】OPENCL編譯
【技術(shù)領(lǐng)域】
[0001]本公開總體涉及集成電路,比如現(xiàn)場可編程門陣列(FPGA)。更具體而言,本公開涉及集成電路(例如,F(xiàn)PGA)上的可編程邏輯的編譯。
【背景技術(shù)】
[0002]本節(jié)旨在向讀者介紹本【技術(shù)領(lǐng)域】的各個方面。相信這種討論有助于向讀者提供背景信息,以便有助于更好地理解本公開的各個方面。因此,應(yīng)當(dāng)明白,這些陳述應(yīng)該在這個意義下進(jìn)行解讀,而不是作為對現(xiàn)有技術(shù)的承認(rèn)。
[0003]集成電路(IC)采取各種形式。例如,現(xiàn)場可編程門陣列(FPGA)是意在作為相對通用器件的集成電路。FPGA可以包括邏輯,該邏輯可以在制造后進(jìn)行編程(例如進(jìn)行配置)以提供設(shè)計FPGA而支持的任何期望的功能。因此,F(xiàn)PGA包含可編程邏輯或邏輯塊,其可以根據(jù)設(shè)計者的設(shè)計被配置為在FPGA上執(zhí)行各種功能。此外,F(xiàn)PGA可以包括輸入/輸出(I/O)邏輯以及高速通信電路。例如,高速通信電路可以支持各種通信協(xié)議并可以包括高速收發(fā)器通道,通過該高速收發(fā)器通道,F(xiàn)PGA可以向FPGA外部電路發(fā)送串行數(shù)據(jù)和/或從FPGA外部電路接收串行數(shù)據(jù)。
[0004]在諸如FPGA的集成電路中,通常使用諸如VHDL或Verilog的低級/低層次(lowlevel)編程語言配置可編程邏輯。不幸的是,這些低級編程語言可能提供低級抽象,并且因此可能對可編程邏輯設(shè)計者造成開發(fā)障礙。諸如Open CL的高級/高層次(high level)編程語言有助于使可編程邏輯設(shè)計更加容易。高級程序用于生成對應(yīng)于低級編程語言的代碼。不幸的是,從高級編程語言到低級編程語言的轉(zhuǎn)換常利用大量時間和處理能力。實際上,這種轉(zhuǎn)換的編譯時間常?;ㄙM許多小時甚至幾天來完成,導(dǎo)致設(shè)計者生產(chǎn)率下降。
【發(fā)明內(nèi)容】
[0005]下面陳述了本文公開的某些實施例的概要。應(yīng)當(dāng)理解,呈現(xiàn)這些方面僅為了向讀者提供這些特定實施例的簡短概要,并且這些方面并不意在限制本公開的范圍。實際上,本公開可以包括下面未提出的各個方面。
[0006]現(xiàn)有實施例涉及用于通過多個編譯方法改善Open CL程序編譯時間的系統(tǒng)、方法及裝置。具體的,本實施例可以提供Open CL編譯器,所述Open CL編譯器提供完全初始編譯及增量編譯。初始編譯生成包括用于IC的可編程邏輯的硬件描述的編程內(nèi)核。有時,可編程邏輯設(shè)計者會實現(xiàn)設(shè)計改變。當(dāng)發(fā)生這些設(shè)計改變時,通過增量編譯,編譯器可以對由編程內(nèi)核所實現(xiàn)的指令進(jìn)行改變,而無需修改硬件描述,因此使設(shè)計改變所用的時間遠(yuǎn)小于每次發(fā)生設(shè)計改變時需要生成硬件描述的編譯方法。
[0007]上面提到的各種詳細(xì)特征可以與本公開的各個方面有關(guān)。進(jìn)一步的特征也可以加入到這些各個方面中。這些詳細(xì)特征及附加特征可以單獨地或以任何組合方式存在。例如,以下討論的與一個或多個所示實施例相關(guān)的各種特征可以單獨或以任何組合方式結(jié)合到本發(fā)明的任何上述方面。同樣,以上呈現(xiàn)的簡短概要只是意在使讀者熟悉本公開的實施例的某些方面和內(nèi)容,而不是限制到所要求的主題。
【專利附圖】
【附圖說明】
[0008]在閱讀以下詳細(xì)說明并參考附圖后,可以更好地理解本公開的各個方面,其中:
[0009]圖1是根據(jù)本公開的各個方面的典型Open CL編譯路徑的示例框圖,其說明了將高級編程語言寫成的程序傳播到IC的低級可編程邏輯的過程;
[0010]圖2是說明Open CL編譯器的時間密集型硬件生成周期的示例框圖;
[0011]圖3是根據(jù)實施例說明調(diào)用圖2的硬件生成周期的初始編譯過程的示例流程圖;
[0012]圖4是根據(jù)實施例說明從圖3的初始編譯得到的編程內(nèi)核的示例的示例框圖;
[0013]圖5根據(jù)本公開實施例描繪了說明不調(diào)用圖2的硬件生成周期的二次編譯過程的示例流程圖;
[0014]圖6是根據(jù)實施例說明改變到調(diào)用二次編譯(例如圖5中的一個)的高級程序的示例框圖;
[0015]圖7是根據(jù)本公開實施例說明改變到需要新初始編譯的高級程序的示例框圖;
[0016]圖8是根據(jù)本公開實施例說明改變到如下高級程序的示例框圖,在其中二次編譯可能是可行的,但是當(dāng)通過該二次編譯實現(xiàn)時,可能在效率邊界外;
[0017]圖9是根據(jù)實施例說明并行執(zhí)行的多個OpenCL線程的示例框圖;
[0018]圖10是根據(jù)實施例說明在由初始編譯定義的復(fù)雜和簡單的硬件定義之間的比較的示例框圖;
[0019]圖11是說明在其執(zhí)行流中使用多個內(nèi)核的主機(jī)程序20的示例調(diào)用圖;
[0020]圖12是根據(jù)實施例說明用于提高關(guān)鍵路徑效率的過程的示例流程圖;
[0021]圖13是說明通過使用現(xiàn)有內(nèi)核定義的未使用功能單元資源創(chuàng)建新的內(nèi)核的示例框圖;
[0022]圖14是說明通過使用多個現(xiàn)有內(nèi)核中定義的未使用功能單元資源創(chuàng)建的新內(nèi)核的示例框圖;
[0023]圖15是說明被轉(zhuǎn)換為不可編程硬件流水線的可編程內(nèi)核的示例框圖;以及
[0024]圖16是根據(jù)實施例說明具有設(shè)計分區(qū)的可編程邏輯的示例框圖。
【具體實施方式】
[0025]以下將描述一個或多個具體實施例。為了提供這些實施例的簡要說明,在說明書中并非描述實際實施方式的所有特征。應(yīng)當(dāng)理解,在任何這種實際實施方式的開發(fā)中,比如在任何工程或設(shè)計項目中,必須對許多特定實施方式做出決定,以實現(xiàn)開發(fā)者的具體目標(biāo),比如符合系統(tǒng)相關(guān)及業(yè)務(wù)相關(guān)的約束,這會隨著實施方式而變化。此外,應(yīng)當(dāng)理解,這種開發(fā)努力可能是復(fù)雜且耗時的,盡管如此,其對于受益于本公開的本技術(shù)人員仍是設(shè)計、制造以及生產(chǎn)的常規(guī)任務(wù)。
[0026]如以下進(jìn)一步詳細(xì)討論的,本公開的實施例總體涉及在Open CL編譯器中的高效編譯。傳統(tǒng)上,Open CL編譯器中的編譯包括生成實現(xiàn)Open CL程序所需的硬件組件的時間和資源密集循環(huán)。不幸的是,這個循環(huán)常常需要花費很多小時甚至幾天來完成,造成可編程邏輯設(shè)計者將高級代碼編譯為集成電路(IC)上的低級指令時的體驗不滿意。傳統(tǒng)上,對高級代碼的每個改變需要額外的時間密集型編譯。本文所討論的技術(shù)提供兩級編譯方案,其可以提供時間更高效的編譯。第一級,即初始編譯,其基于可編程邏輯設(shè)計者提供的高級程序生成編程內(nèi)核,該編程內(nèi)核可以包括在IC的可編程邏輯上實現(xiàn)的硬件描述。第二級,或二次編譯,其有助于后續(xù)對高級程序進(jìn)行改變。二次編譯使用修改的指令集,其可以實現(xiàn)在初始編譯中生成的硬件上,以實現(xiàn)后續(xù)改變。通過只修改指令集而不需修改硬件定義,可以顯著降低后續(xù)編譯時間,這是因為二次編譯可以去除為可編程邏輯生成硬件的時間密集型步驟。
[0027]記住了前述內(nèi)容,圖1是Open CL編譯路徑10的示例框圖,其說明高級程序被實現(xiàn)為集成電路(IC)的可編程邏輯(例如現(xiàn)場可編程門陣列(FPGA))上的低級代碼的路徑。
[0028]如圖所示,Open CL編譯路徑10開始于高級程序12。高級程序12可以包括由邏輯設(shè)計者實現(xiàn)的可編程邏輯??删幊踢壿嬁梢允且灾T如Open CL編程語言(例如,C++編程語言)的高級語言寫成的計算機(jī)可瀆指令,高級語言使得邏輯設(shè)計者能夠更有效且更容易地提供編程指令,以實現(xiàn)集成電路(IC)的一組可編程邏輯,而不需要低級計算機(jī)編程技能(例如,Verilog或VHDL編程技能)。由于Open CL與諸如C++的其他高級編程語言相當(dāng)類似,所以與需要學(xué)習(xí)不熟悉的低級編程語言的設(shè)計者相比,熟悉這種編程語言的可編程邏輯設(shè)計者將新功能實現(xiàn)到IC中的學(xué)習(xí)曲線降低。
[0029]然而,IC設(shè)計軟件14,比如Altera?的Quartus II,通常使用低級代碼而不是高級編程語言指令來操作。因此,編譯器16,如OpenCL編譯器,可以有助于解釋高級程序12,以生成中間低級別的代碼18和/或為低級代碼18提供實現(xiàn)指令的主機(jī)程序20。低級代碼18可以是用諸如Verilog的硬件描述語言(HDL)寫成的編程代碼。低級代碼18可以定義一組硬件組件邏輯,其有助于實現(xiàn)IC上的高級程序12。設(shè)計軟件14可以接著解釋低級代碼18,以生成包括實現(xiàn)低級代碼18所必需的硬件組件的可編程邏輯。一旦設(shè)計軟件14生成了適當(dāng)?shù)目删幊踢壿?,該可編程邏輯就被實現(xiàn)在IC22(例如,F(xiàn)PGA)上。
[0030]不幸的是,如上所討論的,生成可編程邏輯(包括定義實現(xiàn)低級代碼18所必需的硬件組件)常常是時間非常密集型的過程。實際上,該過程可能花費許多小時或幾天來生成這種合適的可編程邏輯。為了提供對該時間密集型過程的更詳細(xì)了解,圖2說明有助于確定IC上可編程邏輯的硬件定義的示例硬件組件生成循環(huán)。如上所討論的,邏輯設(shè)計者可以實現(xiàn)高級程序12,其由編譯器轉(zhuǎn)換為HDL低級代碼18。設(shè)計軟件14可以解釋低級代碼18并生成適當(dāng)?shù)目删幊踢壿?,以便實現(xiàn)在IC22上。為了生成可編程邏輯,設(shè)計軟件14可以使用計算及時間密集的時序收斂(closure)循環(huán)50。時序收斂循環(huán)50可以包括綜合52、布局布線54、時序分析56和/或設(shè)計改變58。綜合52包括確定要在IC的可編程邏輯上實現(xiàn)的可能的硬件組件列表,使得HDL程序可以在IC上執(zhí)行。在布局布線54期間,設(shè)計軟件14試圖高效地放置在綜合期間所確定的硬件組件及路由信號,使得硬件組件的存儲和速度是高效的,使得可以提高最大工作頻率(Fmax)。在時序分析56期間,設(shè)計軟件14確定布局布線的硬件元件及信號的Fmax是否提供在由可編程邏輯設(shè)計者或設(shè)計軟件14指定的時序參數(shù)范圍內(nèi)的Fmax。如果布局布線的硬件元件及信號不符合時序參數(shù),則設(shè)計軟件14實現(xiàn)設(shè)計改變58,將編程邏輯修改為包括一組不同的硬件組件。重復(fù)綜合52,使用一組不同的硬件組件和/或布局布線配置。重復(fù)時序收斂循環(huán)50,直到布局布線的硬件組件及信號符合時序參數(shù)。不幸的是,可能需要多次重復(fù)時序收斂循環(huán)50來找到能夠執(zhí)行高級程序12的高效解決方案,從而產(chǎn)生了較長的循環(huán)時間60。由于循環(huán)時間60可能花費相當(dāng)長的時間,其可能使可編程邏輯設(shè)計者的用戶體驗不滿意。此外,在沒有此處所述的后續(xù)編譯的情況下,每次可編程邏輯設(shè)計者修改高級程序12時,設(shè)計軟件14重新執(zhí)行時間密集的時序收斂循環(huán)50,重復(fù)時間密集的編譯時間。
[0031]為了提升用戶體驗,可以實現(xiàn)兩級編譯方案。第一級或初始編譯可以有助于生成要在IC上實現(xiàn)的硬件組件,并且第二級或二次編譯可以有助于利用初始編譯的硬件組件來實現(xiàn)對高級程序12 (或低級代碼18)進(jìn)行的任何改變。提供圖3至圖8以更清楚地說明初始及二次編譯過程以及使用這些編譯過程時可能遇到的各種情況。
[0032]1.初始編譯
[0033]如上所討論的,兩級編譯方案可以提供初始編譯,其生成有助于實現(xiàn)高級程序14的硬件組件。圖3是說明初始編譯過程80的示例流程圖。圖4是為包括簡單的整數(shù)算術(shù)的高級程序12提供初始編譯過程80的示例的示例性框圖。
[0034]如圖3所示,初始編譯80可以開始于獲取高級程序12(方框82)。在圖4的示例中,高級程序包括簡單的整數(shù)加法,在z中存儲a和b的總和。編譯器16可以將高級程序12轉(zhuǎn)換為主機(jī)程序20(方框84)。如圖4所示,主機(jī)程序20可以包括低級指令流86,其為從高級程序12到可以由低級代碼18實現(xiàn)的低級主機(jī)程序20的轉(zhuǎn)換。如圖所示,z[id]=a [id]+b [id]轉(zhuǎn)換為分別將A [0]和B [O]加載至寄存器Rl和R2的加載函數(shù)。求和函數(shù)將寄存器Rl和R2的總和存儲在R3中。存儲函數(shù)將寄存器R3中的值存儲于Z[O]中。在生成低級指令流86后,設(shè)計軟件14或編譯器16可以生成實現(xiàn)低級指令流86所必需的硬件(例如,低級代碼18)(方框88)。例如,如圖4所示,因為指令流86包括加載單元90、存儲單元92、寄存器94(例如,RU R2以及R3)以及加法功能單元96,所以由低級代碼18定義的硬件定義98包括在數(shù)據(jù)路徑100上生成的用于IC22的可編程邏輯中的這些組件中的每一個。此外,控制單元102 (例如,狀態(tài)機(jī))可以通過基于低級指令流86來指示連接到數(shù)據(jù)路徑100的組件(例如,加載單元90和存儲單元92),以此控制數(shù)據(jù)路徑100,使得低級指令流86可以被實施。正如將在下面更詳細(xì)討論的,硬件定義98不限于有助于當(dāng)前低級指令流86實施方式的硬件組件。而是,正如將在下而更詳細(xì)討論的,硬件定義98可以包括提供至編譯器16的編程邏輯中不使用的許多組件。
[0035]在生成硬件時,初始編譯會根據(jù)時序收斂循環(huán)50處理組件。因此,可能使用數(shù)小時和/或數(shù)天來完成初始循環(huán)。然而,正如將在下面更詳細(xì)討論的,初始編譯可以生成硬件定義98,所述硬件定義98在未修改狀態(tài)中仍然有助于對高級程序12和/或低級指令流86進(jìn)行某些修改而無需使用額外的初始編譯來重新生成硬件定義98。
[0036]I1.二次編譯
[0037]二次編譯可以有助于實現(xiàn)對高級程序12和/或低級指令流86進(jìn)行的修改而無需通過初始編譯重新生成硬件組件。圖5說明示例性的二次編譯過程110,而圖6至圖8說明在修改高級程序12后可能遇到的各種情況。如圖5所示,可以在邏輯設(shè)計者修改高級程序12(方框112)時開始二次編譯過程110。完成輪詢以確定是否已經(jīng)為高級程序12生成現(xiàn)有硬件(方框114)。在替代實施例中,設(shè)計者可以簡單地選擇一個選項來使用二次編譯進(jìn)行編譯,使得設(shè)計軟件14可以安全地假設(shè)先前已經(jīng)發(fā)生硬件生成。如果先前沒有生成任何硬件,則執(zhí)行初始編譯過程80。然而,如果先前的硬件生成已發(fā)生,則獲取硬件定義98 (方框116)。設(shè)計軟件14和/或編譯器16確定是否可以由當(dāng)前硬件定義98實現(xiàn)高級程序修改(方框118)。當(dāng)不能使用現(xiàn)有硬件定義98實現(xiàn)該修改時,執(zhí)行初始編譯過程80,基于修改的高級程序112生成新的硬件定義98。然而,在某些實施例中,當(dāng)現(xiàn)有硬件定義98足以實現(xiàn)修改的高級程序112時,可以實現(xiàn)二次輪詢(方框120)。二次輪詢確定使用當(dāng)前硬件定義98實現(xiàn)修改是否適合在設(shè)計軟件14或其他地方中設(shè)置的預(yù)先定義的效率邊界內(nèi)。例如,在一些實施例中,設(shè)計軟件14可以確定使用原始硬件的關(guān)鍵路徑的吞吐量與若執(zhí)行完全重新編譯后得到的關(guān)鍵路徑的吞吐量之間的差值。如果吞吐量差值在Fmax噪聲內(nèi),則設(shè)計軟件可以確定效率在效率邊界內(nèi)。然而,如果差值不在Fmax噪聲內(nèi),則設(shè)計軟件可以確定效率不在效率邊界內(nèi)。
[0038]如果使用當(dāng)前硬件定義98實現(xiàn)修改將導(dǎo)致不可接受的效率(例如由效率邊界定義的),則開始初始編譯過程80,從而基于修改的高級程序112生成新的硬件組件。然而,當(dāng)使用相同的硬件定義98在效率邊界內(nèi)可以實現(xiàn)修改時,通過修改低級指令流86以在當(dāng)前硬件定義98上實現(xiàn)修改,二次編譯結(jié)束(方框122)。
[0039]在一些實施例中,不是自動進(jìn)行至方框122,而是可以向設(shè)計者提供提示,從而允許設(shè)計者指定:是否應(yīng)該通過后續(xù)的初始編譯重新生成硬件定義98,或者是否應(yīng)該使用當(dāng)前硬件,盡管可編程邏輯的效率未落入效率邊界內(nèi)。通過選擇潛在冗長的編譯時間或潛在低效率的設(shè)計的折中,這種選擇使設(shè)計者能夠指導(dǎo)該過程,從而迎合設(shè)計者的喜好。
[0040]圖6說明包括可以由圖4的原始硬件定義98實現(xiàn)的自圖4的高級程序12的簡單修改的示例性的高級程序12’。如圖所示,在所提供的示例中,邏輯設(shè)計者可以通過向存儲于z[id]的總和增加額外的變量c[id]來修改原始高級程序12。高級程序被轉(zhuǎn)換為低級指令流86’。如圖所示,從低級指令流86到低級指令流86’的修改相當(dāng)小,使用了一個額外的加載和一個額外的加法指令。因此,設(shè)汁軟件14可以確定:可以用當(dāng)前硬件定義98實現(xiàn)修改并且這種實現(xiàn)將落入預(yù)定義的效率邊界內(nèi)。因此,為了實現(xiàn)改變,實現(xiàn)的低級指令流86可以被修改為包括低級指令流86’的改變。因此,可以實現(xiàn)高級程序12’的修改而無需初始編譯80,從而跳過時間密集的時序收斂循環(huán)50。
[0041]在某些情況下,可以使用當(dāng)前硬件定義98實現(xiàn)對高級程序12所做的修改,但是由于規(guī)定實現(xiàn)的效率低,這種實現(xiàn)可能是不可接受的。例如,圖7說明提供比圖6的低級指令流86’更復(fù)雜的低級指令流86”的示例性的高級程序12”。在提供的示例中,設(shè)計者已經(jīng)將高級程序12修改為a [id]和b[id]相乘而不是求和。如圖4所示,當(dāng)前硬件定義98不包括乘法功能單元。然而,通過二次編譯過程110,設(shè)計軟件14可以識別使用當(dāng)前硬件定義98可以實現(xiàn)的一組替換的低級指令。例如,如圖所示,低級指令流86”包括加法環(huán)路,用作乘法功能單元的替代。因此,可以實現(xiàn)修改而不改變現(xiàn)有硬件定義98。
[0042]然而,環(huán)路可能會使實現(xiàn)的效率顯著低下,或者預(yù)定義的效率邊界可能是嚴(yán)格的,從而該實現(xiàn)可能不會落入預(yù)定義的效率邊界內(nèi)。因此,可以執(zhí)行初始編譯過程80,使得實現(xiàn)帶有新硬件定義122的新低級指令流120,所述新硬件定義具有乘法功能單元124。通過生成新低級指令流120以及新硬件定義122,可編程邏輯會更加有效并符合效率標(biāo)準(zhǔn)。
[0043]在某些情況下,當(dāng)前硬件定義98不能實現(xiàn)由邏輯設(shè)計者所做的對高級程序12的修改。圖8提供一個這樣的例子。如圖所示,已經(jīng)將高級程序12修改為使用對數(shù)函數(shù)的高級程序12’’’,從而使用浮點功能單元(FPU) 140以及三角函數(shù)(TRIG)功能單元142。由于當(dāng)前硬件定義98不包括浮點功能單元140或三角函數(shù)單元142,所以設(shè)計軟件不能將高級程序12”’轉(zhuǎn)換為可以由當(dāng)前硬件定義98實現(xiàn)的低級指令流(如無效的低級指令流144所示)。因此,開始完整的初始編譯110,生成包括浮點單元140以及三角函數(shù)單元142的硬件定義146。
[0044]正如圖6至圖8提供的示例所示,如果使用二次編譯可以用于使用現(xiàn)有硬件定義創(chuàng)建實現(xiàn)并且該實現(xiàn)落入可接受的效率邊界內(nèi),則在修改高級程序12時可以避免硬件生成。牢記一點,在完成初始編譯時包括額外的考慮會是有益于的,使得可以降低修改高級程序12所需的初始編譯的次數(shù)。
[0045]II1.編譯考慮因素以及效率提升
[0046]許多考慮因素及效率可能會增加得到的實施方式的Fmax和/或減少可編程邏輯設(shè)計者可能遇到的初始編譯的次數(shù)。例如,數(shù)據(jù)路徑100的長度和/或復(fù)雜性可能直接影響實施方式的吞吐量,從而影響Fmax。此外,可用的編程內(nèi)核的數(shù)量可能影響實施方式的吞吐量。另外,通過向內(nèi)核增加靈活性和/或使得能夠?qū)μ囟▋?nèi)核進(jìn)行選擇性的初始編譯,可以大大降低初始編譯的數(shù)量和/或時間長度。編譯器16可以在決定如何生成硬件以及實現(xiàn)高級程序12時考慮到這些因素。
[0047]1.數(shù)據(jù)路徑的折中
[0048]OpenCL使指令的并行執(zhí)行更加容易,從而提高可編程邏輯的效率。例如,圖9說明可以并行執(zhí)行的多個OpenCL線程160 (例如,高級程序12中的指令)。如圖所示,OpenCL線程160包括多個求和計算線程。正如前面關(guān)于圖4所討論的,可以通過使用加載單元90、存儲單元92以及加法功能單元96來實現(xiàn)加法線程。如圖9的示例所示,在第一個時鐘周期中,加載單元可以加載a[0]以及b[0]。在第二個時鐘周期中,可以使用加法功能單元96來對加載的值a[0]和b[0]進(jìn)行求和并開始第二個線程,加載a[l]和b[l]。在第三個時鐘周期中,a[0]和b[0]的總和可以存儲于c[0]中,完成第一個線程的執(zhí)行。此外,可以使用加法功能單元96添加在先前周期中加載的值。此外,可以由加載單元96加載值a [2]和b[2],從而開始第三個線程。在第四個周期中,將第三個周期的總和存儲于c[l]中,從而完成第二個線程的執(zhí)行。進(jìn)一步地,通過加法功能單元96添加來自第三個周期的加載值并通過加載單元90加載值a[3]和b[3],從而開始第四個線程。這個循環(huán)會繼續(xù)下去,直到完成執(zhí)行每個線程。通過這個例子可以看出,通過在每個時鐘周期保持最大數(shù)目的功能單元處于工作,并行執(zhí)行可以提供較大的效率。因此,編譯器可以包括有效確保線程可以并行執(zhí)行的考慮因素。
[0049]數(shù)據(jù)路徑的大小會直接影響實現(xiàn)的線程的吞吐量。雖然可以通過為線程的每個基本操作只包括一個功能單元來最小化數(shù)據(jù)路徑,但是在某些情況下,向數(shù)據(jù)路徑添加額外功能單元是有益的。圖10說明兩個示例數(shù)據(jù)路徑170和172的示例性的比較。數(shù)據(jù)路徑170是具有大量功能單元的復(fù)雜數(shù)據(jù)路徑,而數(shù)據(jù)路徑172是功能單元數(shù)目減少的更簡單的數(shù)據(jù)路徑。例如,復(fù)雜數(shù)據(jù)路徑170包括是更簡單數(shù)據(jù)路徑172兩倍的加載單元90、存儲單元92、寄存器94、加法功能單元96以及乘法功能單元124。與實現(xiàn)更簡單數(shù)據(jù)路徑172相比,實現(xiàn)復(fù)雜數(shù)據(jù)路徑170有優(yōu)點和缺點。根據(jù)具體的優(yōu)先級,任一個可能優(yōu)先于另一個而被選擇。例如,確定數(shù)據(jù)路徑復(fù)雜性時有兩個首要目標(biāo)要考慮。其一,通過提供在可能的最少周期內(nèi)執(zhí)行線程的能力同時支持許多重疊并行線程,復(fù)雜數(shù)據(jù)路徑170會是更高效的。例如,由于功能單元數(shù)目增加,可以并行添加許多計算線程而數(shù)據(jù)路徑不會變得飽和。因此,對于高級程序12中的大量線程,效率會增加。然而,選擇合適數(shù)據(jù)路徑的第二個目標(biāo)是減少IC的可編程邏輯占用的面積。隨著可選功能單元添加到數(shù)據(jù)路徑上,存儲數(shù)據(jù)路徑所需的面積量可能呈平方地增加。然而,這種數(shù)據(jù)路徑可以使得添加更多的線程106而不使數(shù)據(jù)路徑飽和,從而生成更多的吞吐量??梢詮?fù)制不太復(fù)雜的數(shù)據(jù)路徑以提高系統(tǒng)內(nèi)的吞吐量??紤]上述情況,編譯器16可以分析可編程邏輯占用的面積與計算吞吐量之間的折中,以確定應(yīng)該使用復(fù)雜數(shù)據(jù)路徑170還是更簡單數(shù)據(jù)路徑172。
[0050]在某些情況下,編譯器16可使用評估公式:
[0051]
每線程周期1積*并機(jī)程數(shù)
[0052]來評估數(shù)據(jù)路徑大小的效率。例如,編譯器16可以以復(fù)雜數(shù)據(jù)路徑172開始并采用評估算法評估。編譯器16可以迭代地移除一個或多個功能單元(例如,乘法功能單元124)并使用評估公式重新評估并記錄評估結(jié)果。因此,編譯器16可以確定具有最佳平衡結(jié)果的解決方案并實現(xiàn)對應(yīng)的數(shù)據(jù)路徑大小。
[0053]i1.多內(nèi)核優(yōu)化
[0054]目前已經(jīng)討論了單個OpenCL內(nèi)核的數(shù)據(jù)路徑以及低級指令流的優(yōu)化,現(xiàn)在討論轉(zhuǎn)向多內(nèi)核程序?qū)崿F(xiàn)的考慮因素。圖11說明在其執(zhí)行中使用多內(nèi)核的主機(jī)程序20的示例調(diào)用圖。如圖所示,主機(jī)程序20可以定義多內(nèi)核的調(diào)用路徑。線190表示由主機(jī)程序20調(diào)用的關(guān)鍵路徑(例如,時間最密集的路徑)。由于關(guān)鍵路徑190是由主機(jī)程序20調(diào)用的時間最密集的路徑,因此與增加其他調(diào)用路徑的效率相比,使關(guān)鍵路徑190的效率增加會對整體性能更有影響。圖12是說明根據(jù)實施例增加關(guān)鍵路徑190的效率的過程200的示例流程圖。編譯器16或者其他訂算機(jī)處理設(shè)備可以確定由主機(jī)程序20調(diào)用的內(nèi)核并評估每一內(nèi)核的數(shù)據(jù)路徑(方框202)。可以通過確定數(shù)據(jù)路徑并行性或者并行覆蓋線程的數(shù)量以及每一內(nèi)核的每一線程周期,以此計算每一內(nèi)核的執(zhí)行時間(方框204)。在知道每一內(nèi)核的執(zhí)行時間后,可以將調(diào)用路徑中的每一內(nèi)核的執(zhí)行時間相加,以確定關(guān)鍵路徑(方框206)。例如,在圖11的示例中,通過將內(nèi)核1、2、4以及6的執(zhí)行時間相加,計算出一個調(diào)用路徑的時序。通過將內(nèi)核1、3、4以及6的執(zhí)行時間相加,計算出另一調(diào)用路徑的時序。通過將內(nèi)核1、3、5以及6的執(zhí)行時間相加,計算出再一個調(diào)用路徑的時序。具有最長時序的調(diào)用路徑(例如,在這些例子中是具有內(nèi)核1、3、5以及6的路徑)將被確定為關(guān)鍵路徑。值得注意的是,雖然當(dāng)前示例沒有示出環(huán)路調(diào)用路徑,但是仍可以通過以下步驟計算這種路徑的時序:獲取分布信息以知曉該環(huán)路可能發(fā)生的次數(shù),從而將環(huán)路中的內(nèi)核時序以合適的次數(shù)增加到時序總和。一旦關(guān)鍵路徑190被確定,在關(guān)鍵路徑190中的任何內(nèi)核(例如,內(nèi)核1、3、5和/或6)可以被選擇進(jìn)行復(fù)制(方框208)。如上所述,通過復(fù)制內(nèi)核,吞吐量可以被增加。通過增加關(guān)鍵路徑上的吞吐量,可以增加整個系統(tǒng)的效率。編譯器16可以評估實現(xiàn)選定內(nèi)核的額外副本是否是有益的(方框210)。例如,編譯器16可以確定實現(xiàn)選定內(nèi)核的新副本所需的資源量以及實現(xiàn)選定內(nèi)核的新副本帶來的效率增益,并確定是否應(yīng)該實現(xiàn)新副本。如果應(yīng)該實現(xiàn)新副本,則復(fù)制內(nèi)核(方框212)并且重復(fù)內(nèi)核選定(方框208),選擇在方框212中被復(fù)制的相同內(nèi)核或者在關(guān)鍵路徑190上的不同內(nèi)核。然而,如果編譯器16確定實現(xiàn)選定內(nèi)核的副本無益,則編譯器16可以確定是否有另一內(nèi)核可以被復(fù)制(方框214)。如果存在可以被復(fù)制的另一內(nèi)核,則重復(fù)內(nèi)核選擇(方框208),選擇不同內(nèi)核。過程200可以繼續(xù),直到遇到旁路度量(bypass metrics),或者當(dāng)關(guān)鍵路徑190上無其他內(nèi)核時。例如,當(dāng)關(guān)鍵路徑190上無內(nèi)核可用以被復(fù)制時,結(jié)束過程200 (方框216)。此外,旁路度量可以使過程200結(jié)束(方框216),例如:超過預(yù)定數(shù)量的內(nèi)核復(fù)制迭代,IC資源消耗超出閾值,或者確定對于某一數(shù)量的迭代,吞吐量度量沒有增加。
[0055]當(dāng)增加新的內(nèi)核給主機(jī)程序20時,確定新的內(nèi)核是否能適合現(xiàn)有的內(nèi)核會是有益的。例如,圖13說明示例性情況,其中新的內(nèi)核,即內(nèi)核7被增加到主機(jī)程序20中。當(dāng)編譯器16確定新的內(nèi)核應(yīng)被增加時,編譯器16會檢測內(nèi)核8的功能單元是否可以在現(xiàn)有的內(nèi)核中找到。例如,如果一個內(nèi)核具有的未使用功能單元是新內(nèi)核中所使用的功能單元,則現(xiàn)有的內(nèi)核可以被修改為實現(xiàn)新的內(nèi)核功能。例如,如果內(nèi)核7包括存儲功能單元92以及加法功能單元96,則編譯器16可以尋找未使用的存儲功能單元92以及加法功能單元96。如圖13所示,內(nèi)核I可以包括未使用的存儲功能單元92以及未使用的功能單元96。如得到的主機(jī)程序20’所示,由于現(xiàn)有的內(nèi)核包括實現(xiàn)內(nèi)核7所需的未使用的功能單元,因此內(nèi)核I可以被修改為還執(zhí)行內(nèi)核7的功能。
[0056]在一些實施例中,編譯器16可以檢測多個內(nèi)核上的未使用的功能單元,并且可以使用未使用的功能單元來生成新的內(nèi)核。例如,圖14提供了部分在內(nèi)核I上且部分在內(nèi)核3上實現(xiàn)的內(nèi)核7的功能的一個例子。如關(guān)于圖13所討論的,內(nèi)核7使用存儲功能單元92和加法功能單元96。在所描述的例子中,內(nèi)核I包括未使用的存儲功能單元92,而內(nèi)核3包括未使用的加法功能單元96。如圖所示,編譯器16可以修改內(nèi)核I和3以執(zhí)行內(nèi)核7的各部分功能(例如,內(nèi)核7的一部分A在內(nèi)核I中而內(nèi)核7的一部分b在內(nèi)核3中)。由于可以通過現(xiàn)有的內(nèi)核實現(xiàn)新的內(nèi)核的功能,因此無需生成新的內(nèi)核,從而可以大大減少編譯時間。
[0057]雖然當(dāng)前的例子示出由現(xiàn)有內(nèi)核中的未使用的硬件滿足新內(nèi)核的所有功能,但在一些實施例中,僅有部分功能可以由現(xiàn)有內(nèi)核的未使用的功能單元滿足,從而導(dǎo)致生成新內(nèi)核。盡管生成新內(nèi)核,但使用現(xiàn)有內(nèi)核的至少一些未使用的功能單元會是有益的。例如,這種方案可以使隨后編譯中的硬件生成不那么復(fù)雜并且耗時更少。因此,即使當(dāng)編譯器16確定新內(nèi)核應(yīng)被創(chuàng)建時,編譯器16仍可以使用現(xiàn)有內(nèi)核的未使用的功能單元。
[0058]ii1.編譯器靈活性
[0059]在兩級編譯過程期間,可以使設(shè)計軟件14能夠從可編程邏輯設(shè)計者接收用戶指導(dǎo),從而使編譯器16能夠基于設(shè)計者輸入減輕過多的初始編譯。例如,當(dāng)新項目開始時,設(shè)計軟件14可以提示可編程邏輯設(shè)計者可編程邏輯將被設(shè)計用于的預(yù)期縱向市場(vertical market)??v向市場可以是基于具體和專業(yè)需求而從事交易的商業(yè)。例如,提供到設(shè)計軟件14的縱向市場參數(shù)可以包括金融服務(wù)和/或油氣工業(yè)?;诔跏季幾g之前提供的縱向市場,編譯器16或設(shè)計軟件14可以確定要添加的一組有用的功能單元,而不考慮當(dāng)前內(nèi)核是否將使用功能單元。這樣的未使用的功能單元可以增加被編譯的可編程邏輯的硬件靈活性,從而幫助減少隨后的添加額外的功能單元所需的初始編譯。例如,金融服務(wù)縱向市場可能使用許多三角學(xué)功能單元以及浮點功能單元,諸如對數(shù)、平方根、雙精度操作單元。相反,油氣操作可能頻繁地使用非常不同的功能單元子集。如果設(shè)計者指導(dǎo)編譯器16或者設(shè)計軟件14具體地針對金融服務(wù)編譯可編程邏輯,則編譯器16或者設(shè)計軟件14可以包括專門面對金融服務(wù)的一組擴(kuò)展的功能單元(例如三角函數(shù)和/或浮點功能單元)。在某些實施例中,當(dāng)存在足夠的可編程邏輯存儲區(qū)域來包含額外的功能單元時,一個浮點功能單元可以合并到每一內(nèi)核中。因此,如上所述,通過提供一組擴(kuò)展的功能單元給新創(chuàng)建的內(nèi)核使用,增加了生成的內(nèi)核的靈活性,從而未使用的功能單元可以減少隨后的初始編譯。
[0060]然而,這個添加的靈活性會增加可編程邏輯使用的可編程存儲空間的量,從而對于一些可編程邏輯設(shè)計是不希望的。因此,設(shè)計者可以提供指導(dǎo)(例如,通過設(shè)計軟件14的輸入)來關(guān)閉這種靈活性特性,使得保留可編程邏輯空間。例如,當(dāng)可編程邏輯設(shè)計差不多完成時,在未來的實質(zhì)性修改變動相對小的情況下,設(shè)計者可能希望減少各個內(nèi)核的存儲區(qū)域并且復(fù)制內(nèi)核,如前所述,以增加吞吐量并最終增加整個可編程邏輯設(shè)計的性能。因此,通過使設(shè)計者能夠關(guān)閉靈活性功能,基于設(shè)計者的指導(dǎo)可以更準(zhǔn)確地定制設(shè)計。
[0061]可以在某些實施例中實現(xiàn)的額外的編譯器靈活性包括設(shè)計者的如下能力:通過提供指導(dǎo)以將某些內(nèi)核選擇性地從數(shù)據(jù)路徑/可編程控制實現(xiàn)移植到更高效的硬件流水線實現(xiàn),從而增加效率。這種功能例如在接近設(shè)計周期結(jié)尾時是期望的,在那時,更關(guān)注效率而不是功能增長。圖15示出了示例性內(nèi)核,其基于設(shè)計者的指導(dǎo)而被實現(xiàn)為被移植到硬件流水線的指令集和數(shù)據(jù)路徑。如圖所示,通過使用控制單元102和主機(jī)程序20可以將內(nèi)核實現(xiàn)有可編程性。然而,當(dāng)設(shè)計者期望使內(nèi)核的效率增加時,設(shè)計者可以指導(dǎo)編譯器16或者設(shè)計軟件14來將內(nèi)核移植到固定的硬件流水線,移除內(nèi)核的所有可編程性。在圖15的例子中,可編程內(nèi)核包括通過數(shù)據(jù)路徑100耦合的加載功能單元90、存儲功能單元92、寄存器94、加法功能單元96以及乘法功能單元124。如圖所示,主機(jī)程序20為控制單元102提供指令以使用加載單元90、加法功能單元96以及存儲單元92。當(dāng)設(shè)計者期望效率折中(例如,增加Fmax)超過功能靈活性折中(例如,可編程性)時,設(shè)計者可以為編譯器16或者設(shè)計軟件14提供指示,使得可編程內(nèi)核122可以被移植到非可編程硬件流水線240。在接收到這個指示后,編譯器16或者設(shè)計軟件14可以將可編程內(nèi)核122轉(zhuǎn)換為非可編程硬件流水線240。在圖15的例子中,如箭頭242所示,設(shè)計軟件14已將可編程內(nèi)核122轉(zhuǎn)換為非可編程硬件流水線240。因為主機(jī)程序20使用兩次調(diào)用加載單元90,一次調(diào)用加法功能單元96以及存儲單元92,所以非可編程硬件流水線240包括兩個加載單元90、一個加法功能單元96以及一個存儲單元92。從此例中可以看出,控制單元102不存在,因為沒有編程指令被解釋為控制非可編程硬件流水線240。此外,因為乘法單元124未被主機(jī)程序20使用,因此它未被合并到硬件流水線240中。通過移除內(nèi)核的可編程性,可以極大地減少內(nèi)核的功能靈活性。然而,這樣的修改可以導(dǎo)致實質(zhì)效率的改進(jìn)(例如,所用的可編程邏輯區(qū)域的量減少和/或Fmax增加)。例如,在一些實施例中,通過將圖15的內(nèi)核轉(zhuǎn)換為非可編程硬件流水線240以便進(jìn)行簡單加法,F(xiàn)max性能可以增加為可編程內(nèi)核的三倍。
[0062]兩級編譯過程可以得到的另一效率是對內(nèi)核進(jìn)行選擇性分區(qū),使得公共類型的內(nèi)核可以被編譯而替換類型的內(nèi)核不被編譯。圖16說明帶有設(shè)計分區(qū)262的示例性的可編程邏輯260??梢詥⒂迷O(shè)計分區(qū)262以存儲一個或多個相似類型的內(nèi)核(例如具有公共功能單元)。例如,內(nèi)核264被存儲于一個分區(qū)262中,內(nèi)核266被存儲于第二分區(qū)262中,而內(nèi)核268被存儲于第三分區(qū)262中。通過在設(shè)計分區(qū)262中存儲相似類型的內(nèi)核,可以使設(shè)計軟件16能夠僅針對具體設(shè)計分區(qū)262內(nèi)包含的內(nèi)核子集執(zhí)行初始和/或二次編譯。此外,設(shè)計者可以指導(dǎo)以將具體分區(qū)的內(nèi)核轉(zhuǎn)換為非可編程硬件流水線,以便增強(qiáng)性能。
[0063]如前所討論的,本文提供的兩級編譯過程有助于減小編譯IC的可編程邏輯的處理能力和時間,從而提供了更滿意的設(shè)計體驗。通過設(shè)計者的指導(dǎo),針對具體設(shè)計可以進(jìn)一步增強(qiáng)兩級編譯過程,從而使編譯體驗唯一面向設(shè)計者項目。這種定制可以為設(shè)計增加靈活性,減少編譯時間,和/或增加設(shè)計者程序的性能。
[0064]雖然本公開中所闡述的實施例可以進(jìn)行各種改變以及各種形式,但是具體的實施例已經(jīng)在附圖中通過例子示出并且已在本文中詳細(xì)描述。然而,應(yīng)該理解,本公開并不旨在限制到所公開的特定形式。本公開覆蓋落入到如由下列所附的權(quán)利要求所定義的本公開的精神和范圍中的所有修改、等同體和替換。
【權(quán)利要求】
1.一種計算機(jī)系統(tǒng),包括: 具有編譯器的計算機(jī),所述編譯器被配置為: 解釋高級程序; 基于所述高級程序生成低級代碼,其中所述低級代碼表示集成電路即IC的可編程邏輯;其中所述低級代碼包括硬件組件邏輯以及控制單元,其中所述硬件組件邏輯用于實現(xiàn)所述高級程序,并且其中所述控制單元被配置為基于主機(jī)程序來控制所述硬件組件邏輯;以及 基于所述高級程序來生成包括用于所述控制單元的機(jī)器可讀實現(xiàn)指令的所述主機(jī)程序;以及 可編程邏輯設(shè)計軟件,其被配置為使用所述低級代碼來在不重新生成低級代碼的情況下實現(xiàn)對所述高級程序的改變。
2.如權(quán)利要求1所述的計算機(jī)系統(tǒng),其中所述高級程序包括OpenCL、C++或它們的組口 ο
3.如權(quán)利要求1所述的計算機(jī)系統(tǒng),其中所述低級代碼包括用硬件描述語言即HDL編寫的代碼。
4.如權(quán)利要求3所述的計算機(jī)系統(tǒng),其中所述HDL包括Verilog。
5.如權(quán)利要求1所述的計算機(jī)系統(tǒng),其中所述編譯器實現(xiàn)時序收斂循環(huán),并且可編程邏輯設(shè)計軟件被配置為在不實現(xiàn)所述時序收斂循環(huán)的情況下實現(xiàn)對所述高級程序的改變。·
6.如權(quán)利要求5所述的計算機(jī)系統(tǒng),其中所述可編程邏輯設(shè)計軟件被配置為通過基于所述改變來修改主機(jī)程序,從而實現(xiàn)所述改變。
7.如權(quán)利要求1所述的計算機(jī)系統(tǒng),其中所述編譯器被配置為當(dāng)所述可編程邏輯設(shè)計軟件確定不能用所述低級程序?qū)崿F(xiàn)所述改變時生成第二低級程序。
8.如權(quán)利要求1所述的計算機(jī)系統(tǒng),其中所述可編程邏輯設(shè)計軟件被配置為在不重新生成所述低級代碼的情況下確定實現(xiàn)所述改變的效率。
9.如權(quán)利要求8所述的計算機(jī)系統(tǒng),其中所述可編程邏輯設(shè)計軟件被配置為當(dāng)所述效率處于一組效率邊界之外時生成或請求生成第二低級代碼。
10.如權(quán)利要求1所述的計算機(jī)系統(tǒng),其中所述可編程邏輯設(shè)計軟件被配置為: 將當(dāng)在不重新生成所述低級代碼的情況下實現(xiàn)所述改變時的第一效率與當(dāng)通過生成第二低級代碼來實現(xiàn)所述改變時的第二效率進(jìn)行比較;以及 當(dāng)所述第二效率高于效率比較閾值時,基于該效率時的改變來生成或請求生成第二低級代碼。
11.如權(quán)利要求1所述的計算機(jī)系統(tǒng),其中所述編譯器被配置為在所述可編程邏輯設(shè)計軟件確定不能用所述低級程序?qū)崿F(xiàn)所述改變時,生成第二低級程序。
12.—種方法,包括: 接收高級程序,包括用于在集成電路即IC的可編程邏輯上實現(xiàn)的計算機(jī)可讀指令; 將所述高級程序轉(zhuǎn)換為表示執(zhí)行所述高級程序的功能的功能組件的低級代碼; 基于所述高級程序來生成主機(jī)程序,所述主機(jī)程序包括用于實現(xiàn)所述低級代碼的計算機(jī)可讀指令; 接收對所述高級程序的修改;確定所述修改是否能夠由使用所述低級代碼的新主機(jī)程序?qū)崿F(xiàn);以及 當(dāng)由使用所述低級代碼的新主機(jī)程序能夠?qū)崿F(xiàn)所述修改時,生成所述新主機(jī)程序以實現(xiàn)所述修改。
13.如權(quán)利要求12所述的方法,還包括確定所述新主機(jī)程序的效率,并且僅當(dāng)所述效率處于一組效率邊界內(nèi)時生成所述新主機(jī)程序。
14.如權(quán)利要求13所述的方法,還包括當(dāng)所述效率不在該組效率邊界內(nèi)時生成第二低級代碼。
15.如權(quán)利要求12所述的方法,還包括當(dāng)所述修改不能由使用所述低級代碼的新主機(jī)程序?qū)崿F(xiàn)時,生成第二低級代碼。
16.—種編譯器系統(tǒng),其包括: 處理器,其被配置為: 解釋高級程序,其中所述高級程序表示在集成電路即IC上要實現(xiàn)的可編程邏輯; 確定用于實現(xiàn)所述高級程序的一組功能單元;以及 生成包括計算機(jī)可讀指令的低級代碼,所述計算機(jī)可瀆指令表示該組功能單元以及用于控制該組功能單元的控制單元。
17.如權(quán)利要求16所述的編譯器系統(tǒng),其中所述處理器被配置為生成主機(jī)程序,所述主機(jī)程序包括可由所述控制單元解釋以執(zhí)行該組功能單元的功能的指令,其中可由所述控制單元解釋的指令用于實現(xiàn)所述高級程序。·
18.如權(quán)利要求16所述的編譯器系統(tǒng),其中所述處理器被配置為確定第二組功能單元,用于對所述高級程序的后續(xù)修改。
19.如權(quán)利要求16所述的編譯器系統(tǒng),其中所述編譯器被配置為當(dāng)對所述高級程序的一組修改不能通過修改所述主機(jī)程序而由所述低級代碼實現(xiàn)時,重新生成所述低級代碼。
20.如權(quán)利要求16所述的編譯器系統(tǒng),其中所述編譯器被配置為當(dāng)對所述高級程序的一組修改提供的效率低于通過修改所述主機(jī)程序而由所述低級代碼實現(xiàn)時的效率閾值時,重新生成所述低級代碼。
【文檔編號】G06F9/45GK103593220SQ201310335854
【公開日】2014年2月19日 申請日期:2013年6月21日 優(yōu)先權(quán)日:2012年6月22日
【發(fā)明者】D·T·L·陳, D·辛格 申請人:阿爾特拉公司