異構(gòu)系統(tǒng)程序啟動方法和裝置制造方法
【專利摘要】本發(fā)明實施例提供一種異構(gòu)系統(tǒng)程序啟動方法和裝置,該方法包括:在通過編譯器編譯開放計算語言程序核心部分時,確定核心部分的輸入?yún)?shù)是否被修改;保存各輸入?yún)?shù)是否被修改的結(jié)果;通過運行時系統(tǒng)啟動核心部分時,根據(jù)所述輸入?yún)?shù)是否被修改的結(jié)果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作。本發(fā)明實施例提供的異構(gòu)系統(tǒng)程序啟動方法和裝置,避免運行時系統(tǒng)對核心部分輸入?yún)?shù)的冗余復(fù)制操作,降低OpenCL運行時系統(tǒng)的開銷,提高OpenCL程序執(zhí)行效率。
【專利說明】異構(gòu)系統(tǒng)程序啟動方法和裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機程序處理技術(shù),尤其涉及一種異構(gòu)系統(tǒng)程序啟動方法和裝置。
【背景技術(shù)】
[0002] 異構(gòu)計算平臺是由兩種或多種性質(zhì)不同的計算部件構(gòu)成的計算平臺。較為常見的 異構(gòu)計算平臺是由指令集不同的計算部件構(gòu)成的,例如:中央處理器(Central Processing Unit,簡稱:CPU)和圖形處理器(Graphic Processing Unit,簡稱:GPU)構(gòu)成異構(gòu)計算平臺。
[0003] 近年來,異構(gòu)計算平臺異軍突起,在異構(gòu)平臺上如何編寫程序也成為關(guān)注的焦點。 在這種背景下,開放計算語言(Open Computing Language,簡稱:0penCL)被作為一種異 構(gòu)平臺上的并行編程規(guī)范推出,得到了較為廣泛的關(guān)注和使用。OpenCL程序由兩部分組 成--由C/C++語言編寫的"主機(Host)"部分和由OpenCL C語言編寫的"核心(Kernel)" 部分,其中,核心部分由主機部分啟動。OpenCL程序在異構(gòu)平臺上執(zhí)行時,需要軟件提供編 譯時刻,以及運行時刻的支持。在編譯時刻,由編譯器對所有OpenCL的主機部分和各核心 部分進行編譯。在運行時刻,由運行時系統(tǒng)執(zhí)行編譯好的程序,即執(zhí)行主機部分的程序,且 在執(zhí)行過程中可調(diào)用啟動編譯好的核心部分。
[0004] 然而,現(xiàn)有技術(shù)對OpenCL程序的編譯時刻支持與運行時刻支持是完全分立的。例 如,在某些OpenCL程序中,核心部分被多次啟動,核心部分每次被啟動時,無論輸入?yún)?shù)是 否改變,運行時系統(tǒng)都需將核心部分的輸入?yún)?shù)復(fù)制到運行時系統(tǒng)保留的內(nèi)存區(qū)域中,現(xiàn) 有的處理方式造成了一些冗余的內(nèi)存復(fù)制操作,增加了 OpenCL運行時系統(tǒng)的開銷,影響 OpenCL程序的整體性能。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明提供一種異構(gòu)系統(tǒng)程序啟動方法和裝置,以有效避免OpenCL運行時系統(tǒng) 的冗余內(nèi)存復(fù)制操作,并可有效降低OpenCL運行時系統(tǒng)的開銷,從而提高OpenCL程序執(zhí)行 效率。
[0006] 第一方面,本發(fā)明實施例提供一種異構(gòu)系統(tǒng)程序啟動方法,包括:
[0007] 在通過編譯器編譯開放計算語言程序核心部分時,確定核心部分的輸入?yún)?shù)是否 被修改;
[0008] 保存各輸入?yún)?shù)是否被修改的結(jié)果;
[0009] 通過運行時系統(tǒng)啟動核心部分時,根據(jù)所述輸入?yún)?shù)是否被修改的結(jié)果,對被修 改的輸入?yún)?shù)執(zhí)行復(fù)制操作。
[0010] 結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,在通過編譯器編譯開放 計算語言程序核心部分時,確定核心部分的輸入?yún)?shù)是否被修改,包括:
[0011] 在通過編譯器編譯開放計算語言程序核心部分時,遍歷所述開放計算語言程序, 獲取并記錄各所述核心部分的輸入?yún)?shù);
[0012] 分析所述核心部分的各輸入?yún)?shù)是否有外部定值,若是,則確定被修改,若否,則 確定未被修改。
[0013] 結(jié)合第一方面的第一種可能的實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式 中,保存各輸入?yún)?shù)是否被修改的結(jié)果,包括:
[0014] 將所述核心部分的各輸入?yún)?shù)是否被修改的結(jié)果記錄于集合中,其中,所述集合 中各條記錄包含對應(yīng)輸入?yún)?shù)的索引、名稱、是否被修改狀態(tài)和該輸入?yún)?shù)所在的核心部 分的索引。
[0015] 結(jié)合第一方面的第二種可能的實現(xiàn)方式,在第一方面的第三種可能的實現(xiàn)方式 中,通過運行時系統(tǒng)啟動核心部分時,根據(jù)所述輸入?yún)?shù)是否被修改的結(jié)果,對被修改的輸 入?yún)?shù)執(zhí)行復(fù)制操作,包括:
[0016] 通過運行時系統(tǒng)啟動核心部分,并根據(jù)啟動的核心部分的索引在所述集合中查找 對應(yīng)的核心部分索引;
[0017] 在查找到的核心部分中,逐一獲取各輸入?yún)?shù)的是否被修改狀態(tài);
[0018] 根據(jù)所述是否被修改狀態(tài),將被修改的輸入?yún)?shù)執(zhí)行復(fù)制到運行時系統(tǒng)的內(nèi)存區(qū) 域中。
[0019] 結(jié)合第一方面、第一方面的第一種至第三種可能的實現(xiàn)方式中的任意一種,在第 一方面的第四種可能的實現(xiàn)方式中,通過運行時系統(tǒng)啟動核心部分時,根據(jù)所述輸入?yún)?shù) 是否被修改的結(jié)果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作包括:
[0020] 通過運行時系統(tǒng)啟動核心部分,根據(jù)該核心部分的啟動次數(shù)判斷該核心部分是否 為初次啟動;
[0021] 若是,則直接執(zhí)行輸入?yún)?shù)復(fù)制操作,并將該核心部分的啟動次數(shù)加1 ;
[0022] 否則,根據(jù)所述輸入?yún)?shù)是否被修改的結(jié)果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作。
[0023] 第二方面,本發(fā)明實施例提供一種異構(gòu)系統(tǒng)程序啟動裝置,包括:
[0024] 確定模塊,用于在通過編譯器編譯開放計算語言程序核心部分時,確定核心部分 的輸入?yún)?shù)是否被修改;
[0025] 存儲模塊,用于保存各輸入?yún)?shù)是否被修改的結(jié)果;
[0026] 處理模塊,用于通過運行時系統(tǒng)啟動核心部分時,根據(jù)所述輸入?yún)?shù)是否被修改 的結(jié)果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作。
[0027] 結(jié)合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述確定模塊包括:
[0028] 記錄單元,用于在通過編譯器編譯開放計算語言程序核心部分時,遍歷所述開放 計算語言程序,獲取并記錄各所述核心部分的輸入?yún)?shù);
[0029] 分析單元,用于分析所述核心部分的各輸入?yún)?shù)是否有外部定值,若是,則確定被 修改,若否,則確定未被修改。
[0030] 結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式 中,所述存儲模塊具體用于將所述核心部分的各輸入?yún)?shù)是否被修改的結(jié)果記錄于集合 中,其中,所述集合中各條記錄包含對應(yīng)輸入?yún)?shù)的索引、名稱、是否被修改狀態(tài)和該輸入 參數(shù)所在的核心部分的索引。
[0031] 結(jié)合第二方面的第二種可能的實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式 中,所述處理模塊包括:
[0032] 查找單元,用于通過運行時系統(tǒng)啟動核心部分,并根據(jù)啟動的核心部分的索引在 所述集合中查找對應(yīng)的核心部分索引;
[0033] 獲取單元,用于在查找到的核心部分中,逐一獲取各輸入?yún)?shù)的是否被修改狀 態(tài);
[0034] 第一復(fù)制單元,用于根據(jù)所述是否被修改狀態(tài),將被修改的輸入?yún)?shù)執(zhí)行復(fù)制到 運行時系統(tǒng)的內(nèi)存區(qū)域中。
[0035] 結(jié)合第二方面、第二方面的第一種至第三種可能的實現(xiàn)方式中的任意一種,在第 二方面的第四種可能的實現(xiàn)方式中,所述處理模塊包括:
[0036] 判斷單元,用于通過運行時系統(tǒng)啟動核心部分,根據(jù)該核心部分的啟動次數(shù)判斷 該核心部分是否為初次啟動;
[0037] 第二復(fù)制單元,用于若判斷單元輸出結(jié)果為是,則直接執(zhí)行輸入?yún)?shù)復(fù)制操作,并 將該核心部分的啟動次數(shù)加1 ;若判斷單元輸出結(jié)果為否,則根據(jù)所述輸入?yún)?shù)是否被修 改的結(jié)果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作。
[0038] 本發(fā)明實施例提供一種異構(gòu)系統(tǒng)程序啟動方法和裝置,通過判斷OpenCL程序中 核心部分的輸入?yún)?shù)是否改變,決定是否將輸入?yún)?shù)復(fù)制到運行時系統(tǒng)保留的內(nèi)存區(qū)域 中,從而避免運行時系統(tǒng)對核心部分輸入?yún)?shù)的冗余復(fù)制操作,降低OpenCL運行時系統(tǒng)的 開銷,提高OpenCL程序執(zhí)行效率。
【專利附圖】
【附圖說明】
[0039] 為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā) 明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0040] 圖1為本發(fā)明異構(gòu)系統(tǒng)程序啟動方法實施例一的流程示意圖;
[0041] 圖2為本發(fā)明異構(gòu)系統(tǒng)程序啟動方法實施例二的流程示意圖;
[0042] 圖3為本發(fā)明異構(gòu)系統(tǒng)程序啟動裝置實施例四的結(jié)構(gòu)示意圖;
[0043] 圖4為本發(fā)明異構(gòu)系統(tǒng)程序啟動裝置實施例五的結(jié)構(gòu)示意圖;
[0044] 圖5為本發(fā)明異構(gòu)系統(tǒng)程序啟動裝置實施例六的結(jié)構(gòu)示意圖。
【具體實施方式】
[0045] 為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例 中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是 本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員 在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0046] 實施例一
[0047] 圖1為本發(fā)明異構(gòu)系統(tǒng)程序啟動方法實施例一的流程示意圖。本發(fā)明實施例提供 了一種異構(gòu)系統(tǒng)程序啟動方法,該方法可以由任意的異構(gòu)系統(tǒng)程序啟動裝置來執(zhí)行,該裝 置可以通過軟件和/或硬件實現(xiàn),配置在異構(gòu)系統(tǒng)中。如圖1所示,本實施例的方法包括:
[0048] 步驟101、在通過編譯器編譯開放計算語言程序核心部分時,確定核心部分的輸入 參數(shù)是否被修改。
[0049] 具體地,本發(fā)明實施例的實現(xiàn)具體體現(xiàn)在OpenCL程序的編譯時刻和運行時刻兩 個階段,分別涉及到編譯器和OpenCL運行時系統(tǒng)。在編譯時刻,由編譯器對所有OpenCL的 主機部分和各核心部分進行編譯。利用編譯時刻的數(shù)據(jù)流分析技術(shù),分析各核心部分的輸 入?yún)?shù)在多次啟動過程中是否發(fā)生改變,以確定核心部分的輸入?yún)?shù)是否被修改。
[0050] 步驟102、保存各輸入?yún)?shù)是否被修改的結(jié)果。
[0051] 具體地,在編譯時刻,確定核心部分的輸入?yún)?shù)是否被修改之后,保存各輸入?yún)?shù) 是否被修改的結(jié)果,其中,保存方式可以采用多種形式,例如,實際應(yīng)用中比較常見的二進 制文件形式,或者文本文件(textfile,簡稱:txt)等其它形式。
[0052] 步驟103、通過運行時系統(tǒng)啟動核心部分時,根據(jù)所述輸入?yún)?shù)是否被修改的結(jié) 果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作。
[0053] 具體地,在運行時刻,由運行時系統(tǒng)執(zhí)行編譯好的程序,即執(zhí)行主機部分的程序, 且在執(zhí)行過程中可調(diào)用編譯好的核心部分。運行時系統(tǒng)啟動核心部分時,獲取步驟102中 保存的各輸入?yún)?shù)是否被修改的結(jié)果,該結(jié)果表明核心部分啟動時各輸入?yún)?shù)是否被修 改,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作,對未被修改的輸入?yún)?shù)不執(zhí)行復(fù)制操作。
[0054] 在本發(fā)明實施例中,通過編譯器首先判斷各核心部分的輸入?yún)?shù)是否被修改,然 后由運行時系統(tǒng)根據(jù)輸入?yún)?shù)是否被修改的結(jié)果決定是否進行復(fù)制操作,從而避免了現(xiàn)有 方案中在每次核心部分被啟動時先將核心部分的輸入?yún)?shù)全部復(fù)制到運行時系統(tǒng)保留的 內(nèi)存區(qū)域,實現(xiàn)降低OpenCL運行時系統(tǒng)的開銷,提高OpenCL程序的執(zhí)行效率。
[0055] 實施例二
[0056] 圖2為本發(fā)明異構(gòu)系統(tǒng)程序啟動方法實施例二的流程示意圖。如圖2所示,本發(fā) 明實施例在上述實施例的基礎(chǔ)上進行進一步的細(xì)化,所述方法可以包括:
[0057] 步驟201、在通過編譯器編譯開放計算語言程序核心部分時,遍歷所述開放計算語 言程序,獲取并記錄各所述核心部分的輸入?yún)?shù)。
[0058] 具體地,編譯器遍歷OpenCL程序,獲取并記錄所述OpenCL程序所有核心部分的全 部輸入?yún)?shù)。例如,可以將各所述輸入?yún)?shù)以集合的形式進行記錄,假設(shè)將所述輸入?yún)?shù)記 錄入集合屯中,記錄格式為0^_1(1,口_1(1,口_仙1116,8七3七6),其中,1^_1(1為各所述輸入?yún)?shù)所 在的核心部分的索引,p_id為各所述輸入?yún)?shù)的索引,p_name為各所述輸入?yún)?shù)的名稱, state為各所述輸入?yún)?shù)的初始狀態(tài),可以設(shè)定該初始狀態(tài)為FALSE。
[0059] 步驟202、分析所述核心部分的各輸入?yún)?shù)是否有外部定值,若是,則確定被修改, 若否,則確定未被修改。
[0060] 具體地,利用編譯器現(xiàn)有的數(shù)據(jù)流分析技術(shù),OpenCL程序范圍內(nèi)分析集合Ψ中記 錄的各輸入?yún)?shù)是否有外部定值,若是,則確定被修改,將該有外部定值的輸入?yún)?shù)對應(yīng)的 初始狀態(tài),即state修改為TRUE ;若否,則確定未被修改,不改變該輸入?yún)?shù)對應(yīng)的初始狀 態(tài),即state仍為FALSE。其中,所述外部定值是指輸入?yún)?shù)會在OpenCL程序中除核心部分 以外的部分被修改。
[0061] 步驟203、將所述核心部分的各輸入?yún)?shù)是否被修改的結(jié)果記錄于集合中。
[0062] 其中,所述集合中各條記錄包含對應(yīng)輸入?yún)?shù)的索引、名稱、是否被修改狀態(tài)和該 輸入?yún)?shù)所在的核心部分的索引。對應(yīng)所述集合Ψ,state的值即可反應(yīng)各所述輸入?yún)?shù) 是否被修改狀態(tài),若某一個輸入?yún)?shù)對應(yīng)的state的值為FALSE,說明該輸入?yún)?shù)不會被修 改,只需在該輸入?yún)?shù)所在的核心部分初次啟動時復(fù)制,無需重復(fù)復(fù)制;若該輸入?yún)?shù)對應(yīng) 的state的值為TRUE,說明該輸入?yún)?shù)會被修改,則在該輸入?yún)?shù)所在的核心部分多次啟 動時,都要進行復(fù)制,從而避免未修改輸入?yún)?shù)的冗余復(fù)制。
[0063] 另外,可以將該集合保存在二進制文件或txt,也可以以其它形式保存該集合,在 此不進行限制。
[0064] 步驟204、通過運行時系統(tǒng)啟動核心部分,并根據(jù)啟動的核心部分的索引在所述集 合中查找對應(yīng)的核心部分索引。
[0065] 步驟205、在查找到的核心部分中,逐一獲取各輸入?yún)?shù)的是否被修改狀態(tài)。
[0066] 具體地,逐一獲取所查找到的核心部分的各輸入?yún)?shù),查詢所述各輸入?yún)?shù)是否 被修改狀態(tài)。
[0067] 步驟206、根據(jù)所述是否被修改狀態(tài),將被修改的輸入?yún)?shù)執(zhí)行復(fù)制到運行時系統(tǒng) 的內(nèi)存區(qū)域中。
[0068] 具體地,若輸入?yún)?shù)被修改狀態(tài),則執(zhí)行復(fù)制操作,將被修改的輸入?yún)?shù)復(fù)制到運 行時系統(tǒng)的內(nèi)存區(qū)域中;若輸入?yún)?shù)沒有被修改狀態(tài),則不進行復(fù)制操作。
[0069] 在本發(fā)明實施例中,將核心部分的輸入?yún)?shù)是否被修改的結(jié)果以集合的形式進行 記錄,該集合中包含所述輸入?yún)?shù)的信息,便于根據(jù)所述信息進行查找等操作,加快復(fù)制操 作,提高OpenCL程序的執(zhí)行效率。
[0070] 在上述實施例的基礎(chǔ)上,通過運行時系統(tǒng)啟動核心部分時,根據(jù)所述輸入?yún)?shù)是 否被修改的結(jié)果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作還可以進一步細(xì)化為:
[0071] 1、通過運行時系統(tǒng)啟動核心部分,根據(jù)該核心部分的啟動次數(shù)判斷該核心部分是 否為初次啟動。
[0072] 具體地,在OpenCL運行時系統(tǒng)中加入核心部分啟動計數(shù)數(shù)組k_count,該數(shù)組的 長度為該OpenCL程序中所有核心部分的總數(shù),各核心部分在該數(shù)組中對應(yīng)的位置根據(jù)所 述各核心部分初次啟動的時間順序進行設(shè)定,該數(shù)組中各元素值的初始值均為0,即對所述 OpenCL程序剛開始運行時,所有核心部分被啟動的次數(shù)均為0。
[0073] 當(dāng)運行時系統(tǒng)啟動核心部分時,首先判斷該核心部分的啟動次數(shù),在k_count中 查找該核心部分所在的位置對應(yīng)的元素值是否為〇,若為〇,說明是初次啟動;否則,該核心 部分不是初次啟動。
[0074] 2、若是,則直接執(zhí)行輸入?yún)?shù)復(fù)制操作,并將該核心部分的啟動次數(shù)加1。
[0075] 若核心部分是初次被啟動,則將該核心部分的所有輸入?yún)?shù)都復(fù)制到運行時系統(tǒng) 的內(nèi)存區(qū)域,并將該核心部分的啟動次數(shù)加1,例如,將k_count中該核心部分的索引減1的 位置處的元素值加1。
[0076] 3、否則,根據(jù)所述輸入?yún)?shù)是否被修改的結(jié)果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操 作。
[0077] 獲取保存的各輸入?yún)?shù)是否被修改的結(jié)果,例如獲取集合Ψ,對于集合Ψ中的每 條記錄:若k_id與當(dāng)前啟動的核心部分的索引一致,且state為TRUE,則將該核心部分的 第?」(1個輸入?yún)?shù)復(fù)制到執(zhí)行時系統(tǒng)的內(nèi)存區(qū)域中,并讀取集合中的下一條記錄;gk_id 與當(dāng)前啟動的核心部分的索引一致,且state為FALSE,或者,k_id與當(dāng)前啟動的核心部分 的索引不一致,則直接讀取集合中的下一條記錄。
[0078] 需要說明的是,判斷OpenCL程序中核心部分是否為初次啟動的方式有多種途徑, 本發(fā)明實施例中只以數(shù)組k_c 〇unt為例,不對其它方式詳盡說明。
[0079] 實施例三
[0080] 本發(fā)明實施例以具體的OpenCL程序為例進行說明,該OpenCL程序中核心部分為 kmeansOCL函數(shù)。OpenCL程序片段如下所示:
【權(quán)利要求】
1. 一種異構(gòu)系統(tǒng)程序啟動方法,其特征在于,包括: 在通過編譯器編譯開放計算語言程序核心部分時,確定核心部分的輸入?yún)?shù)是否被修 改; 保存各輸入?yún)?shù)是否被修改的結(jié)果; 通過運行時系統(tǒng)啟動核心部分時,根據(jù)所述輸入?yún)?shù)是否被修改的結(jié)果,對被修改的 輸入?yún)?shù)執(zhí)行復(fù)制操作。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在通過編譯器編譯開放計算語言程序核 心部分時,確定核心部分的輸入?yún)?shù)是否被修改,包括 : 在通過編譯器編譯開放計算語言程序核心部分時,遍歷所述開放計算語言程序,獲取 并記錄各所述核心部分的輸入?yún)?shù); 分析所述核心部分的各輸入?yún)?shù)是否有外部定值,若是,則確定被修改,若否,則確定 未被修改。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,保存各輸入?yún)?shù)是否被修改的結(jié)果,包 括: 將所述核心部分的各輸入?yún)?shù)是否被修改的結(jié)果記錄于集合中,其中,所述集合中各 條記錄包含對應(yīng)輸入?yún)?shù)的索引、名稱、是否被修改狀態(tài)和該輸入?yún)?shù)所在的核心部分的 索引。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,通過運行時系統(tǒng)啟動核心部分時,根據(jù)所 述輸入?yún)?shù)是否被修改的結(jié)果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作,包括: 通過運行時系統(tǒng)啟動核心部分,并根據(jù)啟動的核心部分的索引在所述集合中查找對應(yīng) 的核心部分索引; 在查找到的核心部分中,逐一獲取各輸入?yún)?shù)的是否被修改狀態(tài); 根據(jù)所述是否被修改狀態(tài),將被修改的輸入?yún)?shù)執(zhí)行復(fù)制到運行時系統(tǒng)的內(nèi)存區(qū)域 中。
5. 根據(jù)權(quán)利要求1-4任一所述的方法,其特征在于,通過運行時系統(tǒng)啟動核心部分時, 根據(jù)所述輸入?yún)?shù)是否被修改的結(jié)果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作包括: 通過運行時系統(tǒng)啟動核心部分,根據(jù)該核心部分的啟動次數(shù)判斷該核心部分是否為初 次啟動; 若是,則直接執(zhí)行輸入?yún)?shù)復(fù)制操作,并將該核心部分的啟動次數(shù)加1 ; 否則,根據(jù)所述輸入?yún)?shù)是否被修改的結(jié)果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作。
6. -種異構(gòu)系統(tǒng)程序啟動裝置,其特征在于,包括: 確定模塊,用于在通過編譯器編譯開放計算語言程序核心部分時,確定核心部分的輸 入?yún)?shù)是否被修改; 存儲模塊,用于保存各輸入?yún)?shù)是否被修改的結(jié)果; 處理模塊,用于通過運行時系統(tǒng)啟動核心部分時,根據(jù)所述輸入?yún)?shù)是否被修改的結(jié) 果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作。
7. 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述確定模塊包括: 記錄單元,用于在通過編譯器編譯開放計算語言程序核心部分時,遍歷所述開放計算 語言程序,獲取并記錄各所述核心部分的輸入?yún)?shù); 分析單元,用于分析所述核心部分的各輸入?yún)?shù)是否有外部定值,若是,則確定被修 改,若否,則確定未被修改。
8. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述存儲模塊具體用于將所述核心部分 的各輸入?yún)?shù)是否被修改的結(jié)果記錄于集合中,其中,所述集合中各條記錄包含對應(yīng)輸入 參數(shù)的索引、名稱、是否被修改狀態(tài)和該輸入?yún)?shù)所在的核心部分的索引。
9. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述處理模塊包括: 查找單元,用于通過運行時系統(tǒng)啟動核心部分,并根據(jù)啟動的核心部分的索引在所述 集合中查找對應(yīng)的核心部分索引; 獲取單元,用于在查找到的核心部分中,逐一獲取各輸入?yún)?shù)的是否被修改狀態(tài); 第一復(fù)制單元,用于根據(jù)所述是否被修改狀態(tài),將被修改的輸入?yún)?shù)執(zhí)行復(fù)制到運行 時系統(tǒng)的內(nèi)存區(qū)域中。
10. 根據(jù)權(quán)利要求6-9任一所述的裝置,其特征在于,所述處理模塊包括: 判斷單元,用于通過運行時系統(tǒng)啟動核心部分,根據(jù)該核心部分的啟動次數(shù)判斷該核 心部分是否為初次啟動; 第二復(fù)制單元,用于若判斷單元輸出結(jié)果為是,則直接執(zhí)行輸入?yún)?shù)復(fù)制操作,并將該 核心部分的啟動次數(shù)加1 ;若判斷單元輸出結(jié)果為否,則根據(jù)所述輸入?yún)?shù)是否被修改的 結(jié)果,對被修改的輸入?yún)?shù)執(zhí)行復(fù)制操作。
【文檔編號】G06F9/445GK104239080SQ201310239648
【公開日】2014年12月24日 申請日期:2013年6月17日 優(yōu)先權(quán)日:2013年6月17日
【發(fā)明者】劉穎 申請人:華為技術(shù)有限公司, 中國科學(xué)院計算技術(shù)研究所