一種代碼生成方法、編譯器、調(diào)度方法、裝置及調(diào)度系統(tǒng)的制作方法
【專利摘要】本發(fā)明實施例公開了一種代碼生成方法、編譯器、調(diào)度方法、裝置及調(diào)度系統(tǒng)。本發(fā)明實施例生成的代碼是應用于異構(gòu)系統(tǒng)的可執(zhí)行代碼,異構(gòu)系統(tǒng)包括加速處理器和中央處理器。本發(fā)明實施例代碼生成方法包括:編譯器獲取加速處理器資源的信息以及中央處理器資源的信息以生成可運行平臺列表;編譯器從第一用戶代碼中識別出可加速代碼;編譯器在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼;編譯器對第二用戶代碼進行編譯得到可執(zhí)行代碼。本發(fā)明實施例生成的可執(zhí)行代碼在執(zhí)行的時候可以自動實現(xiàn)處理器的合理調(diào)度。
【專利說明】一種代碼生成方法、編譯器、調(diào)度方法、裝置及調(diào)度系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實施例涉及計算機【技術(shù)領(lǐng)域】,尤其涉及一種代碼生成方法、編譯器、調(diào)度方法、裝置及調(diào)度系統(tǒng)。
【背景技術(shù)】
[0002]當前提高系統(tǒng)計算能力的主流方法是利用多核系統(tǒng)。包含有多種不同類型處理器的多核系統(tǒng)稱為異構(gòu)系統(tǒng),異構(gòu)系統(tǒng)一般由通用處理器和專用加速處理器構(gòu)成。異構(gòu)系統(tǒng)具有如下優(yōu)勢:一方面,通用處理器處理標量計算,提供通用的計算能力,使得異構(gòu)系統(tǒng)可以適應多方面的應用;另一方面,專用加速處理器面向某些特定的領(lǐng)域可以提供強大的計算性能,且能效比較高,使得異構(gòu)系統(tǒng)比同構(gòu)系統(tǒng)擁有更高的性能和效能。
[0003]對于異構(gòu)系統(tǒng)來說,最重要的問題有兩方面:一是如何使用專用加速處理器,二是如何使得系統(tǒng)整體的計算性能最高。因為專用加速處理器與通用處理器,如傳統(tǒng)中央處理器(Central Processing Unit, CPU)有著不同的體系架構(gòu),因此專用加速處理器的指令集與傳統(tǒng)CPU的指令集是不兼容的,即運行在CPU上的代碼無法直接運行在專用加速處理器上,因此,無法使用針對CPU的開發(fā)工具來開發(fā)專用加速處理器。而要使異構(gòu)系統(tǒng)的計算性能最高,就必須充分利用各處理器的計算能力,由于各處理器在功能和性能差異很大,因此要充分利用各處理器的計算能力,就必須了解各類處理器的特點,然后將任務合理的分配到各處理器上。
[0004]現(xiàn)有技術(shù)提供的用于異構(gòu)系統(tǒng)的編程方式,開發(fā)者在程序中需要明確指定程序段將運行在哪種處理器上,即任務的分配由開發(fā)者完成。開放計算語言(Open ComputingLanguage, OpenCL)是該方案的一種典型實現(xiàn),它為異構(gòu)系統(tǒng)編程提供了一個開放的框架標準。開發(fā)者可以使用OpenCL提供的語言來編寫將要運行在各處理器上的程序,然后調(diào)用OpenCL提供的用于控制系統(tǒng)的應用程序編程接口(Applicat1n Programming Interface,API)來指定哪部分程序?qū)⑦\行在哪種處理器上,并通過兩階段編譯將這些程序轉(zhuǎn)化為對應處理器上可執(zhí)行的代碼,最后利用控制系統(tǒng)的API調(diào)用可執(zhí)行代碼在相應的處理器上運行。
[0005]從上面的描述中可以看到,現(xiàn)有技術(shù)提供的用于異構(gòu)系統(tǒng)的編程方式,需要開發(fā)者自己解決系統(tǒng)資源調(diào)度問題,這要求開發(fā)者對硬件比較熟悉,并且調(diào)度方案事先指定,程序中已經(jīng)指定了哪些程序在哪種設(shè)備上執(zhí)行,系統(tǒng)無法根據(jù)當前狀態(tài)進行合理調(diào)度。因此當指定的設(shè)備處于忙碌狀態(tài)時該程序也無法運行在其他空閑的設(shè)備上,造成了系統(tǒng)資源的浪費。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實施例提供了一種代碼生成方法、編譯器、調(diào)度方法、裝置及調(diào)度系統(tǒng),使得生成的可執(zhí)行代碼在執(zhí)行的時候可以自動實現(xiàn)處理器的合理調(diào)度。
[0007]本發(fā)明實施例第一方面提供的代碼生成方法,應用于調(diào)度系統(tǒng),所述調(diào)度系統(tǒng)中包括異構(gòu)系統(tǒng)、編譯器,所述代碼為可執(zhí)行代碼,所述可執(zhí)行代碼應用于異構(gòu)系統(tǒng),所述異構(gòu)系統(tǒng)包括加速處理器和中央處理器,所述方法包括:
[0008]所述編譯器獲取所述加速處理器資源的信息以及所述中央處理器資源的信息以生成可運行平臺列表,并根據(jù)所述加速處理器資源的信息從第一用戶代碼中識別出可加速代碼,所述可運行平臺列表中包含所有加速處理器及中央處理器;
[0009]所述編譯器在所述可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼;
[0010]所述編譯器對所述第二用戶代碼進行編譯得到可執(zhí)行代碼,其中,所述可執(zhí)行代碼中包含將所述鉤子函數(shù)與所述異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及將所述可加速代碼編譯得到的第一可加速分支代碼及第二可加速分支代碼,所述第一可加速分支代碼用于在所述可運行平臺列表中的加速處理器上執(zhí)行,所述第二可加速分支代碼用于在所述可運行平臺列表中的中央處理器上執(zhí)行,所述嵌入鉤子函數(shù)與異常處理函數(shù)的目的是:使得在所述可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到所述鉤子函數(shù)時,利用所述異常處理函數(shù)中的條件控制代碼為所述第一可加速分支代碼及所述第二可加速分支代碼選擇目標處理器。
[0011]結(jié)合本發(fā)明實施例的第一方面,在本發(fā)明實施例的第一方面的第一種實施方式中,所述編譯器在生成可運行平臺列表之前,還包括:調(diào)用運行代價評估函數(shù)對所述加速處理器及所述中央處理器進行運行代價評估。
[0012]結(jié)合本發(fā)明實施例第一方面的第一種實施方式,在本發(fā)明實施例的第一方面的第二種實施方式中,所述編譯器對所述第二用戶代碼進行編譯得到可執(zhí)行代碼之前還包括:所述編譯器在所述加速處理器中選取運行代價小于預置數(shù)值的預定數(shù)目的加速處理器生成親屬性列表,所述親屬性列表中包含在所述可運行平臺列表中運行代價小于預置數(shù)值的預定數(shù)目的加速處理器;
[0013]所述第一可加速分支代碼用于在所述親屬性列表中的加速處理器上執(zhí)行。
[0014]本發(fā)明實施例的第二方面提供了一種調(diào)度方法,應用于調(diào)度系統(tǒng),所述調(diào)度系統(tǒng)包括調(diào)度裝置、異構(gòu)系統(tǒng),所述異構(gòu)系統(tǒng)包括加速處理器及中央處理器,所述方法包括:
[0015]所述調(diào)度裝置加載并執(zhí)行編譯器生成的可執(zhí)行代碼,所述可執(zhí)行代碼中包含所述編譯器將鉤子函數(shù)及異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及所述編譯器將可加速代碼編譯得到的用于在所述加速處理器上執(zhí)行的第一可加速分支代碼以及用于在所述中央處理器上執(zhí)行的第二可加速分支代碼;
[0016]所述調(diào)度裝置在執(zhí)行到所述鉤子函數(shù)時,產(chǎn)生異常;
[0017]所述調(diào)度裝置調(diào)用所述異常處理函數(shù),根據(jù)所述異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,利用所述進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼的目標處理器,所述可運行平臺列表中包含所有加速處理器及中央處理器;
[0018]所述調(diào)度裝置調(diào)用所述目標處理器,以利用所述目標處理器執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼。
[0019]結(jié)合本發(fā)明實施例的第二方面,在本發(fā)明實施例的第二方面的第一種實施方式中,所述調(diào)度裝置利用所述進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼的目標處理器的方法包括:所述調(diào)度裝置從所述進程調(diào)度接口的所述可運行平臺列表中獲取負載最少,和/或運行代價最小的加速處理器及中央處理器作為所述目標處理器。
[0020]結(jié)合本發(fā)明實施例的第二方面的第一種實施方式,在本發(fā)明實施例的第二方面的第二種實施方式中,所述進程調(diào)度接口中還包括親屬性列表,所述親屬性列表中包含在所述可運行平臺列表中運行代價小于預置數(shù)值的預定數(shù)目的加速處理器;
[0021]所述調(diào)度裝置從所述進程調(diào)度接口的所述可運行平臺列表中獲取負載最少,和/或運行代價最小的加速處理器及中央處理器作為目標處理器,包括:
[0022]所述調(diào)度裝置從所述進程調(diào)度接口的親屬性列表中獲取負載最少,和/或運行代價最小的加速處理器作為執(zhí)行所述第一可加速分支代碼的目標處理器,從所述進程調(diào)度接口的可運行平臺列表中獲取負載最少,和/或運行代價最小的中央處理器作為執(zhí)行所述第二可加速分支代碼的目標處理器。
[0023]本發(fā)明實施例的第三方面提供了一種編譯器,用于生成可執(zhí)行代碼,所述可執(zhí)行代碼應用于異構(gòu)系統(tǒng),所述異構(gòu)系統(tǒng)包括加速處理器和中央處理器,所述編譯器包括:
[0024]獲取單元,用于獲取所述加速處理器資源的信息以及所述中央處理器資源的信息;
[0025]生成單元,用于根據(jù)所述獲取單元獲取的所述加速處理器資源的信息以及所述中央處理器資源的信息生成可運行平臺列表,所述可運行平臺列表中包含所有加速處理器及中央處理器;
[0026]識別單元,用于根據(jù)所述獲取單元獲取的加速處理器資源的信息從第一用戶代碼中識別出可加速代碼;
[0027]嵌入單元,用于在所述可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼;
[0028]編譯單元,用于對所述第二用戶代碼進行編譯得到可執(zhí)行代碼,其中,所述可執(zhí)行代碼中包含將所述鉤子函數(shù)與所述異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及將所述可加速代碼編譯得到的第一可加速分支代碼及第二可加速分支代碼,所述第一可加速分支代碼用于在所述可運行平臺列表中的加速處理器上執(zhí)行,所述第二可加速分支代碼用于在所述可運行平臺列表中的中央處理器上執(zhí)行,所述嵌入鉤子函數(shù)與異常處理函數(shù)的目的是:使得在所述可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到所述鉤子函數(shù)時,利用所述異常處理函數(shù)中的條件控制代碼為所述第一可加速分支代碼及所述第二可加速分支代碼選擇目標處理器。
[0029]結(jié)合本發(fā)明實施例的第三方面,在本發(fā)明實施例的第三方面的第一種實施方式中,所述編譯器還包括:評估單元,用于調(diào)用運行代價評估函數(shù)對所述加速處理器及所述中央處理器進行運行代價評估。
[0030]結(jié)合本發(fā)明實施例的第三方面的第一種實施方式,在本發(fā)明實施例的第三方面的第二種實施方式中,所述生成單元還用于:在所述加速處理器中選取運行代價小于預置數(shù)值的預定數(shù)目的加速處理器生成親屬性列表,所述親屬性列表中包含在所述可運行平臺列表中運行代價小于預置數(shù)值的預定數(shù)目的加速處理器;
[0031]所述第一可加速分支代碼用于在所述親屬性列表中的加速處理器上執(zhí)行。
[0032]本發(fā)明實施例的第四方面提供了一種調(diào)度裝置,用于調(diào)度異構(gòu)系統(tǒng),所述異構(gòu)系統(tǒng)包括加速處理器及中央處理器,所述裝置包括:
[0033]執(zhí)行單元,用于加載并執(zhí)行編譯器生成的可執(zhí)行代碼,所述可執(zhí)行代碼中包含所述編譯器將鉤子函數(shù)及異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及所述編譯器將可加速代碼編譯得到的用于在所述加速處理器上執(zhí)行的第一可加速分支代碼以及用于在所述中央處理器上執(zhí)行的第二可加速分支代碼;
[0034]異常產(chǎn)生單元,用于在執(zhí)行到所述鉤子函數(shù)時,產(chǎn)生異常;
[0035]第一調(diào)用單元,用于調(diào)用所述異常處理函數(shù),根據(jù)所述異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,利用所述進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼的目標處理器,所述可運行平臺列表中包含所有加速處理器及中央處理器;
[0036]第二調(diào)用單元,用于調(diào)用所述目標處理器,以利用所述目標處理器執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼。
[0037]結(jié)合本發(fā)明實施例的第四方面,在本發(fā)明實施例的第四方面的第一種實施方式中,所述第一調(diào)用單元利用所述進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼的目標處理器的方法包括:所述第一調(diào)用單元從所述進程調(diào)度接口的所述可運行平臺列表中獲取負載最少,和/或運行代價最小的加速處理器及中央處理器作為所述目標處理器。
[0038]結(jié)合本發(fā)明實施例第四方面的第一種實施方式,在本發(fā)明實施例的第四方面的第二種實施方式中,所述進程調(diào)度接口中還包括親屬性列表,所述親屬性列表中包含在所述可運行平臺列表中運行代價小于預置數(shù)值的預定數(shù)目的加速處理器;
[0039]所述第一調(diào)用單元從所述進程調(diào)度接口的所述可運行平臺列表中獲取負載最少,和/或運行代價最小的加速處理器及中央處理器作為所述目標處理器,包括:
[0040]所述第一調(diào)用單元從所述進程調(diào)度接口的親屬性列表中獲取負載最少,和/或運行代價最小的加速處理器作為執(zhí)行所述第一可加速分支代碼的目標處理器,從所述進程調(diào)度接口的可運行平臺列表中獲取負載最少,和/或運行代價最小的中央處理器作為執(zhí)行所述第二可加速分支代碼的目標處理器。
[0041]本發(fā)明實施例的第五方面提供了一種調(diào)度系統(tǒng),所述調(diào)度系統(tǒng)包括本發(fā)明實施例第三方面所提供的編譯器;以及本發(fā)明實施例第四方面提供的調(diào)度裝置;以及至少一個加速處理器和至少一個中央處理器。
[0042]從以上技術(shù)方案可以看出,本發(fā)明實施例具有以下優(yōu)點:
[0043]本發(fā)明實施例中,編譯器獲取加速處理器及中央處理器資源的信息以生成可運行平臺列表,并根據(jù)加速處理器資源的信息從第一用戶代碼中識別出可加速代碼,然后在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼;最后對第二用戶代碼進行編譯得到可執(zhí)行代碼,其中,可執(zhí)行代碼中包含將鉤子函數(shù)與異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及將可加速代碼編譯得到的第一可加速分支代碼及第二可加速分支代碼,第一可加速分支代碼用于在可運行平臺列表中的加速處理器上執(zhí)行,第二可加速分支代碼用于在可運行平臺列表中的中央處理器上執(zhí)行,嵌入鉤子函數(shù)與異常處理函數(shù)的目的是:使得在可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到鉤子函數(shù)時,利用異常處理函數(shù)中的條件控制代碼為第一可加速分支代碼及第二可加速分支代碼選擇目標處理器,因而,本發(fā)明實施例中生成的可執(zhí)行代碼在被執(zhí)行的時候可以根據(jù)實際情況自動實現(xiàn)處理器的合理調(diào)度,簡化了開發(fā)者的工作,且合理地利用了系統(tǒng)資源。
【專利附圖】
【附圖說明】
[0044]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0045]圖1為本發(fā)明實施例中代碼生成方法一個實施例示意圖;
[0046]圖2為本發(fā)明實施例中代碼生成方法另一實施例示意圖;
[0047]圖3為本發(fā)明實施例中調(diào)度方法一個實施例示意圖;
[0048]圖4為本發(fā)明實施例中調(diào)度方法另一實施例示意圖;
[0049]圖5為本發(fā)明實施例中編譯器一個實施例示意圖;
[0050]圖6為本發(fā)明實施例中調(diào)度裝置一個實施例示意圖;
[0051]圖7為本發(fā)明實施例中編譯器另一實施例示意圖;
[0052]圖8為本發(fā)明實施例中調(diào)度裝置另一實施例示意圖;
[0053]圖9為本發(fā)明實施例中調(diào)度系統(tǒng)一個實施例示意圖。
【具體實施方式】
[0054]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0055]本發(fā)明實施例提供了一種代碼生成方法、編譯器、調(diào)度方法、裝置及調(diào)度系統(tǒng)。本發(fā)明實施例生成的可執(zhí)行代碼在執(zhí)行的時候可以自動實現(xiàn)處理器的合理調(diào)度。
[0056]請參閱圖1,圖1示出了本發(fā)明實施例中代碼生成方法一個實施例,本實施例的代碼生成方法應用于調(diào)度系統(tǒng),調(diào)度系統(tǒng)中包含異構(gòu)系統(tǒng)、編譯器。本實施例生成的代碼是可應用于異構(gòu)系統(tǒng)的可執(zhí)行代碼,其中,異構(gòu)系統(tǒng)可包括加速處理器及中央處理器。本實施例方法包括:
[0057]101、編譯器獲取加速處理器資源的信息及中央處理器資源的信息;
[0058]編譯器調(diào)用系統(tǒng)知識庫,從系統(tǒng)知識庫中獲取當前系統(tǒng)的硬件資源信息,該硬件資源信息主要包括加速處理器資源的信息及中央處理器資源的信息。
[0059]102、編譯器生成可運行平臺列表;
[0060]編譯器根據(jù)所識別出的加速處理器資源的信息及中央處理器資源的信息生成可運行平臺列表,可運行平臺列表中包含所有加速處理器及中央處理器。
[0061]103、編譯器從第一用戶代碼中識別出可加速代碼;
[0062]編譯器根據(jù)所獲取的加速處理器資源的信息從第一用戶代碼中識別出可加速代碼,可加速代碼編譯后可以在加速處理器及中央處理器上運行。
[0063]104、編譯器在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼;
[0064]鉤子函數(shù)的主要作用是產(chǎn)生異常,而異常處理函數(shù)主要用于解決鉤子函數(shù)產(chǎn)生的異常,異常處理函數(shù)中包含條件控制代碼。編譯器在識別出可加速代碼后在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼,所以第二用戶代碼中含有鉤子函數(shù)、異常處理函數(shù)及可加速代碼。
[0065]105、編譯器對第二用戶代碼進行編譯得到可執(zhí)行代碼。
[0066]其中,編譯得到的可執(zhí)行代碼中含有可執(zhí)行用戶代碼,第一可加速分支代碼及第二可加速分支代碼??蓤?zhí)行用戶代碼是由第二用戶代碼中的鉤子函數(shù)及異常處理函數(shù)編譯得到的,第一可加速分支代碼及第二可加速分支代碼均是由第二用戶代碼中的可加速代碼編譯得到的,第一可加速分支代碼主要用于在可運行平臺列表中的加速處理器上執(zhí)行,第二可加速分支代碼主要用于在可運行平臺列表中的中央處理器上執(zhí)行。
[0067]另外,步驟104中在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)是為了在可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到鉤子函數(shù)時,產(chǎn)生異常,然后利用異常處理函數(shù)中的條件控制代碼為第一可加速分支代碼及第二可加速分支代碼選擇目標處理器,因而,本實施例生成的可執(zhí)行代碼在執(zhí)行的時候可以自動調(diào)用合適的處理器,不需要開發(fā)者事先解決系統(tǒng)資源調(diào)度問題。
[0068]另外,需要說明的是,本實施中提到的第一用戶代碼中不僅含有可加速代碼,也含有非可加速代碼,非可加速代碼的編譯方法可采用現(xiàn)有技術(shù)中的任意一種方法。本實施例所嵌入的鉤子函數(shù)及異常處理函數(shù)僅對可加速代碼起作用,本實施例的主要目的是對可加速代碼進行編譯,以使得編譯之后得到的可執(zhí)行代碼在執(zhí)行的過程中,執(zhí)行到鉤子函數(shù)時,可以利用異常處理函數(shù)中的條件控制代碼自動為編譯后的可加速代碼(第一可加速分支代碼及第二可加速分支代碼)選擇目標處理器。
[0069]本實施例中,編譯器在對可加速代碼編譯前,在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)形成第二用戶代碼,然后對第二用戶代碼進行編譯得到可執(zhí)行代碼。而嵌入鉤子函數(shù)與異常處理函數(shù)的目的是:使得在可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到鉤子函數(shù)時,利用異常處理函數(shù)中的條件控制代碼為第一可加速分支代碼及第二可加速分支代碼選擇目標處理器。因而,本實施例中生成的可執(zhí)行代碼在被執(zhí)行的時候可以根據(jù)實際情況自動實現(xiàn)處理器的合理調(diào)度,簡化了開發(fā)者的工作,且合理地利用了系統(tǒng)資源。
[0070]為便于理解,下面以一具體實施例對本發(fā)明實施例中代碼生成方法進行描述,請參閱圖2,本實施例中的代碼生成方法仍應用于調(diào)度系統(tǒng),調(diào)度系統(tǒng)中包含異構(gòu)系統(tǒng)、編譯器。本實施例生成的代碼仍是可應用于異構(gòu)系統(tǒng)的可執(zhí)行代碼,其中,異構(gòu)系統(tǒng)可包括加速處理器及中央處理器。本實施例方法包括:
[0071]201、編譯器獲取加速處理器資源的信息及中央處理器資源的信息;
[0072]編譯器調(diào)用系統(tǒng)知識庫,從系統(tǒng)知識庫中獲取當前系統(tǒng)的硬件資源信息,該硬件資源信息主要包括加速處理器資源的信息及中央處理器資源的信息。
[0073]202、編譯器調(diào)用運行代價評估函數(shù)對加速處理器及中央處理器進行運行代價評估;
[0074]編譯器從第一用戶代碼中任意選取一段代碼,將該代碼進行編譯,此處可將編譯后的代碼稱為測試代碼。編譯器將這段測試代碼分別放在加速處理器及中央處理器上運行,同時調(diào)用運行代價評估函數(shù)對加速處理器及中央處理器進行運行代價評估,此處的運行代價指的是處理器運行測試代碼的時間。同一段測試代碼,運行需要的時間越長,說明該處理器的運行代價越大。
[0075]203、編譯器生成可運行平臺列表及親屬性列表;
[0076]編譯器對加速處理器及中央處理器進行運行代價評估后生成可運行平臺列表及親屬性列表。其中,可運行平臺列表中包含所有加速處理器及所有中央處理器,可運行平臺列表還可以包括各個處理器的編號、運行代價等。而親屬性列表中只包含可運行平臺列表中運行代價小于預設(shè)數(shù)值的預定數(shù)目的加速處理器。
[0077]204、編譯器從第一用戶代碼中識別出可加速代碼;
[0078]編譯器根據(jù)所獲取的加速處理器資源的信息從第一用戶代碼中識別出可加速代碼。可加速代碼編譯后可以在加速處理器及中央處理器上運行,但是在加速處理器上運行的代價小于在中央處理器上的運行代價。
[0079]205、編譯器在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼;
[0080]鉤子函數(shù)的主要作用是產(chǎn)生異常,而異常處理函數(shù)主要用于解決鉤子函數(shù)產(chǎn)生的異常,異常處理函數(shù)中包含條件控制代碼。編譯器在識別出可加速代碼后在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼,所以第二用戶代碼中含有鉤子函數(shù)、異常處理函數(shù)及可加速代碼。
[0081]206、編譯器對第二用戶代碼進行編譯得到可執(zhí)行代碼。
[0082]其中,編譯得到的可執(zhí)行代碼中含有可執(zhí)行用戶代碼,第一可加速分支代碼及第二可加速分支代碼??蓤?zhí)行用戶代碼是由第二用戶代碼中的鉤子函數(shù)及異常處理函數(shù)編譯得到的,第一可加速分支代碼及第二可加速分支代碼均是由第二用戶代碼中的可加速代碼編譯得到的。
[0083]本實施例中,為了提高編譯效率,編譯器在對第二用戶代碼進行編譯之前,生成了親屬性列表及可運行平臺列表,所以編譯器可將可加速代碼編譯成只用于在親屬性列表中的加速處理器上執(zhí)行的第一可加速分支代碼,而親屬性列表中的加速處理器只是可運行平臺列表內(nèi)的加速處理器中的一部分,所以本實施例的方法節(jié)省了編譯時間。另外,可執(zhí)行代碼中的第二可加速分支代碼用于在可運行平臺列表中的所有中央處理器上執(zhí)行。
[0084]步驟205中在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)是為了在可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到鉤子函數(shù)時,產(chǎn)生異常,然后利用異常處理函數(shù)中的條件控制代碼為第一可加速分支代碼及第二可加速分支代碼選擇目標處理器,因而,本實施例生成的可執(zhí)行代碼在被執(zhí)行的時候可以自動調(diào)用合適的處理器,不需要開發(fā)者事先解決系統(tǒng)資源調(diào)度問題。
[0085]需要說明的是,本實施中提到的第一用戶代碼中不僅含有可加速代碼,也含有非可加速代碼,非可加速代碼的編譯方法可采用現(xiàn)有技術(shù)中的任意一種方法。本實施例所嵌入的鉤子函數(shù)及異常處理函數(shù)僅對可加速代碼起作用,本實施例的主要目的是對可加速代碼進行編譯,以使得編譯之后得到的可執(zhí)行代碼在執(zhí)行的過程中,執(zhí)行到鉤子函數(shù)時,可以利用異常處理函數(shù)中的條件控制代碼自動為編譯后的可加速代碼(第一可加速分支代碼及第二可加速分支代碼)選擇目標處理器。
[0086]本實施例中,編譯器在對加速處理器及中央處理器進行運行代價評估后,生成了可運行平臺列表及親屬性列表,在對可加速代碼進行編譯前,在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)形成第二用戶代碼,然后對第二用戶代碼進行編譯得到可執(zhí)行代碼,可執(zhí)行代碼中的第一可加速分支代碼只用于在親屬性列表中的加速處理器上執(zhí)行,而親屬性列表中的加速處理器只是可運行平臺列表中的加速處理器中的一部分,因而本實施例提供的代碼生成方法節(jié)省了編譯時間,提高了編譯效率。另外,嵌入鉤子函數(shù)與異常處理函數(shù)的目的是:使得在可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到鉤子函數(shù)時,利用異常處理函數(shù)中的條件控制代碼為第一可加速分支代碼及第二可加速分支代碼選擇目標處理器。因而,本實施例中生成的可執(zhí)行代碼在被執(zhí)行的時候可以根據(jù)實際情況自動實現(xiàn)處理器的合理調(diào)度,簡化了開發(fā)者的工作,且合理地利用了系統(tǒng)資源。
[0087]上面兩個實施例說明了可執(zhí)行代碼的生成方法,下面將說明調(diào)度裝置執(zhí)行可執(zhí)行代碼對異構(gòu)系統(tǒng)進行調(diào)度的方法,請參閱圖3。本實施例的調(diào)度方法應用于調(diào)度系統(tǒng),本實施例中的調(diào)度系統(tǒng)可包括調(diào)度裝置、異構(gòu)系統(tǒng),異構(gòu)系統(tǒng)包括加速處理器、中央處理器。本發(fā)明實施例中調(diào)度方法一個實施例包括:
[0088]301、調(diào)度裝置加載并執(zhí)行編譯器生成的可執(zhí)行代碼;
[0089]可執(zhí)行代碼中包含編譯器將鉤子函數(shù)及異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及編譯器將可加速代碼編譯得到的用于在加速處理器上執(zhí)行的第一可加速分支代碼以及用于在中央處理器上執(zhí)行的第二可加速分支代碼。
[0090]其中,鉤子函數(shù)與異常處理函數(shù)僅對將可加速代碼編譯得到的第一可加速分支代碼及第二可加速分支代碼起作用,對其他由非可加速代碼編譯得到的代碼不起作用。
[0091]302、調(diào)度裝置在執(zhí)行到鉤子函數(shù)時,產(chǎn)生異常;
[0092]303、調(diào)度裝置調(diào)用異常處理函數(shù),根據(jù)異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,利用進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行第一可加速分支代碼及第二可加速分支代碼的目標處理器;
[0093]在異常產(chǎn)生后,調(diào)度裝置調(diào)用異常處理函數(shù),根據(jù)異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,進程調(diào)度接口的參數(shù)為可運行平臺列表,可運行平臺列表中包含所有加速處理器及中央處理器。調(diào)度裝置利用進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行第一可加速分支代碼及第二可加速分支代碼的目標處理器。
[0094]304、調(diào)度裝置調(diào)用目標處理器,以利用目標處理器執(zhí)行第一可加速分支代碼及第二可加速分支代碼。
[0095]本實施例中,可執(zhí)行代碼在調(diào)度裝置中被執(zhí)行,當執(zhí)行到鉤子函數(shù)時,產(chǎn)生異常,調(diào)度裝置調(diào)用異常處理函數(shù),以利用異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,利用進程調(diào)度接口的可運行平臺列表獲取用于執(zhí)行第一可加速分支代碼及第二可加速分支代碼的目標處理器,然后調(diào)用目標處理器執(zhí)行對應的可加速分支代碼??蓤?zhí)行代碼在被執(zhí)行過程中,調(diào)度裝置可利用條件控制代碼自動獲取合適的目標處理器執(zhí)行對應的可加速代碼分支,不需要開發(fā)者自己解決系統(tǒng)資源調(diào)度問題,簡化了開發(fā)者的工作,且能夠合理地利用系統(tǒng)資源。
[0096]為便于理解,下面以一具體實施例對本發(fā)明實施例中的調(diào)度方法進行描述,請參閱圖4,本實施例的調(diào)度方法應用于調(diào)度系統(tǒng),本實施例中的調(diào)度系統(tǒng)可包括調(diào)度裝置、異構(gòu)系統(tǒng)。異構(gòu)系統(tǒng)包括加速處理器、中央處理器。本發(fā)明實施例中調(diào)度方法另一實施例包括:
[0097]401、調(diào)度裝置加載并執(zhí)行編譯器生成的可執(zhí)行代碼;
[0098]可執(zhí)行代碼中包含編譯器將鉤子函數(shù)及異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及編譯器將可加速代碼編譯得到的用于在加速處理器上執(zhí)行的第一可加速分支代碼以及用于在中央處理器上執(zhí)行的第二可加速分支代碼。
[0099]其中,鉤子函數(shù)與異常處理函數(shù)僅對將可加速代碼編譯得到的第一可加速分支代碼及第二可加速分支代碼起作用,對其他由非可加速代碼編譯得到的代碼不起作用。
[0100]402、調(diào)度裝置在執(zhí)行到鉤子函數(shù)時,產(chǎn)生異常;
[0101]403、調(diào)度裝置調(diào)用異常處理函數(shù),根據(jù)異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,利用進程調(diào)度接口的親屬性列表及可運行平臺列表得到分別用于執(zhí)行第一可加速分支代碼及第二可加速分支代碼的目標處理器;
[0102]在異常產(chǎn)生后,調(diào)度裝置調(diào)用異常處理函數(shù),根據(jù)異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,進程調(diào)度接口的參數(shù)為親屬性列表和可運行平臺列表,可運行平臺列表中包含所有加速處理器及中央處理器,親屬性列表中包含在可運行平臺列表中運行代價小于預置數(shù)值的預定數(shù)目的加速處理器。調(diào)度裝置利用進程調(diào)度接口的親屬性列表得到用于執(zhí)行第一可加速分支代碼的目標處理器,從可運行平臺列表中得到用于執(zhí)行第二可加速分支代碼的目標處理器。
[0103]具體地,調(diào)度裝置從進程調(diào)度接口的親屬性列表中獲取負載最少,和/或運行代價最小的加速處理器作為執(zhí)行第一可加速分支代碼的目標處理器,從進程調(diào)度接口的可運行平臺列表中獲取負載最少,和/或運行代價最小的中央處理器作為執(zhí)行第二可加速分支代碼的目標處理器。
[0104]404、調(diào)度裝置調(diào)用目標處理器,以利用目標處理器執(zhí)行第一可加速分支代碼及第二可加速分支代碼。
[0105]本實施例中,可執(zhí)行代碼在調(diào)度裝置中被執(zhí)行,當執(zhí)行到鉤子函數(shù)時,產(chǎn)生異常,調(diào)度裝置調(diào)用異常處理函數(shù),以利用異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,利用進程調(diào)度接口的親屬性列表及可運行平臺列表分別獲取用于執(zhí)行第一可加速分支代碼及第二可加速分支代碼的目標處理器,然后調(diào)用目標處理器執(zhí)行對應的可加速分支代碼??蓤?zhí)行代碼在被執(zhí)行過程中,調(diào)度裝置可利用條件控制代碼自動獲取合適的目標處理器執(zhí)行對應的可加速代碼分支,不需要開發(fā)者自己解決系統(tǒng)資源調(diào)度問題,簡化了開發(fā)者的工作,且能夠合理地利用系統(tǒng)資源。
[0106]下面對本發(fā)明實施例中的編譯器進行描述,請參閱圖5,本實施例中的編譯器用于生成在異構(gòu)系統(tǒng)上執(zhí)行的可執(zhí)行代碼,本實施例中的異構(gòu)系統(tǒng)可包括加速處理器、中央處理器。本發(fā)明實施例中的編譯器一個實施例包括:
[0107]獲取單元501,用于獲取加速處理器資源的信息以及中央處理器資源的信息;
[0108]生成單元502,用于根據(jù)獲取單元501獲取的加速處理器資源的信息以及中央處理器資源的信息生成可運行平臺列表,可運行平臺列表中包含所有加速處理器及中央處理器;
[0109]識別單元503,用于根據(jù)獲取單元501獲取的加速處理器資源的信息從第一用戶代碼中識別出可加速代碼;
[0110]嵌入單元504,用于在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼;
[0111]編譯單元505,用于對第二用戶代碼進行編譯得到可執(zhí)行代碼,其中,可執(zhí)行代碼中包含將鉤子函數(shù)與異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及將可加速代碼編譯得到的第一可加速分支代碼及第二可加速分支代碼,第一可加速分支代碼用于在可運行平臺列表中的加速處理器上執(zhí)行,第二可加速分支代碼用于在可運行平臺列表中的中央處理器上執(zhí)行,嵌入鉤子函數(shù)與異常處理函數(shù)的目的是:使得在可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到鉤子函數(shù)時,利用異常處理函數(shù)中的條件控制代碼為第一可加速分支代碼及第二可加速分支代碼選擇目標處理器;
[0112]評估單元506,用于調(diào)用運行代價評估函數(shù)對加速處理器及中央處理器進行運行代價評估。
[0113]為便于理解,下面以一個實際應用場景對本實施例中編譯器的各單元之間的交互方式進行描述,具體如下:
[0114]獲取單元501調(diào)用系統(tǒng)知識庫,從系統(tǒng)知識庫中獲取當前系統(tǒng)的硬件資源信息,該硬件資源信息主要包括加速處理器資源的信息及中央處理器資源的信息。
[0115]生成單元502根據(jù)獲取單元501獲取的加速處理器資源的信息及中央處理器資源的信息生成可運行平臺列表,可運行平臺列表中包含所有加速處理器及中央處理器。
[0116]識別單元503根據(jù)獲取單元501獲取的加速處理器資源的信息從第一用戶代碼中識別出可加速代碼,可加速代碼編譯后可以在加速處理器及中央處理器上運行。
[0117]嵌入單元504在識別單元503識別出的可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼。其中,鉤子函數(shù)的主要作用是產(chǎn)生異常,而異常處理函數(shù)主要用于解決鉤子函數(shù)產(chǎn)生的異常,異常處理函數(shù)中包含條件控制代碼。嵌入單元504在識別出的可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼,所以第二用戶代碼中含有鉤子函數(shù)、異常處理函數(shù)及可加速代碼。
[0118]編譯單元505對嵌入單元504形成的第二用戶代碼進行編譯得到可執(zhí)行代碼。其中,編譯得到的可執(zhí)行代碼中含有可執(zhí)行用戶代碼,第一可加速分支代碼及第二可加速分支代碼??蓤?zhí)行用戶代碼是由第二用戶代碼中的鉤子函數(shù)及異常處理函數(shù)編譯得到的,第一可加速分支代碼及第二可加速分支代碼均是由第二用戶代碼中的可加速代碼編譯得到的,第一可加速分支代碼用于在可運行平臺列表中的所有加速處理器上執(zhí)行,第二可加速分支代碼用于在可運行平臺列表中的所有中央處理器上執(zhí)行。
[0119]嵌入單元504在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)是為了在執(zhí)行可執(zhí)行代碼的過程中,執(zhí)行到鉤子函數(shù)時,產(chǎn)生異常,然后利用異常處理函數(shù)中的條件控制代碼為第一可加速分支代碼及第二可加速分支代碼選擇目標處理器,因而,本實施例生成的可執(zhí)行代碼在被執(zhí)行的時候可以自動調(diào)用合適的處理器,不需要開發(fā)者事先解決系統(tǒng)資源調(diào)度問題。
[0120]另外,本實施例中的編譯器還包括評估單元506,評估單元506用于調(diào)用運行代價評估函數(shù)對獲取單元501獲取的加速處理器及中央處理器進行運行代價評估。具體的評估方法可如下:
[0121]評估單元506從第一用戶代碼中任意選取一段代碼,將該代碼進行編譯,此處可將編譯后的代碼稱為測試代碼。評估單元506將這段測試代碼分別放在加速處理器及中央處理器上運行,同時調(diào)用運行代價評估函數(shù)對加速處理器及中央處理器進行運行代價評估,此處的運行代價指的是處理器運行測試代碼的時間。同一段測試代碼,運行需要的時間越長,說明該處理器的運行代價越大。
[0122]在評估單元506對系統(tǒng)中的加速處理器及中央處理器進行運行代價評估后,生成單元502生成的可運行平臺列表中可包含各個處理器的運行代價。
[0123]為了提高編譯效率,生成單元502在編譯單元505對第二用戶代碼進行編譯之前,還可以選取運行代價小于預設(shè)數(shù)值的預定數(shù)目的加速處理器生成了親屬性列表,親屬性列表中包含在可運行平臺列表中運行代價小于預置數(shù)值的預定數(shù)目的加速處理器,所以編譯單元505可將可加速代碼編譯生成只用于在親屬性列表中的加速處理器上執(zhí)行的第一可加速分支代碼,而親屬性列表中的加速處理器只是可運行平臺列表中的加速處理器中的一部分,所以這種編譯方法節(jié)省了編譯時間。
[0124]另外,需要說明的是,本實施中提到的第一用戶代碼中不僅含有可加速代碼,也含有非可加速代碼,非可加速代碼的編譯方法可采用現(xiàn)有技術(shù)中的任意一種方法。本實施例所嵌入的鉤子函數(shù)及異常處理函數(shù)僅對可加速代碼起作用,本實施例的主要目的是編譯器對可加速代碼進行編譯,以使得編譯之后得到的可執(zhí)行代碼在執(zhí)行的過程中,執(zhí)行到鉤子函數(shù)時,可以利用異常處理函數(shù)中的條件控制代碼自動為編譯后的可加速代碼(第一可加速分支代碼及第二可加速分支代碼)選擇目標處理器。
[0125]本實施例中,生成單元在評估單元在對加速處理器及中央處理器進行運行代價評估后,生成了可運行平臺列表及親屬性列表,可運行平臺列表及親屬性列表中可包含各個處理器的運行代價;嵌入單元在編譯單元對可加速代碼進行編譯前,在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)形成第二用戶代碼,然后編譯單元對第二用戶代碼進行編譯得到可執(zhí)行代碼。本實施例中,可將可加速代碼編譯成用于在可運行平臺列表中的所有中央處理器上運行的第二可加速分支代碼,以及只用于在親屬性列表中的加速處理器上執(zhí)行的第一可加速分支代碼,而親屬性列表中的加速處理器只是可運行平臺列表內(nèi)的加速處理器中的一部分,因而本實施例提供的代碼生成方法可節(jié)省編譯時間,提高編譯效率。另外,嵌入鉤子函數(shù)與異常處理函數(shù)的目的是:使得在可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到鉤子函數(shù)時,利用異常處理函數(shù)中的條件控制代碼為第一可加速分支代碼及第二可加速分支代碼選擇目標處理器。因而,本實施例中編譯器生成的可執(zhí)行代碼在被執(zhí)行的時候可以根據(jù)實際情況自動實現(xiàn)處理器的合理調(diào)度,簡化了開發(fā)者的工作,且合理地利用了系統(tǒng)資源。
[0126]下面對本發(fā)明實施例中的調(diào)度裝置進行描述,請參閱圖6,本實施例中的調(diào)度裝置用于調(diào)度異構(gòu)系統(tǒng),本實施例中的異構(gòu)系統(tǒng)可包括加速處理器、中央處理器。本發(fā)明實施例中的調(diào)度裝置一個實施例包括:
[0127]執(zhí)行單元601,用于加載并執(zhí)行編譯器生成的可執(zhí)行代碼,可執(zhí)行代碼中包含編譯器將鉤子函數(shù)及異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及編譯器將可加速代碼編譯得到的用于在加速處理器上執(zhí)行的第一可加速分支代碼以及用于在中央處理器上執(zhí)行的第二可加速分支代碼;
[0128]異常產(chǎn)生單元602,用于在執(zhí)行到鉤子函數(shù)時,產(chǎn)生異常;
[0129]第一調(diào)用單元603,用于調(diào)用異常處理函數(shù),根據(jù)異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,利用進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行第一可加速分支代碼及第二可加速分支代碼的目標處理器,可運行平臺列表中包含所有加速處理器及中央處理器;
[0130]第二調(diào)用單元604,用于調(diào)用目標處理器,以利用目標處理器執(zhí)行第一可加速分支代碼及第二可加速分支代碼。
[0131]為便于理解,下面以一個實際應用場景對本實施例中調(diào)度裝置的各單元之間的交互方式進行描述,具體如下:
[0132]執(zhí)行單元601加載并執(zhí)行編譯器生成的可執(zhí)行代碼,可執(zhí)行代碼中包含編譯器將鉤子函數(shù)及異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及編譯器將可加速代碼編譯得到的用于在加速處理器上執(zhí)行的第一可加速分支代碼以及用于在中央處理器上執(zhí)行的第二可加速分支代碼。
[0133]其中,鉤子函數(shù)與異常處理函數(shù)僅對將可加速代碼編譯得到的第一可加速分支代碼及第二可加速分支代碼起作用,對其他由非可加速代碼編譯得到的代碼不起作用。
[0134]異常產(chǎn)生單元602在執(zhí)行單元601執(zhí)行到鉤子函數(shù)時,產(chǎn)生異常。
[0135]第一調(diào)用單元603在異常產(chǎn)生單元602產(chǎn)生異常后,調(diào)用異常處理函數(shù),根據(jù)異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口。
[0136]如果編譯器在代碼編譯階段生成的只有可運行平臺列表,則進程調(diào)度接口的參數(shù)就為可運行平臺列表,可運行平臺列表中包含所有加速處理器及中央處理器。這種情況說明:可執(zhí)行代碼中的第一可加速分支代碼可以在可運行平臺列表中的所有加速處理器上執(zhí)行,可執(zhí)行代碼中的第二可加速分支代碼可以在可運行平臺列表中的所有中央處理器上執(zhí)行。第一調(diào)用單元603可利用進程調(diào)度接口的可運行平臺列表得到用于執(zhí)行第一可加速分支代碼及第二可加速分支代碼的目標處理器。
[0137]具體地,第一調(diào)用單元603從進程調(diào)度接口的可運行平臺列表中獲取負載最少,和/或運行代價最小的加速處理器及中央處理器分別作為執(zhí)行第一可加速分支代碼及第二可加速分支代碼的目標處理器。
[0138]另外,如果編譯器在代碼編譯階段生成的有可運行平臺列表及親屬性列表,則進程調(diào)度接口的參數(shù)就為可運行平臺列表及親屬性列表。其中,可運行平臺列表中包含所有加速處理器及中央處理器,親屬性列表中包含在可運行平臺列表中運行代價小于預置數(shù)值的預定數(shù)目的加速處理器。這種情況說明:可執(zhí)行代碼中的第一可加速分支代碼只能在部分加速處理器上執(zhí)行,這部分加速處理是親屬性列表中的加速處理器,可執(zhí)行代碼中的第二可加速分支代碼可以在可運行平臺列表中的所有中央處理器上執(zhí)行。
[0139]當進程調(diào)度接口的參數(shù)為可運行平臺列表及親屬性列表時,第一調(diào)用單元603可從親屬性列表中獲取負載最少,和/或運行代價最小的加速處理器作為執(zhí)行第一可加速分支代碼的目標處理器,從可運行平臺列表中獲取負載最少,和/或運行代價最小的中央處理器作為執(zhí)行第二可加速分支代碼的目標處理器。
[0140]第二調(diào)用單元604調(diào)用第一調(diào)用單元603獲取的目標處理器,以利用目標處理器執(zhí)行第一可加速分支代碼及第二可加速分支代碼。
[0141]本實施例中,執(zhí)行單元執(zhí)行可執(zhí)行代碼,異常產(chǎn)生單元在執(zhí)行單元執(zhí)行到鉤子函數(shù)時,產(chǎn)生異常,第一調(diào)用單元調(diào)用異常處理函數(shù),以利用異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,利用進程調(diào)度接口的親屬性列表及可運行平臺列表分別獲取用于執(zhí)行第一可加速分支代碼及第二可加速分支代碼的目標處理器,然后第二調(diào)用單元調(diào)用目標處理器執(zhí)行對應的可加速分支代碼。可執(zhí)行代碼在被執(zhí)行過程中,調(diào)度裝置可利用條件控制代碼自動獲取合適的目標處理器執(zhí)行對應的可加速代碼分支,不需要開發(fā)者自己解決系統(tǒng)資源調(diào)度問題,簡化了開發(fā)者的工作,且能夠合理地利用系統(tǒng)資源。
[0142]下面對本發(fā)明實施例中的編譯器進一步說明,請參閱圖7,本發(fā)明實施例中編譯器包括:第一處理器701、用于存儲緩存代碼的第一存儲器702、第一輸入裝置703及第一輸出裝置704。
[0143]第一處理器701執(zhí)行如下流程:
[0144]獲取加速處理器資源的信息以及中央處理器資源的信息以生成可運行平臺列表,并根據(jù)加速處理器資源的信息從第一用戶代碼中識別出可加速代碼,可運行平臺列表中包含所有加速處理器及中央處理器;
[0145]在可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼;
[0146]對第二用戶代碼進行編譯得到可執(zhí)行代碼,其中,可執(zhí)行代碼中包含將鉤子函數(shù)與異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及將可加速代碼編譯得到的第一可加速分支代碼及第二可加速分支代碼,第一可加速分支代碼用于在可運行平臺列表中的加速處理器上執(zhí)行,第二可加速分支代碼用于在可運行平臺列表中的中央處理器上執(zhí)行,嵌入鉤子函數(shù)與異常處理函數(shù)的目的是:使得在可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到鉤子函數(shù)時,利用異常處理函數(shù)中的條件控制代碼為第一可加速分支代碼及第二可加速分支代碼選擇目標處理器。
[0147]下面對本發(fā)明實施例中的調(diào)度裝置進一步說明,請參閱圖8,本發(fā)明實施例中調(diào)度裝置包括:第二處理器801、用于存儲緩存代碼第二存儲器802、第二輸入裝置803及第二輸出裝置804。
[0148]第二處理器801執(zhí)行如下流程:
[0149]加載并執(zhí)行編譯器生成的可執(zhí)行代碼,可執(zhí)行代碼中包含編譯器將鉤子函數(shù)及異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及編譯器將可加速代碼編譯得到的用于在加速處理器上執(zhí)行的第一可加速分支代碼以及用于在中央處理器上執(zhí)行的第二可加速分支代碼;
[0150]執(zhí)行到所述鉤子函數(shù)時,產(chǎn)生異常;
[0151]調(diào)用異常處理函數(shù),根據(jù)異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,利用進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行第一可加速分支代碼及第二可加速分支代碼的目標處理器,可運行平臺列表中包含所有加速處理器及中央處理器;
[0152]調(diào)用目標處理器,以利用目標處理器執(zhí)行第一可加速分支代碼及第二可加速分支代碼。
[0153]本發(fā)明實施例還提供了一種調(diào)度系統(tǒng),請參閱圖9,該調(diào)度系統(tǒng)包括:編譯器901、調(diào)度裝置902,至少一個加速處理器903及至少一個中央處理器904。
[0154]需要說明的是,本實施例中的編譯器可與前述圖5所示的編譯器相同,本實施例中的調(diào)度裝置可與前述圖6所示的調(diào)度裝置相同,具體此處不再贅述。
[0155]另外需說明的是,以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為模塊顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。另外,本發(fā)明提供的裝置實施例附圖中,模塊之間的連接關(guān)系表示它們之間具有通信連接,具體可以實現(xiàn)為一條或多條通信總線或信號線。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
[0156]通過以上的實施方式的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件的方式來實現(xiàn),當然也可以通過專用硬件包括專用集成電路、專用CPU、專用存儲器、專用元器件等來實現(xiàn)。一般情況下,凡由計算機程序完成的功能都可以很容易地用相應的硬件來實現(xiàn),而且,用來實現(xiàn)同一功能的具體硬件結(jié)構(gòu)也可以是多種多樣的,例如模擬電路、數(shù)字電路或?qū)S秒娐返?。但是,對本發(fā)明而言更多情況下軟件程序?qū)崿F(xiàn)是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在可讀取的存儲介質(zhì)中,如計算機的軟盤,U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM, Random Access Memory)、磁碟或者光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務器,或者網(wǎng)絡設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。
[0157]以上對本發(fā)明實施例所提供的一種代碼生成方法、編譯器、調(diào)度方法、裝置及調(diào)度系統(tǒng)進行了詳細介紹,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明實施例的思想,在【具體實施方式】及應用范圍上均會有改變之處,因此,本說明書內(nèi)容不應理解為對本發(fā)明的限制。
【權(quán)利要求】
1.一種代碼生成方法,其特征在于,應用于調(diào)度系統(tǒng),所述調(diào)度系統(tǒng)中包括異構(gòu)系統(tǒng)、編譯器,所述代碼為可執(zhí)行代碼,所述可執(zhí)行代碼應用于異構(gòu)系統(tǒng),所述異構(gòu)系統(tǒng)包括加速處理器和中央處理器,所述方法包括: 所述編譯器獲取所述加速處理器資源的信息以及所述中央處理器資源的信息以生成可運行平臺列表,并根據(jù)所述加速處理器資源的信息從第一用戶代碼中識別出可加速代碼,所述可運行平臺列表中包含所有加速處理器及中央處理器; 所述編譯器在所述可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼; 所述編譯器對所述第二用戶代碼進行編譯得到可執(zhí)行代碼,其中,所述可執(zhí)行代碼中包含將所述鉤子函數(shù)與所述異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及將所述可加速代碼編譯得到的第一可加速分支代碼及第二可加速分支代碼,所述第一可加速分支代碼用于在所述可運行平臺列表中的加速處理器上執(zhí)行,所述第二可加速分支代碼用于在所述可運行平臺列表中的中央處理器上執(zhí)行,所述嵌入鉤子函數(shù)與異常處理函數(shù)的目的是:使得在所述可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到所述鉤子函數(shù)時,利用所述異常處理函數(shù)中的條件控制代碼為所述第一可加速分支代碼及所述第二可加速分支代碼選擇目標處理器。
2.如權(quán)利要求1所述的方法,其特征在于,所述編譯器在生成可運行平臺列表之前,還包括: 調(diào)用運行代價評估函數(shù)對所述加速處理器及所述中央處理器進行運行代價評估。
3.如權(quán)利要求2所述的方法,其特征在于,所述編譯器對所述第二用戶代碼進行編譯得到可執(zhí)行代碼之前還包括: 所述編譯器在所述加速處理器中選取運行代價小于預置數(shù)值的預定數(shù)目的加速處理器生成親屬性列表,所述親屬性列表中包含在所述可運行平臺列表中運行代價小于預置數(shù)值的預定數(shù)目的加速處理器; 所述第一可加速分支代碼用于在所述親屬性列表中的加速處理器上執(zhí)行。
4.一種調(diào)度方法,其特征在于,應用于調(diào)度系統(tǒng),所述調(diào)度系統(tǒng)包括調(diào)度裝置、異構(gòu)系統(tǒng),所述異構(gòu)系統(tǒng)包括加速處理器及中央處理器,所述方法包括: 所述調(diào)度裝置加載并執(zhí)行編譯器生成的可執(zhí)行代碼,所述可執(zhí)行代碼中包含所述編譯器將鉤子函數(shù)及異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及所述編譯器將可加速代碼編譯得到的用于在所述加速處理器上執(zhí)行的第一可加速分支代碼以及用于在所述中央處理器上執(zhí)行的第二可加速分支代碼; 所述調(diào)度裝置在執(zhí)行到所述鉤子函數(shù)時,產(chǎn)生異常; 所述調(diào)度裝置調(diào)用所述異常處理函數(shù),根據(jù)所述異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,利用所述進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼的目標處理器,所述可運行平臺列表中包含所有加速處理器及中央處理器; 所述調(diào)度裝置調(diào)用所述目標處理器,以利用所述目標處理器執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼。
5.如權(quán)利要求4所述的方法,其特征在于,所述調(diào)度裝置利用所述進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼的目標處理器的方法包括: 所述調(diào)度裝置從所述進程調(diào)度接口的所述可運行平臺列表中獲取負載最少,和/或運行代價最小的加速處理器及中央處理器作為所述目標處理器。
6.如權(quán)利要求5所述的方法,其特征在于,所述進程調(diào)度接口中還包括親屬性列表,所述親屬性列表中包含在所述可運行平臺列表中運行代價小于預置數(shù)值的預定數(shù)目的加速處理器; 所述調(diào)度裝置從所述進程調(diào)度接口的所述可運行平臺列表中獲取負載最少,和/或運行代價最小的加速處理器及中央處理器作為目標處理器,包括: 所述調(diào)度裝置從所述進程調(diào)度接口的親屬性列表中獲取負載最少,和/或運行代價最小的加速處理器作為執(zhí)行所述第一可加速分支代碼的目標處理器,從所述進程調(diào)度接口的可運行平臺列表中獲取負載最少,和/或運行代價最小的中央處理器作為執(zhí)行所述第二可加速分支代碼的目標處理器。
7.一種編譯器,其特征在于,用于生成可執(zhí)行代碼,所述可執(zhí)行代碼應用于異構(gòu)系統(tǒng),所述異構(gòu)系統(tǒng)包括加速處理器和中央處理器,所述編譯器包括: 獲取單元,用于獲取所述加速處理器資源的信息以及所述中央處理器資源的信息; 生成單元,用于根據(jù)所述獲取單元獲取的所述加速處理器資源的信息以及所述中央處理器資源的信息生成可運行平臺列表,所述可運行平臺列表中包含所有加速處理器及中央處理器; 識別單元,用于根據(jù)所述獲取單元獲取的加速處理器資源的信息從第一用戶代碼中識別出可加速代碼; 嵌入單元,用于在所述可加速代碼前嵌入鉤子函數(shù)與異常處理函數(shù)以形成第二用戶代碼; 編譯單元,用于對所述第二用戶代碼進行編譯得到可執(zhí)行代碼,其中,所述可執(zhí)行代碼中包含將所述鉤子函數(shù)與所述異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及將所述可加速代碼編譯得到的第一可加速分支代碼及第二可加速分支代碼,所述第一可加速分支代碼用于在所述可運行平臺列表中的加速處理器上執(zhí)行,所述第二可加速分支代碼用于在所述可運行平臺列表中的中央處理器上執(zhí)行,所述嵌入鉤子函數(shù)與異常處理函數(shù)的目的是:使得在所述可執(zhí)行代碼被執(zhí)行的過程中,執(zhí)行到所述鉤子函數(shù)時,利用所述異常處理函數(shù)中的條件控制代碼為所述第一可加速分支代碼及所述第二可加速分支代碼選擇目標處理器。
8.如權(quán)利要求7所述的編譯器,其特征在于,所述編譯器還包括: 評估單元,用于調(diào)用運行代價評估函數(shù)對所述加速處理器及所述中央處理器進行運行代價評估。
9.如權(quán)利要求8所述的編譯器,其特征在于,所述生成單元還用于: 在所述加速處理器中選取運行代價小于預置數(shù)值的預定數(shù)目的加速處理器生成親屬性列表,所述親屬性列表中包含在所述可運行平臺列表中運行代價小于預置數(shù)值的預定數(shù)目的加速處理器; 所述第一可加速分支代碼用于在所述親屬性列表中的加速處理器上執(zhí)行。
10.一種調(diào)度裝置,其特征在于,用于調(diào)度異構(gòu)系統(tǒng),所述異構(gòu)系統(tǒng)包括加速處理器及中央處理器,所述裝置包括: 執(zhí)行單元,用于加載并執(zhí)行編譯器生成的可執(zhí)行代碼,所述可執(zhí)行代碼中包含所述編譯器將鉤子函數(shù)及異常處理函數(shù)編譯得到的可執(zhí)行用戶代碼,以及所述編譯器將可加速代碼編譯得到的用于在所述加速處理器上執(zhí)行的第一可加速分支代碼以及用于在所述中央處理器上執(zhí)行的第二可加速分支代碼; 異常產(chǎn)生單元,用于在執(zhí)行到所述鉤子函數(shù)時,產(chǎn)生異常; 第一調(diào)用單元,用于調(diào)用所述異常處理函數(shù),根據(jù)所述異常處理函數(shù)中的條件控制代碼調(diào)用進程調(diào)度接口,利用所述進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼的目標處理器,所述可運行平臺列表中包含所有加速處理器及中央處理器; 第二調(diào)用單元,用于調(diào)用所述目標處理器,以利用所述目標處理器執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼。
11.如權(quán)利要求10所述的調(diào)度裝置,其特征在于,所述第一調(diào)用單元利用所述進程調(diào)度接口的可運行平臺列表得到分別用于執(zhí)行所述第一可加速分支代碼及所述第二可加速分支代碼的目標處理器的方法包括: 所述第一調(diào)用單元從所述進程調(diào)度接口的所述可運行平臺列表中獲取負載最少,和/或運行代價最小的加速處理器及中央處理器作為所述目標處理器。
12.如權(quán)利11所述的調(diào)度裝置,其特征在于,所述進程調(diào)度接口中還包括親屬性列表,所述親屬性列表中包含在所述可運行平臺列表中運行代價小于預置數(shù)值的預定數(shù)目的加速處理器; 所述第一調(diào)用單元從所述進程調(diào)度接口的所述可運行平臺列表中獲取負載最少,和/或運行代價最小的加速處理器及中央處理器作為所述目標處理器,包括: 所述第一調(diào)用單元從所述進程調(diào)度接口的親屬性列表中獲取負載最少,和/或運行代價最小的加速處理器作為執(zhí)行所述第一可加速分支代碼的目標處理器,從所述進程調(diào)度接口的可運行平臺列表中獲取負載最少,和/或運行代價最小的中央處理器作為執(zhí)行所述第二可加速分支代碼的目標處理器。
13.一種調(diào)度系統(tǒng),其特征在于,包括:如權(quán)利要求7所述的編譯器,如權(quán)利要求10所述的調(diào)度裝置,至少一個加速處理器及至少一個中央處理器。
【文檔編號】G06F9/445GK104423994SQ201310395216
【公開日】2015年3月18日 申請日期:2013年9月3日 優(yōu)先權(quán)日:2013年9月3日
【發(fā)明者】顏友亮, 鄭榮福 申請人:華為技術(shù)有限公司