專利名稱:程序代碼的并行性的分析方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,具體地,涉及用于多核體系結(jié)構(gòu)的基于模 擬的程序代碼的并行性的分析方法和系統(tǒng)以及用于跟蹤程序代碼的執(zhí)行過程的模擬器。
技術(shù)背景隨著對于計(jì)算機(jī)的應(yīng)用需求的不斷提高,單個處理器的能力(主頻、 線寬等)也隨之不斷地增長。但是,可以預(yù)見,這樣的單個處理器的能力 提升終究會達(dá)到物理極限。從而,在單個處理器的能力增長到一定程度時, 為了繼續(xù)獲得更高的微處理器性能,自然不得不向更寬的方向iU艮。推動 微處理器性能不斷提高的因素主要是半導(dǎo)體工藝技術(shù)的飛速進(jìn)步和處理器 體系結(jié)構(gòu)的不斷U。目前的半導(dǎo)體工藝技術(shù)已可使微處理器集成的晶體管數(shù)目達(dá)到數(shù)億個,能夠確保微處理器的結(jié)構(gòu)向更加復(fù)雜的方向;OL從 而,在這樣的技術(shù)發(fā)展和應(yīng)用需求之下,多核(多處理器)體系結(jié)構(gòu)便成 為了必然產(chǎn)物。多核體系結(jié)構(gòu)通過在一個芯片上集成多個孩t處理器核心來提高禾呈序執(zhí) 行的并行性。每個微處理器核心實(shí)質(zhì)上都是一個相對簡單的單線程微處理 器或者比較簡單的多線程微處理器。在多核體系結(jié)構(gòu)中,多個微處理器核 心可以并行地執(zhí)行任務(wù),因而具有較高的線程級并行性。并且,多核體系 結(jié)構(gòu)通過采用相對簡單的微處理器作為處理器核心,能夠得到高主頻、設(shè) 計(jì)和驗(yàn)證周期短、控制邏輯簡單、擴(kuò)展性好、易于實(shí)現(xiàn)、功耗低、通信延 遲低等優(yōu)點(diǎn)。從而,在今后的發(fā)M勢上,無論是移動與嵌入式應(yīng)用、桌 面應(yīng)用還是服務(wù)器應(yīng)用,都將采用多核體系結(jié)構(gòu)。7但是,在多核體系結(jié)構(gòu)帶來了如此多的好處的同時,它也對系統(tǒng)和程 序設(shè)計(jì)等方面提出了挑戰(zhàn),也就是說,由于多核體系結(jié)構(gòu)在單個處理器內(nèi) 封裝了多個處理器"執(zhí)行核",所以只要軟件設(shè)計(jì)合理,就能夠支持軟件 的多個線程的完全并行執(zhí)行。從而,這樣的多核體系結(jié)構(gòu)的設(shè)計(jì)概念迫使 軟件開發(fā)朝并行化方向發(fā)展,以便充分發(fā)揮多核體系結(jié)構(gòu)的優(yōu)勢。但是,在x86架構(gòu)下,應(yīng)用程序的開發(fā)者還停留在單線程的開發(fā)模式 下,隨著多核體系結(jié)構(gòu)逐漸應(yīng)用在PC、 Server、嵌入式系統(tǒng)和游戲控制臺 等中,x86架構(gòu)下的傳統(tǒng)的順序程序設(shè)計(jì)概念終將被并發(fā)和同步所打破。 尤其對于異構(gòu)存儲器限制系統(tǒng)那樣的CELL多核體系結(jié)構(gòu)(每個處理器核 具有有限的256K字節(jié)本M儲器)的程序設(shè)計(jì)者來說,更要適應(yīng)從順序 到并行的程序設(shè)計(jì)概念的轉(zhuǎn)變。也就是說,程序設(shè)計(jì)者必須學(xué)會如何為 CELL這樣的多核體系結(jié)構(gòu)設(shè)計(jì)應(yīng)用程序,即學(xué)會如何進(jìn)行并行程序設(shè)計(jì)。 但是,在并行程序設(shè)計(jì)中,程序代碼中的各函數(shù)的并行性識別及并行任務(wù) 的劃分通常被認(rèn)為是一種極其依賴于程序設(shè)計(jì)者的領(lǐng)域知識、經(jīng)驗(yàn)和對于 體系結(jié)構(gòu)的了解的技術(shù),沒有足夠的工具支持,并行性分析及任務(wù)劃分會 極大地降低整個并行軟件開發(fā)的效率。因此,需要設(shè)計(jì)出一種高效、準(zhǔn)確的程序代碼的并行性的分析4支術(shù), 來幫助并行程序設(shè)計(jì)者更有效地針對多核體系結(jié)構(gòu)進(jìn)行程序代碼的并行性 的分析以及任務(wù)的劃分,從而提高并行軟件開發(fā)的效率。發(fā)明內(nèi)容本發(fā)明正是鑒于上述現(xiàn)有技術(shù)中的問題而提出的,其目的在于提供一 種基于模擬的程序代碼的并行性的分析方法和系統(tǒng)以及用于跟蹤程序代碼 的執(zhí)行過程的模擬器,以便通過模擬程序代碼的順序執(zhí)行來收集其執(zhí)行信 息,并根據(jù)所收集的執(zhí)行信息對該程序代碼進(jìn)行并行性的分析,來幫助程 序設(shè)計(jì)者更有效地針對多核體系結(jié)構(gòu)進(jìn)行該程序代碼的并行任務(wù)的劃分, 從而提高并行軟件開發(fā)的效率。據(jù)本發(fā)明的一個方面,提供一種程序代碼的并行性的分析方法,包括模擬程序代碼的順序執(zhí)行,以跟蹤該程序代碼的執(zhí)行過程;以及根據(jù) 對上述程序代碼的執(zhí)行過程的跟蹤結(jié)果,對上述程序代碼進(jìn)行并行性的分 析。根據(jù)本發(fā)明的另一個方面,提供一種用于跟蹤程序代碼的執(zhí)行過程的 模擬器,包括模擬的執(zhí)行環(huán)境,用于模擬程序代碼能夠在其中順序執(zhí)行 的目標(biāo)系統(tǒng)的執(zhí)行環(huán)境;以及執(zhí)行過程跟蹤單元,用于跟蹤上述程序代碼 在上述模擬執(zhí)行環(huán)境中的順序執(zhí)行過程,以獲得該程序代碼的執(zhí)行信息。根據(jù)本發(fā)明的另一個方面,提供一種程序代碼的并行性的分析系統(tǒng), 包括上述的用于跟蹤程序代碼的執(zhí)行過程的模擬器;以及并行性分析單 元,用于根據(jù)上i2^漠?dāng)M器所獲得對程序代碼的執(zhí)行過程的跟蹤結(jié)果,對該 程序代碼進(jìn)行并行性的分析。
相信通過以下結(jié)合附圖對本發(fā)明具體實(shí)施方式
的說明,能夠使人們更 好地了解本發(fā)明上述的特點(diǎn)、優(yōu)點(diǎn)和目的。圖1是根據(jù)本發(fā)明實(shí)施例的程序代碼的并行性的分析方法的流程圖; 圖2是圖l的方法中的執(zhí)行過程跟蹤步驟的詳細(xì)流程圖; 圖3是根據(jù)本發(fā)明一個實(shí)施例的執(zhí)行信息的日志的示例; 圖4是圖l的方法中的并行性分析步驟的詳細(xì)流程圖;圖5(a) ~ (c)是根據(jù)本發(fā)明一個實(shí)施例的并行性分析過程的實(shí)例;圖6是根據(jù)本發(fā)明實(shí)施例的程序代碼的并行性的分析系統(tǒng)的方框圖;圖7是根據(jù)本發(fā)明實(shí)施例的用于跟蹤程序代碼的執(zhí)行過程的模擬器的方框圖;圖8-io示出了圖7的模擬器的工作過程;以及圖11-13是程序代碼的示例。
具體實(shí)施方式
在多核體系結(jié)構(gòu)中,對于計(jì)算強(qiáng)度很大的應(yīng)用程序來說,會存在有大量的數(shù)據(jù)處理以及復(fù)雜的數(shù)據(jù)相關(guān)性,如果不進(jìn)行數(shù)據(jù)分割的話,只能由 一個低頻的單核來串行處理,則執(zhí)行時間會很長。從而,在多核體系結(jié)構(gòu) 中,需要正確地對這樣的應(yīng)用程序進(jìn)行并行化。應(yīng)用程序的并行化實(shí)際上就是將冗長的串行算法的時間復(fù)雜度通過增 加空間復(fù)雜度的方式進(jìn)行壓縮,把以前一個周期一個操作去執(zhí)行的算法結(jié) 構(gòu)改造成一個周期可以進(jìn)行多個操作的并行算法,這就是并行化^j故的主 要工作。也就是說,并行化就是要找出一個應(yīng)用程序內(nèi)能夠并行執(zhí)行的任 務(wù),并將其分配給多個處理器核來并行執(zhí)行,從而實(shí)現(xiàn)在一個時刻或者時 間段內(nèi)有一個以上的事件發(fā)生。但這種并行化卻并非是一個簡單的過程。 因?yàn)椋词苟嗪梭w系結(jié)構(gòu)中的多個處理器核能夠同時執(zhí)行一個程序中的多 個任務(wù),但這些任務(wù)之間可能會存在運(yùn)行資源沖突的問題。多個處理器核同時運(yùn)行期間很多資源其實(shí)是共享的,比如高速緩存、存儲器、BUS等。 如果并行化不正確,例如不能夠并行執(zhí)行的任務(wù)被進(jìn)行了并行化,則其結(jié)果可能會使該應(yīng)用程序所得到的執(zhí)行結(jié)果不正確;又例如,本來能夠并行 執(zhí)行的任務(wù)未被并行化,則其結(jié)果^tA處理器核的利用效率的降低。針對 于此,本發(fā)明的目的使義要提供一種有效的程序代碼的并行性的分析技術(shù), 以便將程序設(shè)計(jì)者從繁雜的并行性識別及任務(wù)劃分中解脫出來。 下面就結(jié)合附圖對本發(fā)明的各個優(yōu)選實(shí)施例進(jìn)行詳細(xì)的說明。 圖l是根據(jù)本發(fā)明實(shí)施例的程序代碼的并行性的分析方法的流程圖。如圖1所示,首先,在步驟105,模擬程序代碼的順序執(zhí)行,以跟蹤該程序代碼的執(zhí)行過程。具體地,在該步驟中,首先,為要進(jìn)行并行性分析的 已設(shè)計(jì)完成的程序代碼模擬其目標(biāo)系統(tǒng)的執(zhí)行環(huán)境,然后在該模擬的執(zhí)行 環(huán)境中順序執(zhí)行該程序代碼,并且在順序執(zhí)行的同時跟蹤其執(zhí)行過程。在 該步驟中,模擬程序代碼在目標(biāo)執(zhí)行環(huán)境中的順序執(zhí)行的目的是為了收集 其執(zhí)行信息,以用于對該程序代碼的并行性的分析。在本發(fā)明的一個實(shí)施例中,上述執(zhí)行信息包括但不限于函數(shù)調(diào)用信息、存儲器分配信息以及 存儲器訪問信息a對于該步驟,將在后面結(jié)合附圖2和3進(jìn)行詳細(xì)說明。 在步驟110,對上述程序代碼進(jìn)行并行性的分析。具體地,在該步驟中,根據(jù)對于上述程序代碼的順序執(zhí)行過程的跟蹤結(jié)果,即在步驟105中 所收集的執(zhí)行信息,分析該程序代碼中的各函數(shù)調(diào)用之間的依賴關(guān)系。在 該步驟中,根據(jù)執(zhí)行信息,將上述程序代碼中沒有存儲器訪問沖突的各函 數(shù)調(diào)用確定為沒有依賴關(guān)系。對于該步驟,將在后面結(jié)合附圖4和5進(jìn)行 詳細(xì)i兌明。本發(fā)明實(shí)施例可選擇地包括用于向用戶呈現(xiàn)對上述程序代碼的并行性 的分析結(jié)果的步驟115。具體地,在該步驟中,向用戶呈現(xiàn)的是在步驟110 中獲得的上述程序代碼中各函數(shù)調(diào)用之間的依賴關(guān)系,以幫助該程序代碼 的設(shè)計(jì)者找出該程序代碼中沒有依賴關(guān)系、能夠由多個處理器核并行執(zhí)行 的任務(wù)。在一個實(shí)施例中,上述程序代碼中的各函數(shù)調(diào)用之間的依賴關(guān)系 是以樹狀圖的形式來表現(xiàn)的。關(guān)于該樹狀圖,在后面結(jié)合附圖4和5的說 明中有詳細(xì)記栽,此外,在其他實(shí)施例中,上述程序代碼中的各函數(shù)調(diào)用之間的依賴關(guān)系也可以以列表、文本等任何形式來呈現(xiàn)。下面,結(jié)合圖2詳細(xì)描述上面圖1的方法中的執(zhí)行過程跟蹤步驟105。 圖2是該執(zhí)行過程跟蹤步驟105的詳細(xì)流程圖。如圖2所示,首先,在步驟205,為要進(jìn)行并行性分析的程序代碼模 擬其目標(biāo)系統(tǒng)的執(zhí)行環(huán)境。具體地,該步驟是利用模擬器來實(shí)現(xiàn)的。也就 是說,在該步驟中,利用模擬器在主系統(tǒng)(當(dāng)前系統(tǒng))上模擬將要實(shí)際使 用該程序代碼的目標(biāo)系統(tǒng),以1更為該程序代碼^:供目標(biāo)系統(tǒng)的執(zhí)行環(huán)境。 在本發(fā)明的一個實(shí)施例中,上述目標(biāo)系統(tǒng)是CELL多核系統(tǒng),也就是說, 上述要進(jìn)行并行性分析的程序代碼是為CELL系統(tǒng)設(shè)計(jì)的。此外,在本發(fā) 明的一個實(shí)施例中,上述的所模擬的執(zhí)行環(huán)境包括模擬存儲器、存儲器管 理單元、流水線以及模擬寄存器等對于程序代碼的執(zhí)行來說最基本的系統(tǒng) 組件。但是,本發(fā)明并不限于此,只要能夠確保程序代碼的順序執(zhí)行并且 所模擬的是目標(biāo)系統(tǒng)的環(huán)境,該執(zhí)行環(huán)境可以包括任何其他的系統(tǒng)組件。 此外,對于上述模擬器,將在后面結(jié)合圖7-10進(jìn)行詳細(xì)說明。接著,在步驟210,將上述程序代碼加載到所模擬的目標(biāo)系統(tǒng)的執(zhí)行 環(huán)境中。具體地,在該步驟中,將上述程序代碼加栽到該模擬執(zhí)行環(huán)境中的模擬存儲器中,并且分析該程序代碼中的符號表,以獲得該程序代碼中 的各函數(shù)的地址。由于該符號表中記錄著該程序代碼中的各函數(shù)的名稱、 大小和存儲地址,所以可以根據(jù)各函數(shù)的名稱來獲得其相應(yīng)的地址。在步驟215,獲取上述程序代碼中當(dāng)前將要執(zhí)行的指令并執(zhí)行。具體 地,由于所模擬的執(zhí)行環(huán)境中的模擬指令寄存器的值指示著當(dāng)前將要執(zhí)行 的指令的虛擬地址,所以在該步驟中,首先獲取模擬指令寄存器中的虛擬 地址,并將其傳送給存儲器管理單元,以便將該虛擬地址轉(zhuǎn)換為物理地址; 然后,才艮據(jù)所得到的物理地址,從模擬存儲器的相應(yīng)位置處獲取將要執(zhí)行 的指令,將其解碼為二進(jìn)制格式,并執(zhí)行。同時,模擬指令寄存器自動指 向下一將要執(zhí)行的指令。接著,下面的步驟220-255是 程序代碼的執(zhí)行過程、記錄執(zhí)行信 息的過程。在步驟220,判斷上述當(dāng)前指令是否為諸如call (x86)或bl (PPC) 的函數(shù)調(diào)用/返回指令。如果是,則該過程前進(jìn)到步驟225;否則,轉(zhuǎn)到步 驟250。在步驟225,對于在步驟220中被確定為函數(shù)調(diào)用/返回指令的當(dāng)前指 令,進(jìn)一步判斷其所調(diào)用的函ltA否為系統(tǒng)API( Application Programming Interface,應(yīng)用程序編程接口 ),諸如C庫函數(shù)。如果是,則該過程前進(jìn) 到步驟230;否則,轉(zhuǎn)到步驟245。在步驟230,對于在步驟220中被確定為函數(shù)調(diào)用/返回指令的當(dāng)前指 令,進(jìn)一步判斷其所調(diào)用的函數(shù)是否為存儲器分配指令或釋放指令,即是 否為指令malloc或free。如果是,則該過程前進(jìn)到步驟235;否則,轉(zhuǎn)到 步驟240。接著,由于在步驟230中確定當(dāng)前指令所調(diào)用的函fci系統(tǒng)API中的 maHoc或free,所以在步驟235,將該當(dāng)前指令執(zhí)行時的有關(guān)存儲器分配/ 釋放信息記錄到存儲器分配日志中。具體地,在該步驟中,將執(zhí)行該當(dāng)前 指令時的系統(tǒng)周期(時間信息)、所分配的存儲器大小、存儲器地址記錄 到該存儲器分配日志中。然后,該過程前進(jìn)到步驟240,執(zhí)行該指令所調(diào)用的系統(tǒng)API,接著,由于在步驟225中確定當(dāng)前指令是函數(shù)調(diào)用/返回指令且其所調(diào) 用的函數(shù)不是系統(tǒng)API,所以在步驟245,將該當(dāng)前指令執(zhí)行時的有關(guān)函 數(shù)調(diào)用信息記錄到函數(shù)調(diào)用日志中。具體地,在該步驟中,將執(zhí)行該當(dāng)前 指令時的系統(tǒng)周期、該指令所調(diào)用的函數(shù)的標(biāo)識記錄到該函數(shù)調(diào)用日志中。 為了便于用戶識別,優(yōu)選地,該函數(shù)的標(biāo)識采用該函數(shù)的名稱。但是,由 于在指令的執(zhí)行過程中其所調(diào)用的函數(shù)是以地址來指示的,所以在記錄曰 志之前,首先要根據(jù)上面提到的該程序代碼中的符號表,將所調(diào)用的函數(shù) 的地址轉(zhuǎn)換為相應(yīng)的函數(shù)名稱,然后再將該函數(shù)名稱記錄到日志中。接著,在步驟250,對于在步驟220中被確定為非函數(shù)調(diào)用/返回指令 的當(dāng)前指令,進(jìn)一步判斷其是否為加載/存儲指令,如果是,則該過程前進(jìn) 到步驟255;否則,轉(zhuǎn)到步驟260,判斷是否存在下一指令。接著,由于在步驟250中確定當(dāng)前指令是加載/存儲指令,所以在步驟 255,將該當(dāng)前指令執(zhí)行時的有關(guān)存儲器訪問信息記錄到存儲器訪問曰志 中。具體地,在該步驟中,將執(zhí)行該當(dāng)前指令時的系統(tǒng)周期、該指令所訪 問的數(shù)據(jù)地址、數(shù)據(jù)大小以及讀/寫類型記錄到該存儲器訪問日志中'然后, 該過程前進(jìn)到步驟260,判斷是否存在下一指令。在步驟260,若存在下一指令,則返回到步驟215,繼續(xù)獲取并執(zhí)行下 一指令。若不存在下一指令,則前進(jìn)到步驟265。在步驟265,對上述步驟215-260所生成的日志進(jìn)行預(yù)處理。具體地, 在該步驟中,分析上述程序代碼中的各函數(shù)的存儲器訪問操作或存儲器分 配操作的本地性或非本地性,并相應(yīng)地設(shè)置上述日志中與該存儲器訪問操 作或存儲器分配操作對應(yīng)的記錄中的存儲器類型項(xiàng)。舉例來說,變量i是 函數(shù)A中的局部變量,則對于函數(shù)A中針對變量i的存儲器訪問操作,在 日志中將與該存儲器訪問操作對應(yīng)的記錄中的存儲器類型項(xiàng)設(shè)置為本地, 以表明該存儲器訪問操作不依賴于其他函數(shù)中的存儲器操作,可以本地進(jìn)行。下面,對于圖11-13中所示出的情況進(jìn)行說明。在圖11中,從表面來看,函數(shù)a ()和b ()在棧(i和j)和堆(p 和q)上可能會存在存儲器操作的重疊部分,但實(shí)際上,根據(jù)這兩個函數(shù) 的主要代碼部分可以分析出,其并沒有沖突的存儲器操作部分,是可以分 配給不同的處理器核并在各處理器核的本地存儲器的基礎(chǔ)上執(zhí)行的。所以, 在這樣的情況下,將日志中與這兩個函數(shù)中的棧(i、 j)和堆(p、 q)操 作相應(yīng)的記錄中的存儲器類型設(shè)置為本地,以表明該堆、棧操作與其他函 數(shù)中針對相同變量的堆、棧操作并不存在依賴關(guān)系,沒有沖突,可以本地 進(jìn)行。再者,在圖12和13中,分別地,可以看出,函數(shù)a ()和b ()均使 用相同的鎖i來保護(hù)其關(guān)鍵部分,但從這兩個函數(shù)的主要代碼部分可以看 出,其并沒有對相同的存儲器變量進(jìn)行操作,從而不存在沖突的存儲器操 作。所以,在這樣的情況下,將日志中與這兩個函數(shù)的鎖操作相應(yīng)的記錄 中的存儲器類型設(shè)置為本地,以表明該鎖操作并不與其他函數(shù)中針對相同 變量的鎖操作相沖突,可以本地進(jìn)行,下面,舉一個具體例子來說明利用圖2的過程所得到的跟蹤結(jié)果。圖 3 (a)示出了兩段簡單的程序代碼,其中的main ()是主函數(shù),Add () 是被主函數(shù)所調(diào)用的子函數(shù)。圖3(b)示出了記錄有圖3(a)中的這兩段 程序代碼的執(zhí)行信息的日志??梢钥闯?,該日志按時戳(執(zhí)行周期)的順 序依次記錄了這兩段程序代碼在執(zhí)行過程中的所有存儲器訪問信息、存儲 器分配信息、函數(shù)調(diào)用信息等。并且,該日志中的各個字段的具體含義已 在圖3 (b)中示出,以上,就是對圖2的執(zhí)行過程跟蹤步驟的詳細(xì)描述。需要說明的是, 在圖2所示的過程中,雖然將步驟220-250的記錄執(zhí)行信息的過程安排在 步驟215的指令執(zhí)行之后,但這只是為了便于說明而以這樣的順序來進(jìn)行 描述的,其并非是限定性的。在具體實(shí)現(xiàn)中,也可以在步驟215的指令執(zhí) 行的同時執(zhí)行步驟220-250。此外,還需要說明的是,在上面圖2所示的過程中,雖然是根據(jù)指令 的類型將程序代碼的執(zhí)行信息分類記錄到不同的日志中的,但是,在實(shí)際實(shí)現(xiàn)中,也可以不分別設(shè)置函數(shù)調(diào)用日志、存儲器分配日志以及存儲器訪 問日志等這多種日志,而是僅利用一個日志來記錄該程序代碼的所有執(zhí)行 信息,并在進(jìn)行并行性的分析時在該日志的基礎(chǔ)上得到上述幾類日志。并 且,在具體實(shí)現(xiàn)中,無論是利用一個日志還是利用多個日志來記錄執(zhí)行信 息,所記錄的信息種類并不僅限于上述的函數(shù)名稱、存儲器地址、存儲器 類型等,而是,除了上述的信息類型之外,還可以記錄其他更加詳細(xì)的、 與程序代碼的執(zhí)行有關(guān)的信息。下面,結(jié)合圖4詳細(xì)描述上面圖1的方法中的并行性分析步驟110。 圖4是該并行性分析步驟110的詳細(xì)流程圖。如圖4所示,首先,在步驟405,為當(dāng)前進(jìn)行并行性分析的程序代碼 生成調(diào)用樹。具體地,在該步驟中,以該程序代碼中的主函數(shù)作為根節(jié)點(diǎn), 以該程序代碼在順序執(zhí)行過程中的各函數(shù)調(diào)用作為根節(jié)點(diǎn)之下的各節(jié)點(diǎn), 并以各函數(shù)調(diào)用之間的進(jìn)一步調(diào)用關(guān)系作為相應(yīng)的節(jié)點(diǎn)之間的父子關(guān)系, 來生成該程序代碼的調(diào)用樹。如上面結(jié)合圖2所說明的,與該程序代碼的 每一次非系統(tǒng)API的函數(shù)調(diào)用有關(guān)的信息都被記錄在了函數(shù)調(diào)用日志中, 所以在該步驟中,可以根據(jù)上面圖2的過程所生成的日志來識別出該程序 代碼在執(zhí)行過程中的各函數(shù)調(diào)用。該步驟所生成的調(diào)用樹中的每一個節(jié)點(diǎn) 都代表該程序代碼在執(zhí)行過程中的一次函數(shù)調(diào)用,并且每一個節(jié)點(diǎn)都包括 下列各項(xiàng)函數(shù)標(biāo)識funcjd,其是該節(jié)點(diǎn)所對應(yīng)的函數(shù)調(diào)用中被調(diào)用函數(shù)的標(biāo) 識。在本發(fā)明的一個是實(shí)施例中,該標(biāo)識是^皮調(diào)用函數(shù)的名稱。調(diào)用函數(shù)列表calleejist,其是到達(dá)該節(jié)點(diǎn)所對應(yīng)的函數(shù)調(diào)用時的各級 調(diào)用函數(shù)的列表,也就是說,該列M示的是到達(dá)該函數(shù)調(diào)用時的堆棧狀 態(tài)。在本發(fā)明的一個實(shí)施例中,該列表是由各級調(diào)用函數(shù)的名稱組成的。 舉例來說,如果主函數(shù)main ()調(diào)用函數(shù)tree (),而函數(shù)tree ()在執(zhí) 行期間又調(diào)用了函數(shù)node (),則對于函數(shù)node ()的調(diào)用來說,其所 對應(yīng)的節(jié)點(diǎn)的調(diào)用函數(shù)列表calljist為(main, tree),調(diào)用號call number,其用于區(qū)別具有相同的函數(shù)標(biāo)識和調(diào)用函數(shù)列表的不同的函數(shù)調(diào)用,也就是說,其用于區(qū)別同一函數(shù)的不同次調(diào)用。該 調(diào)用號可以用數(shù)字來表示,也可以用其他標(biāo)識來表示。以上各項(xiàng)均需通過分析圖2的過程所生成的函數(shù)調(diào)用日志來獲得。接著,在步驟410,根據(jù)上面圖2的過程所記錄的執(zhí)行信息日志,為 上述調(diào)用樹中的各節(jié)點(diǎn)獲得其所對應(yīng)的函數(shù)調(diào)用的讀訪問記錄集合和寫訪 問記錄集合。也就是說,上述調(diào)用樹中的各節(jié)點(diǎn)還包括下列各項(xiàng)讀訪問記錄集合read—set,其是在該節(jié)點(diǎn)所對應(yīng)的函數(shù)調(diào)用期間對存 儲器進(jìn)行的讀訪問的記錄的集合。寫訪問記錄集合write—set,其是在該節(jié)點(diǎn)所對應(yīng)的函數(shù)調(diào)用期間對存 儲器進(jìn)行的寫訪問的記錄的集合。由于該程序代碼的與每一次非系統(tǒng)API的函數(shù)調(diào)用及存儲器訪問有關(guān) 的信息都一皮記錄在了日志中,所以在該步驟中,根據(jù)該日志來識別出該程 序代碼在執(zhí)行過程中的各非系統(tǒng)API的函數(shù)調(diào)用,并分別統(tǒng)計(jì)出該各函數(shù) 調(diào)用期間的存儲器讀訪問記錄和寫訪問記錄,以分別作為該函數(shù)調(diào)用所對 應(yīng)的節(jié)點(diǎn)的讀訪問記錄集合和寫訪問記錄集合。在步驟415,對上述調(diào)用樹進(jìn)行優(yōu)化。具體地,在該步驟中,假設(shè)節(jié) 點(diǎn)A和B是該調(diào)用樹中同一父節(jié)點(diǎn)下的兩個葉子節(jié)點(diǎn),如果1) A的讀訪問記錄集合read_set中的記錄i^與B的寫訪問記錄集合 write_set中的記錄涉及相同的非本地存儲器地址p;或2 )A的寫訪問記錄集合write一set中的記錄及^與B的讀訪問記錄集合 read_set中的記錄及5涉及相同的非本地存儲器地址P;或3)A的寫訪問記錄集合writ^set中的記錄&與B的寫訪問記錄集合 write_set中的記錄I "涉及相同的非本地存儲器地址p; 則將節(jié)點(diǎn)A和B合并為一個新的節(jié)點(diǎn),以表示A、 B的相互依賴性。其中, 對于相同的非本地存儲器地址的判斷,是根據(jù)各讀、寫訪問記錄中的存儲 器地址信息和存儲器類型信息來進(jìn)行的。也就是說,在本步驟中,對于上述程序代碼中同一函數(shù)下的各函數(shù)調(diào) 用,根據(jù)其讀、寫訪問記錄集合中各記錄的存儲器地址和存儲器類型,判斷其中一個函數(shù)調(diào)用的寫訪問記錄集合與另一個函數(shù)調(diào)用的讀或?qū)懺L問記 錄集合是否存在關(guān)于同一個非本地存儲器地址的記錄,若存在,則確定這些函數(shù)調(diào)用之間具有依賴關(guān)系、不可并行執(zhí)行;否則,確定這些函數(shù)調(diào)用 間不具有依賴關(guān)系、可并行執(zhí)行。并且,重復(fù)步驟415,直到該調(diào)用樹中不再存在能夠進(jìn)一步合并的上 述那樣的兄弟節(jié)點(diǎn)為止。下面,舉一個具體例子來說明圖4的過程。圖5(a)示出了兩段簡單 的程序代碼,其中的main ()是主函數(shù),Add ()是被主函數(shù)所調(diào)用的子 函數(shù)。圖5 (b)示出了記錄有圖5(a)中的這兩段程序代碼的執(zhí)行信息的 日志。可以看出,該日志按時戳(執(zhí)行周期)的順序依次記錄了這兩段程 序代碼在執(zhí)行過程中的所有存儲器訪問信息、函數(shù)調(diào)用信息等。并且,由 于這兩段程序代碼中不存在存儲器分配/釋放指令malloc和free,所以沒有 記錄與存儲器分配/釋放有關(guān)的信息。以上述圖5(a)中的程序代碼及圖5(b)中相應(yīng)的執(zhí)行信息日志為例, 利用上述圖4的過程,可得到圖5 (c)所示的該程序代碼的最終調(diào)用樹的 一部分。其中,節(jié)點(diǎn)(add, main, 0, read_set, write一set)與節(jié)點(diǎn)(add, main, 1, read一set, write一set)不能夠合并,從而表示函數(shù)add ()被主 函數(shù)main ()的第1次調(diào)用和第2次調(diào)用沒有依賴關(guān)系、能夠并行執(zhí)行。從而,在上面圖1的步驟115中便可向用戶呈現(xiàn)利用該過程最終生成 的調(diào)用樹,以利用調(diào)用樹中各節(jié)點(diǎn)之間的關(guān)系來表現(xiàn)程序代碼中的各函數(shù) 調(diào)用之間的依賴關(guān)系,使用戶獲得對于該程序代碼的并行性的直觀認(rèn)識。此外,需要說明的是,上面圖4的并行性分析過程所采用的樹形分析 方式僅是本發(fā)明的一個實(shí)施例,其并非要對本發(fā)明進(jìn)行限制。在其他實(shí)施 例中,也可以使用列表、文本等任何形式來進(jìn)行程序代碼的各函數(shù)調(diào)用之 間的依賴關(guān)系的分析及呈現(xiàn)。返回到圖4,該并行性分析過程還可包括可選步驟420。在可選步驟420,對上述程序代碼在其執(zhí)行過程中的各次函數(shù)調(diào)用進(jìn) 行代碼大小和數(shù)據(jù)大小的分析。具體地,該步驟根據(jù)下列算式來實(shí)現(xiàn)self—code—size(A)=the own code size of fimction A code—size(call A) = self—code—size(A) + Z (self_code_size(f))A^調(diào)用的函敏— —data一size(callA) = Z(sizeof(i))A的存儲器訪問i也就是說,在該步驟中,對于上述程序代碼在執(zhí)行過程中的各次函數(shù)調(diào)用caHA,將其所對應(yīng)的被調(diào)用函數(shù)A的本身代碼大小與該函數(shù)調(diào)用期 間進(jìn)一步調(diào)用的各函數(shù)f的代碼大小之和作為該函數(shù)調(diào)用callA的代碼大 小,并將該函數(shù)調(diào)用callA在生命周期中進(jìn)行各次存儲器訪問i時所訪問的 空間大小之和作為該函數(shù)調(diào)用callA的數(shù)據(jù)大小。上面的步驟420,對于當(dāng)前進(jìn)行并行性分析的程序代碼是要應(yīng)用于 CELL那樣每一個處理器核都具有本地存儲器限制(256KB)的多核體系 結(jié)構(gòu)的情況而言,是必須的。因?yàn)?,在這樣的系統(tǒng)中,每一個處理器核所 能夠承受的任務(wù)的大小(代碼及數(shù)據(jù)大小)是受其本地存儲器的限制的, 所以在對各個處理器核進(jìn)行任務(wù)的分配時,必須首先考慮該任務(wù)的大小是 否適合于該處理器核。但是,對于處理器核并沒有本地存儲器大小限制的 多核體系結(jié)構(gòu)而言,在對其程序代碼進(jìn)行并行性的分析時,則無需考慮所 分配的任務(wù)的大小是否適合于其處理器核,從而無需執(zhí)行上面的步驟420。 因而,步驟420在圖4中是作為可選步驟、依情況來執(zhí)行的。此外,在執(zhí)行步驟420的情況下,在上面圖1的步驟115中還要向用 戶呈現(xiàn)該步驟中所獲得的各函數(shù)調(diào)用的代碼大小和數(shù)據(jù)大小。各函數(shù)調(diào)用 的代碼大小和數(shù)據(jù)大小可以隨調(diào)用樹中的相應(yīng)節(jié)點(diǎn)一起呈現(xiàn)。以上,就是對圖4的程序代碼的并行性分析過程的詳細(xì)描述。需要說 明的是,在上面圖4所示的過程中,雖然將步驟410的讀訪問記錄集合和 寫訪問記錄集合獲取步驟安排在步驟405的調(diào)用樹生成步驟之后,但這只 是為了便于說明而以這樣的順序來進(jìn)行描述的,其并非是限定性的。在具 體實(shí)現(xiàn)中,也可以在步驟405的調(diào)用樹生成的同時執(zhí)行步驟410。以上,就是對本實(shí)施例的程序代碼的并行性的分析方法的描述。從以 上描述可知,本實(shí)施例首先通過模擬程序代碼的順序執(zhí)行來收集對于該程18序代碼的并行性分析來說所需的執(zhí)行信息,然后根據(jù)所收集的執(zhí)行信息來 進(jìn)行各函數(shù)調(diào)用之間的依賴關(guān)系的分析,最終以直觀的形式向用戶呈現(xiàn)該 分析結(jié)果。因而,在本實(shí)施例中,由于模擬程序代碼的實(shí)際執(zhí)行,所以能夠收集 到內(nèi)核級的存儲器訪問信息以及由例如輸入輸出控制的系統(tǒng)調(diào)用所引入的 潛在的依賴關(guān)系,從而在此基礎(chǔ)上進(jìn)行的并行性分析更加準(zhǔn)確,能夠幫助并且,利用本實(shí)施例,能夠使程序代碼的并行性分析獨(dú)立于目標(biāo)系統(tǒng)的硬 件和操作系統(tǒng)。此外,以上雖然是針對于CELL系統(tǒng)的情況來描述本發(fā)明如何進(jìn)行程 序代碼的并行性分析的,但是,并不限于此,本發(fā)明同樣可應(yīng)用于諸如 Simple Scalar、 Power系統(tǒng)芯片等其他多核系統(tǒng)的程序代碼的并行性分析。在同一發(fā)明構(gòu)思下,圖6是示出根據(jù)本發(fā)明實(shí)施例的程序代碼的并行 性的分4斤系統(tǒng)的方才匡圖。如圖6所示,本實(shí)施例的程序代碼的并行性的分析系統(tǒng)60包括模擬 器61、并行性分析單元62和呈現(xiàn)單元63。其中,模擬器61,用于跟蹤要進(jìn)行并行性分析的程序代碼的執(zhí)行過程, 以收集其執(zhí)行信息。圖7是根據(jù)本發(fā)明實(shí)施例的用于 程序代碼的執(zhí)行過程的模擬器的 方框圖。如圖7所示,本實(shí)施例的模擬器61包括模擬存儲器611、存儲 器管理單元612、流水線613、模擬寄存器614、執(zhí)行過程跟蹤單元615和 跟蹤預(yù)處理單元616。其中,模擬存儲器611,是從主系統(tǒng)(當(dāng)前系統(tǒng))的存儲器中分配出 的、用作模擬器61所模擬的目標(biāo)系統(tǒng)環(huán)境中的物理存儲器的存儲器塊。存儲器管理單元(MMU) 612,用于在程序代碼的存儲器訪問期間將 虛擬地址轉(zhuǎn)換為物理地址。該存儲器管理單元612包含一轉(zhuǎn)換后4^緩沖器 TLB,其是高速緩存,并且存儲有虛擬地址與物理地址之間的映射關(guān)系。 該存儲器管理單元612進(jìn)行地址轉(zhuǎn)換的過程是搜索該轉(zhuǎn)換后備緩沖器TLB,找到匹配的虛擬地址與物理地址對,從而得到所需的物理地址。 流水線613,其包括指令取單元6131、指令解碼單元6132和指令執(zhí)行單元6133。指令取單元6131將多條指令從模擬存儲器611中取到該流水線613上,指令解碼單元6132分析每一條指令的二進(jìn)制格式,而指令執(zhí)行單元6133則執(zhí)行每一條指令的動作。模擬寄存器614,用作模擬器61所模擬的目標(biāo)系統(tǒng)的寄存器,用于存儲中間計(jì)算結(jié)果。其中的pc寄存器記錄當(dāng)前要執(zhí)行的指令的位置(虛擬地址)。執(zhí)行過程跟蹤單元615,用于跟蹤程序代碼在模擬器61中的順序執(zhí)行 過程,以獲得該程序代碼的執(zhí)行信息。具體地,其判斷在該模擬器61中執(zhí) 行的當(dāng)前指令的類型如果該指令是調(diào)用非系統(tǒng)api的函數(shù)調(diào)用/返回指 令,則將當(dāng)前執(zhí)行周期以及被調(diào)用函數(shù)的標(biāo)識記入日志;如果該指令是調(diào) 用系統(tǒng)api中的存儲器分配或釋放函數(shù)的函數(shù)調(diào)用/返回指令,則將當(dāng)前執(zhí) 行周期以及被分配的存儲器大小、存儲器地址記入日志;以及如果該指令 是加栽/存儲指令,將當(dāng)前執(zhí)行周期以及數(shù)據(jù)地址、數(shù)據(jù)大小、讀/寫類型和 存儲器類型記入日志。跟蹤預(yù)處理單元616,用于分析上迷日志中所記錄的各存儲器訪問操作和存儲器分配操作的相應(yīng)存儲器類型,并將該存儲器類型信息記入曰志。下面,結(jié)合圖8-10說明模擬器61的工作過程。如圖8所示,在才莫擬器61啟動后,指令取單元6131讀取pc寄存器 中的值,以獲得下一條指令的地址,并將該地址傳送給存儲器管理單元 以進(jìn)行虛擬-物理地址的轉(zhuǎn)換。然后,指令取單元6131根據(jù)所獲得的物理 地址a^漠?dāng)M存儲器611的相應(yīng)位置處讀取指令,同時pc寄存器的值自動 指向下一指令。如圖9所示,在指令執(zhí)行單元6133執(zhí)行一條加載/存儲指令時,首先 從該指令本身或寄存器中獲取數(shù)據(jù)地址,并將該地址傳送給存儲器管理單 元612以進(jìn)行虛擬-物理地址的轉(zhuǎn)換。然后,指令執(zhí)行單元6133根據(jù)所獲 得的物理地址將數(shù)據(jù)加載或存儲到模擬存儲器611的相應(yīng)位置處。與此同時,執(zhí)行過程跟蹤單元615記錄相應(yīng)的存儲器訪問信息。如圖IO所示,在指令執(zhí)行單元6133執(zhí)行一條分支指令時,首先將PC 寄存器中的值更新為該分支指令的目標(biāo)地址,并丟棄掉已取到流水線613 上的所有指令。然后,指令取單元6131根據(jù)PC寄存器中的新值將相應(yīng)指 令取到流水線613上。與此同時,執(zhí)行過程跟蹤單元615記錄相應(yīng)的函數(shù) 調(diào)用信息。以上,就是對本實(shí)施例的用于跟蹤程序代碼的執(zhí)行過程的模擬器的詳 細(xì)描述。利用本實(shí)施例的模擬器,能夠獲得對于程序代碼的并行性分析來 說詳細(xì)、有用的執(zhí)行信息。返回到圖6,并行性分析單元62,用于根據(jù)模擬器61對程序代碼的執(zhí) 行過程的跟蹤結(jié)果,獲得該跟蹤結(jié)果所記錄的該程序代碼在執(zhí)行過程中的 M行動作及其相應(yīng)的時間信息和存儲器類型信息,來進(jìn)行并行性的分析。 如圖7所示,該并行性分析單元62進(jìn)一步包括調(diào)用樹構(gòu)造單元621、訪 問記錄獲得單元622、調(diào)用樹優(yōu)化單元623和代碼/數(shù)據(jù)大小分析單元6M。其中,調(diào)用樹構(gòu)造單元621,用于根據(jù)模擬器61所獲得的跟蹤結(jié)果, 以上述程序代碼在執(zhí)行過程中的各次函數(shù)調(diào)用作為節(jié)點(diǎn)、以函數(shù)調(diào)用之間 的關(guān)系作為節(jié)點(diǎn)之間的關(guān)系,生成該程序代碼的調(diào)用樹。訪問記錄獲得單元622,用于根據(jù)模擬器61所獲得的跟蹤結(jié)果,為上 述調(diào)用樹構(gòu)造單元621所生成的調(diào)用樹中的各節(jié)點(diǎn)獲得其所對應(yīng)的函數(shù)調(diào) 用期間的讀訪問記錄集合和寫訪問記錄集合.調(diào)用樹優(yōu)化單元623,用于對于上述調(diào)用樹中同一父節(jié)點(diǎn)下的各葉子 節(jié)點(diǎn),根據(jù)其讀訪問記錄集合和寫訪問記錄集合確定其之間是否存在針對 同一非本地存儲器地址的訪問沖突,并且將存在存儲器訪問沖突的各葉子 節(jié)點(diǎn)進(jìn)一步合并為一個節(jié)點(diǎn)。代碼/數(shù)據(jù)大小分析單元624,用于對于上述程序代碼在執(zhí)行過程中的 各次函數(shù)調(diào)用,將其所對應(yīng)的被調(diào)用函數(shù)的本身代碼大小與該函數(shù)調(diào)用期 間進(jìn)一步調(diào)用的各函數(shù)的代碼大小之和作為該函數(shù)調(diào)用的代碼大小,并將 其在生命周期中進(jìn)行各次存儲器訪問時所訪問的存儲器空間大小之和作為該函數(shù)調(diào)用的數(shù)據(jù)大小。接著,呈現(xiàn)單元63,用于向用戶呈現(xiàn)對上述程序代碼的并行性的分析 結(jié)果。該分析結(jié)果可包括上述程序代碼的各函數(shù)調(diào)用之間的依賴關(guān)系、代 碼大小和數(shù)據(jù)大小的圖形、文字等的表示。以上,就是對本實(shí)施例的程序代碼的并行性的分析系統(tǒng)的描述。從以 上描述可知,本實(shí)施例首先利用模擬器來收集對于該程序代碼的并行性分 析來說所需的執(zhí)行信息,然后根據(jù)所收集的執(zhí)行信息來進(jìn)行各函數(shù)調(diào)用之 間的依賴關(guān)系的分析,最終以直7見的形式向用戶呈現(xiàn)該分沖斤結(jié)果。因而,在本實(shí)施例中,由于利用模擬器模擬程序代碼的實(shí)際執(zhí)行,所 以能夠收集到內(nèi)核級的存儲器訪問信息以及由例如輸入輸出控制的系統(tǒng)調(diào) 用所引入的潛在的依賴關(guān)系,從而在此基礎(chǔ)上進(jìn)行的并行性分析更加準(zhǔn)確,的劃分。并且,利用本實(shí)施例,能夠4吏程序代碼的并行性分析獨(dú)立于目標(biāo) 系統(tǒng)的硬件和操作系統(tǒng)。本實(shí)施例的程序代碼的并行性的分析系統(tǒng)及其各個組成部分可以由諸 如超大M4莫集成電路或門陣列、諸如邏輯芯片、晶體管等的半導(dǎo)體、或者 諸如現(xiàn)場可編程門陣列、可編程邏輯設(shè)備等的可編程硬件設(shè)備的硬件電路 實(shí)現(xiàn),也可以用由各種類型的處理器執(zhí)行相應(yīng)的軟件的方式實(shí)現(xiàn),也可以 由上述硬件電路和軟件的結(jié)合實(shí)現(xiàn)。并且這些各個組成部分也可以物理上 集中在一起實(shí)施,也可以物理上相互獨(dú)立而操作上互相協(xié)作。以上雖然通過一些示例性的實(shí)施例對本發(fā)明的程序代碼的并行性的分 析方法和系統(tǒng)進(jìn)行了詳細(xì)的描述,但是以上這些實(shí)施例并不是窮舉的,本 領(lǐng)域技術(shù)人員可以在本發(fā)明的精神和范圍內(nèi)實(shí)現(xiàn)各種變化和修改。因此, 本發(fā)明并不限于這些實(shí)施例,本發(fā)明的范圍僅以所附權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種程序代碼的并行性的分析方法,包括模擬程序代碼的順序執(zhí)行,以跟蹤該程序代碼的執(zhí)行過程;以及根據(jù)對上述程序代碼的執(zhí)行過程的跟蹤結(jié)果,對上述程序代碼進(jìn)行并行性的分析。
2. 如權(quán)利要求l所述的程序代碼的并行性的分析方法,其中上述對程 序代碼的執(zhí)行過程的跟蹤結(jié)果是記錄有上述程序代碼在上述順序執(zhí)行過程 中的執(zhí)行動作、所述動作的相應(yīng)時間信息或存儲器類型信息的日志。
3. 如權(quán)利要求1或2所述的程序代碼的并行性的分析方法,其中上述 模擬程序代碼的順序執(zhí)行,以跟蹤該程序代碼的執(zhí)行過程的步驟進(jìn)一步包 括為上述程序代碼模擬其目標(biāo)系統(tǒng)的執(zhí)行環(huán)境; 將上述程序代碼加載到上述所模擬的執(zhí)行環(huán)境中; 在上述執(zhí)行環(huán)境中,順序執(zhí)行上述所加載的程序代碼中的各指令;以及將上述程序代碼在上述順序執(zhí)行過程中的執(zhí)行信息記入日志.
4. 如權(quán)利要求3所述的程序代碼的并行性的分析方法,其中上述將程 序代碼在上述順序執(zhí)行過程中的執(zhí)行信息記入日志的步驟進(jìn)一步包括判斷上述程序代碼中的當(dāng)前指令的類型如果其是調(diào)用非系統(tǒng)API的函數(shù)調(diào)用/返回指令,則將當(dāng)前執(zhí)行周期以 及被調(diào)用函數(shù)的標(biāo)識記入日志;如果其是調(diào)用系統(tǒng)API中的存儲器分配或釋放函數(shù)的函數(shù)調(diào)用/返回 指令,則將當(dāng)前執(zhí)行周期以及被分配的存儲器大小、存儲器地址記入日志; 以及如果其是加載/存儲指令,則將當(dāng)前執(zhí)行周期以及數(shù)據(jù)地址、數(shù)據(jù)大小、 讀/寫類型記入日志。
5.如權(quán)利要求3所述的程序代碼的并行性的分析方法,其中上述日志被分類為函數(shù)調(diào)用日志、存儲器分配日志以及存儲器訪問日志,分別用于 記錄上述程序代碼在順序執(zhí)行過程中的函數(shù)調(diào)用信息、存儲器分配信息以 及存儲器訪問信息。
6. 如權(quán)利要求1或2所述的程序代碼的并行性的分析方法,其中根據(jù) 對上述程序代碼的執(zhí)行過程的跟蹤結(jié)果,對上述程序代碼進(jìn)行并行性的分 析的步驟進(jìn)一步包括根據(jù)上述跟蹤結(jié)果,分析上述程序代碼在上述執(zhí)行過程中的各次函數(shù) 調(diào)用之間的依賴關(guān)系,以找出其中沒有依賴關(guān)系的、可并行執(zhí)行的函數(shù)調(diào) 用。
7. 如權(quán)利要求6所述的程序代碼的并行性的分析方法,其中分析上述 程序代碼在上述執(zhí)行過程中的各次函數(shù)調(diào)用之間的依賴關(guān)系的步驟進(jìn)一步 包括根據(jù)上述跟蹤結(jié)果所記錄的上述程序代碼在上述順序執(zhí)行過程中的各 執(zhí)行動作及其相應(yīng)的時間信息和存儲器類型信息,來進(jìn)行上述依賴關(guān)系的 分析。
8. 如權(quán)利要求6所述的程序代碼的并行性的分析方法,其中分析上述 程序代碼在上述執(zhí)行過程中的各次函數(shù)調(diào)用之間的依賴關(guān)系的步驟進(jìn)一步 包括根據(jù)上述跟蹤結(jié)果,為上述程序代碼在上述執(zhí)行過程中的各次函數(shù)調(diào) 用獲得該次函數(shù)調(diào)用期間的讀訪問記錄集合和寫訪問記錄集合;對于同一函數(shù)中的各函數(shù)調(diào)用,根據(jù)該各函數(shù)調(diào)用期間的讀訪問記錄 集合和寫訪問記錄集合,確定其之間是否存在存儲器訪問沖突;以及將上述同一函數(shù)中的各函數(shù)調(diào)用中存在存儲器訪問沖突的各函數(shù)調(diào)用 確定為具有依賴關(guān)系、不可并行執(zhí)行,而將不存在存儲器訪問沖突的各函 數(shù)調(diào)用確定為不具有依賴關(guān)系、可并行執(zhí)行。
9. 如權(quán)利要求6所述的程序代碼的并行性的分析方法,其中分析上述 程序代碼在上述執(zhí)行過程中的各次函數(shù)調(diào)用之間的依賴關(guān)系的步驟進(jìn)一步 包括以上迷程序代碼在上述執(zhí)行過程中的各次函數(shù)調(diào)用作為節(jié)點(diǎn)、以函數(shù)調(diào)用之間的相互關(guān)系作為節(jié)點(diǎn)之間的關(guān)系,生成該程序代碼的調(diào)用樹; 根據(jù)上述跟蹤結(jié)果,為上述各節(jié)點(diǎn)獲得其所對應(yīng)的函數(shù)調(diào)用期間的讀訪問記錄集合和寫訪問記錄集合;對于上述調(diào)用樹中同 一父節(jié)點(diǎn)下的各葉子節(jié)點(diǎn),根據(jù)其讀訪問記錄集合和寫訪問記錄集合確定其之間是否存在存儲器訪問沖突;以及將上述同 一父節(jié)點(diǎn)下的各葉子節(jié)點(diǎn)中存在存儲器訪問沖突的各葉子節(jié)點(diǎn)進(jìn)一步合并為一個節(jié)點(diǎn)。
10. 如權(quán)利要求1或2所述的程序代碼的并行性的分析方法,其中根 據(jù)上述跟蹤結(jié)果,對上述程序代碼進(jìn)行并行性的分析的步驟進(jìn)一步包括根據(jù)上述跟蹤結(jié)果,對上述程序代碼在上述執(zhí)行過程中的各次函數(shù)調(diào) 用進(jìn)行代碼大小和數(shù)據(jù)大小的分析。
11. 如權(quán)利要求10所述的程序代碼的并行性的分析方法,其中對上述 程序代碼在上述執(zhí)行過程中的各次函數(shù)調(diào)用進(jìn)行代碼大小和數(shù)據(jù)大小的分 析的步驟進(jìn)一步包括對于上述程序代碼在上述執(zhí)行過程中的各次函數(shù)調(diào)用,將其所對應(yīng)的被調(diào)用函數(shù)的本身代碼大小與該函數(shù)調(diào)用期間進(jìn)一 步調(diào)用的各函數(shù)的代碼大小之和作為該函數(shù)調(diào)用的代碼大?。灰约皩⑵湓谏芷谥羞M(jìn)行各次存儲器訪問時所訪問的存儲器空間大小之和作為該函數(shù)調(diào)用的數(shù)據(jù)大小。
12. —種用于跟蹤程序代碼的執(zhí)行過程的模擬器,包括 模擬的執(zhí)行環(huán)境,用于模擬程序代碼能夠在其中順序執(zhí)行的目標(biāo)系統(tǒng)的執(zhí)行環(huán)境;以及執(zhí)行過程跟蹤單元,用于跟蹤上述程序代碼在上述模擬執(zhí)行環(huán)境中的順序執(zhí)行過程,以獲得該程序代碼的執(zhí)行信息。
13. 權(quán)利要求12所述的程序代碼的并行性的分析系統(tǒng),還包括 跟蹤預(yù)處理單元,用于獲得與上述程序代碼在上述順序執(zhí)行過程中的各執(zhí)行動作相應(yīng)的存儲器類型信息,并將其記入日志。
14. 權(quán)利要求12所述的用于跟蹤程序代碼的執(zhí)行過程的模擬器,其中 上述^=莫擬的執(zhí)行環(huán)境進(jìn)一步包括模擬存儲器,用作所模擬的上述目標(biāo)系統(tǒng)的存儲器; 存儲器管理單元,用于在程序代碼的存儲器訪問期間將虛擬地址轉(zhuǎn)換 為物理地址;流水線,其包括指令取單元、指令解碼單元和指令執(zhí)行單元,分別用 于實(shí)現(xiàn)從上述模擬存儲器的指令的獲取、指令的格式轉(zhuǎn)換以及指令的執(zhí)行; 以及模擬寄存器,用作所模擬的上述目標(biāo)系統(tǒng)的寄存器。
15. 權(quán)利要求12所述的用于 程序代碼的執(zhí)行過程的模擬器,其中 上述執(zhí)行過程跟蹤單元判斷在上i^漠?dāng)M的執(zhí)行環(huán)境中執(zhí)行的當(dāng)前指令的類 型如果該指令是調(diào)用非系統(tǒng)API的函數(shù)調(diào)用/返回指令,則將當(dāng)前執(zhí)行周 期以及被調(diào)用函數(shù)的標(biāo)識記入曰志;如果該指令是調(diào)用系統(tǒng)API中的存儲器分配或釋放函數(shù)的函數(shù)調(diào)用/ 返回指令,則將當(dāng)前執(zhí)行周期以及被分配的存儲器大小、存儲器地址記入 曰志;以及如果該指令是加栽/存儲指令,將當(dāng)前執(zhí)行周期以及數(shù)據(jù)地址、數(shù)據(jù)大 小、讀/寫類型記入日志。
16. —種程序代碼的并行性的分析系統(tǒng),包括權(quán)利要求12-15中任意一項(xiàng)所述的用于,程序代碼的執(zhí)行過程的模 擬器;以及并行性分析單元,用于根據(jù)上迷模擬器對程序代碼的執(zhí)行過程的跟蹤 結(jié)果,對該程序代碼進(jìn)行并行性的分析。
17. 權(quán)利要求16所述的程序代碼的并行性的分析系統(tǒng),其中上述并行 性分析單元根據(jù)上述模擬器獲得的跟蹤結(jié)果中記錄的上述程序代碼的^ 行動作及其相應(yīng)的時間信息和存儲器類型信息,來進(jìn)行并行性的分析。
18. 權(quán)利要求16所述的程序代碼的并行性的分析系統(tǒng),其中上述并行性分析單元進(jìn)一步包括訪問記錄獲得單元,用于根據(jù)上g擬器所獲得的跟蹤結(jié)果,為上述 程序代碼在執(zhí)行過程中的各次函數(shù)調(diào)用獲得讀訪問記錄集合和寫訪問記錄 集合;以及依賴性確定單元,用于對于同一函數(shù)中的各函數(shù)調(diào)用,根據(jù)該各函數(shù) 調(diào)用的讀訪問記錄集合和寫訪問記錄集合,確定其之間是否存在依賴關(guān)系。
19. 權(quán)利要求18所述的程序代碼的并行性的分析系統(tǒng),其中上述依賴 性確定單元進(jìn)一步包括調(diào)用樹構(gòu)造單元,用于根據(jù)上i^擬器所獲得的跟蹤結(jié)果,以上述程序代碼在執(zhí)行過程中的各次函數(shù)調(diào)用作為節(jié)點(diǎn)、以函數(shù)調(diào)用之間的關(guān)系作為節(jié)點(diǎn)之間的關(guān)系,生成該程序代碼的調(diào)用樹;以及調(diào)用樹優(yōu)化單元,用于對于上述調(diào)用樹中同一父節(jié)點(diǎn)下的各葉子節(jié)點(diǎn), 根據(jù)其所對應(yīng)的函數(shù)調(diào)用期間的讀訪問記錄集合和寫訪問記錄集合確定其之間是否存在存儲器訪問沖突,并且將存在存儲器訪問沖突的各葉子節(jié)點(diǎn) 進(jìn)一步合并為一個節(jié)點(diǎn)。
20. 權(quán)利要求16所述的程序代碼的并行性的分析系統(tǒng),還包括 代碼/數(shù)據(jù)大小分析單元,用于對于上述程序代碼在執(zhí)行過程中的各次函數(shù)調(diào)用,將其所對應(yīng)的被調(diào)用函數(shù)的本身代碼大小與該函數(shù)調(diào)用期間進(jìn) 一步調(diào)用的各函數(shù)的代碼大小之和作為該函數(shù)調(diào)用的代碼大小,并將其在 生命周期中進(jìn)行各次存儲器訪問時所訪問的存儲器空間大小之和作為該函 數(shù)調(diào)用的數(shù)據(jù)大小。
全文摘要
本發(fā)明提供一種程序代碼的并行性的分析方法和系統(tǒng)以及用于跟蹤程序代碼的執(zhí)行信息的模擬器。該程序代碼的并行性的分析方法包括模擬程序代碼的順序執(zhí)行,以跟蹤該程序代碼的執(zhí)行過程;以及根據(jù)對上述程序代碼的執(zhí)行過程的跟蹤結(jié)果,對上述程序代碼進(jìn)行并行性的分析。本發(fā)明通過模擬程序代碼的順序執(zhí)行來收集其執(zhí)行信息,并根據(jù)所收集的執(zhí)行信息對該程序代碼進(jìn)行并行性的分析,以幫助程序設(shè)計(jì)者更有效地針對多核體系結(jié)構(gòu)進(jìn)行程序代碼的并行任務(wù)的劃分,從而提高并行軟件開發(fā)的效率。
文檔編號G06F9/45GK101329638SQ200710109089
公開日2008年12月24日 申請日期2007年6月18日 優(yōu)先權(quán)日2007年6月18日
發(fā)明者博 馮, 鯤 王, 王華勇, 蓉 閻 申請人:國際商業(yè)機(jī)器公司