程序的線程關(guān)系確定方法、設(shè)備及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種程序的線程關(guān)系確定方法、設(shè)備及系統(tǒng),包括:檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移,第一線程為第一處理器執(zhí)行的目標(biāo)并行程序中的一個線程,遷移到第二處理器后的第一線程作為第二線程;確定第一線程和第二線程之間的序關(guān)系。從而實現(xiàn)對操作系統(tǒng)調(diào)度而引起的同一軟件線程在不同處理器上遷移的確認,進而可以確定線程遷移前后的序關(guān)系,并提高了并行程序調(diào)試的準確性。
【專利說明】程序的線程關(guān)系確定方法、設(shè)備及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息【技術(shù)領(lǐng)域】,尤其涉及一種程序的線程關(guān)系確定方法、設(shè)備及系統(tǒng)。【背景技術(shù)】
[0002]隨著科技的發(fā)展,片上多處理器逐漸成為了處理器設(shè)計的主流,同時并行編程的運用也越來越多。然而并行編成在帶來了高效之外,還存在難以調(diào)試的問題,主要原因有:調(diào)試工作依賴于程序的重復(fù)執(zhí)行,然而并行程序具有天然的不確定性(I/o、中斷、DMA與訪問內(nèi)存沖突),導(dǎo)致并行程序多次執(zhí)行的行為不一致,程序中的錯誤無法重現(xiàn)。這種在并發(fā)系統(tǒng)中的不確定性,使并行程序的調(diào)試變得非常復(fù)雜。為了解決并行程序難以重現(xiàn)的問題,比較直觀的方法是記錄下并行程序執(zhí)行過程中所有的不確定性因素,當(dāng)需要重現(xiàn)并行程序的執(zhí)行時,重放出來。其中,該工作主要分為面向全系統(tǒng)的確定性記錄與重放和面向用戶層應(yīng)用的確定性記錄與重放。
[0003]現(xiàn)有技術(shù)中,根據(jù)緩存一致性協(xié)議的消息來建立優(yōu)先(“happen-before”)關(guān)系,當(dāng)處理器a收到來自處理器b的緩存一致性消息時,在處理器a的后繼集合中b對應(yīng)的位置寫入I,在處理器b收到a的緩存一致性應(yīng)答消息時,在處理器b的前驅(qū)集合中a對應(yīng)的位置寫入I,如此建立a —b的“happen-before”關(guān)系。
[0004]然而,現(xiàn)有技術(shù)僅能獲取由緩存一致性消息而導(dǎo)致的訪問內(nèi)存沖突,從而導(dǎo)致對并行程序的調(diào)試不準確。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種程序的線程關(guān)系確定方法、設(shè)備及系統(tǒng),以提高并行程序調(diào)試的準確性。
[0006]第一個方面,本發(fā)明實施例提供一種程序的線程關(guān)系確定方法,包括:檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移,第一線程為第一處理器執(zhí)行的目標(biāo)并行程序中的一個線程,遷移到所述第二處理器后的第一線程作為第二線程;確定所述第一線程和所述第二線程之間的序關(guān)系。
[0007]結(jié)合第一個方面,在第一種可能的實現(xiàn)方式中,所述檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移,包括:檢測所述第一線程發(fā)生掛起;記錄所述第一處理器的處理器標(biāo)識;當(dāng)所述第一線程重新執(zhí)行時,判斷所述第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行所述第一線程的處理器的處理器標(biāo)識是否一致,若不一致,則確定第一線程發(fā)生遷移,且當(dāng)前執(zhí)行所述第一線程的處理器為所述第二處理器。
[0008]結(jié)合第一個方面或是第一個方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移之后,還包括:記錄所述第一線程和所述第二線程之間的序關(guān)系。
[0009]結(jié)合第一個方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述檢測所述第一線程發(fā)生掛起之后,還包括:確定所述第一線程與至少一個第三線程的序關(guān)系,所述第三線程為所述目標(biāo)并行程序中除所述第一線程之外在所述第一處理器上執(zhí)行的線程。
[0010]結(jié)合第一個方面的第三種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述檢測所述第一線程發(fā)生掛起之后,還包括:記錄所述第一線程的序關(guān)系;記錄所述第一線程與所述第一處理器的映射關(guān)系。
[0011]結(jié)合第一個方面、第一個方面的第一種可能的實現(xiàn)方式、第一個方面的第二種可能的實現(xiàn)方式、第一個方面的第三種可能的實現(xiàn)方式或者第一個方面的第四種可能的實現(xiàn)方式中的任意一種,在第五種可能的實現(xiàn)方式中,所述檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移之前,還包括:判斷所述第一處理器執(zhí)行的并行程序的頁表基址與設(shè)定的頁表基址是否相同,若相同,則將所述并行程序作為所述目標(biāo)程序。
[0012]結(jié)合第一個方面、第一個方面的第一種可能的實現(xiàn)方式、第一個方面的第二種可能的實現(xiàn)方式、第一個方面的第三種可能的實現(xiàn)方式、第一個方面的第四種的實現(xiàn)方式或者第一個方面的第五種的實現(xiàn)方式的任意一種,在第六種可能的實現(xiàn)方式中,還包括:從所述第一處理器獲取所述目標(biāo)并行程序的指令;接收系統(tǒng)中的第三處理器發(fā)送的緩存一致性消息,所述緩存一致性消息中攜帶所述第三處理器訪問的內(nèi)存地址;判斷所述內(nèi)存地址與所述指令所使用的數(shù)據(jù)地址是否相同,若相同,則確定所述指令對應(yīng)的線程與所述緩存一致性消息對應(yīng)的線程的序關(guān)系。
[0013]結(jié)合第一個方面的第六種可能的實現(xiàn)方式,在第七種可能的實現(xiàn)方式中,還包括:記錄所述指令對應(yīng)的線程與所述第一處理器的映射關(guān)系及所述指令對應(yīng)的線程的序關(guān)系。
[0014]第二個方面,本發(fā)明實施例提供一種程序的線程關(guān)系確定設(shè)備,包括:檢測模塊,用于檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移,第一線程為第一處理器執(zhí)行的目標(biāo)并行程序中的一個線程,遷移到所述第二處理器后的第一線程作為第二線程;確定模塊,用于確定所述第一線程和所述第二線程之間的序關(guān)系。
[0015]結(jié)合第二個方面,在第一種可能的實現(xiàn)方式中,所述檢測模塊,包括:檢測單元,用于檢測所述第一線程發(fā)生掛起;軟件線程控制單元,用于記錄所述第一處理器的處理器標(biāo)識;判斷單元,用于當(dāng)所述第一線程重新執(zhí)行時,判斷所述第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行所述第一線程的處理器的處理器標(biāo)識是否一致,若不一致,則確定當(dāng)前執(zhí)行所述第一線程的處理器為所述第二處理器。
[0016]結(jié)合第二個方面或是第二個方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述的設(shè)備,還包括:日志產(chǎn)生模塊,用于記錄所述第一線程和所述第二線程之間的序關(guān)系。
[0017]結(jié)合第二個方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述日志產(chǎn)生模塊,還用于確定所述第一線程與至少一個第三線程的序關(guān)系,所述第三線程為所述目標(biāo)并行程序中除所述第一線程之外在所述第一處理器上執(zhí)行的線程。
[0018]結(jié)合第二個方面的第三種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述日志產(chǎn)生模塊,還用于記錄所述第一線程的序關(guān)系及所述第一線程與所述第一處理器的映射關(guān)系。
[0019]結(jié)合第二個方面、第二個方面的第一種可能的實現(xiàn)方式、第二個方面的第二種可能的實現(xiàn)方式、第二個方面的第三種可能的實現(xiàn)方式或者第二個方面的第四種可能的實現(xiàn)方式中的任意一種,在第五種可能的實現(xiàn)方式中,所述的設(shè)備,還包括:判斷模塊,用于判斷所述第一處理器執(zhí)行的并行程序的頁表基址與設(shè)定的頁表基址是否相同,若相同,則將所述并行程序作為所述目標(biāo)程序。
[0020]結(jié)合第二個方面、第二個方面的第一種可能的實現(xiàn)方式、第二個方面的第二種可能的實現(xiàn)方式、第二個方面的第三種可能的實現(xiàn)方式、第二個方面的第四種的實現(xiàn)方式或者第二個方面的第五種的實現(xiàn)方式的任意一種,在第六種可能的實現(xiàn)方式中,所述的設(shè)備,其特征在于,還包括:獲取模塊,用于從所述第一處理器獲取所述目標(biāo)并行程序的指令;接收模塊,用于接收系統(tǒng)中的第三處理器發(fā)送的緩存一致性消息,所述緩存一致性消息中攜帶所述第三處理器訪問的內(nèi)存地址;第二判斷模塊,用于判斷所述內(nèi)存地址與所述指令所使用的數(shù)據(jù)地址是否相同,若相同,則確定所述指令對應(yīng)的線程與所述緩存一致性消息對應(yīng)的線程的序關(guān)系。
[0021]結(jié)合第二個方面的第六種可能的實現(xiàn)方式,在第七種可能的實現(xiàn)方式中,所述的設(shè)備,所述日志產(chǎn)生模塊,還用于記錄所述指令對應(yīng)的線程與所述第一處理器的映射關(guān)系及所述指令對應(yīng)的線程的序關(guān)系。
[0022]第三個方面,本發(fā)明實施例提供一種網(wǎng)絡(luò)設(shè)備,包括:多個處理器和至少第二個方面到第二個方面的第七種可能的實現(xiàn)方式中的任意一種所述的基于程序的線程關(guān)系確定設(shè)備。
[0023]第四個方面,本發(fā)明實施例提供一種程序的線程關(guān)系確定設(shè)備,其特征在于,包括:線程調(diào)度相關(guān)寄存器,用于檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移,第一線程為第一處理器執(zhí)行的目標(biāo)并行程序中的一個線程,遷移到所述第二處理器后的第一線程作為第二線程;前驅(qū)后繼寄存器,用于確定所述第一線程和所述第二線程之間的序關(guān)系。
[0024]結(jié)合第四個方面,在第一種可能的實現(xiàn)方式中,所述線程調(diào)度相關(guān)寄存器,還包括:檢測器,用于檢測所述第一線程發(fā)生掛起;軟件線程控制器,用于記錄所述第一處理器的處理器標(biāo)識;判斷器,用于當(dāng)所述第一線程重新執(zhí)行時,判斷所述第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行所述第一線程的處理器的處理器標(biāo)識是否一致,若不一致,則確定當(dāng)前執(zhí)行所述第一線程的處理器為所述第二處理器。
[0025]結(jié)合第四個方面或是第四個方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述的設(shè)備,還包括:日志產(chǎn)生器,記錄所述第一線程和所述第二線程之間的序關(guān)系。
[0026]結(jié)合第四個方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述日志產(chǎn)生器,還用于確定所述第一線程與至少一個第三線程的序關(guān)系,所述第三線程為所述目標(biāo)并行程序中除所述第一線程之外在所述第一處理器上執(zhí)行的線程。
[0027]結(jié)合第四個方面的第三種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述日志產(chǎn)生器,還用于記錄所述第一線程的序關(guān)系及所述第一線程與所述第一處理器的映射關(guān)系。
[0028]結(jié)合第四個方面、第四個方面的第一種可能的實現(xiàn)方式、第四個方面的第二種可能的實現(xiàn)方式、第四個方面的第三種可能的實現(xiàn)方式或者第四個方面的第四種可能的實現(xiàn)方式中的任意一種,在第五種可能的實現(xiàn)方式中,所述的設(shè)備,其特征在于,所述設(shè)備,還包括:判斷器,用于判斷所述第一處理器執(zhí)行的并行程序的頁表基址與設(shè)定的頁表基址是否相同,若相同,則將所述并行程序作為所述目標(biāo)程序。
[0029]結(jié)合第四個方面、第四個方面的第一種可能的實現(xiàn)方式、第四個方面的第二種可能的實現(xiàn)方式、第四個方面的第三種可能的實現(xiàn)方式、第四個方面的第四種的實現(xiàn)方式或者第四個方面的第五種的實現(xiàn)方式的任意一種,在第六種可能的實現(xiàn)方式中,所述的設(shè)備,其特征在于,還包括:獲取器,用于從所述第一處理器獲取所述目標(biāo)并行程序的指令;接收器,用于接收系統(tǒng)中的第三處理器發(fā)送的緩存一致性消息,所述緩存一致性消息中攜帶所述第三處理器訪問的內(nèi)存地址;第二判斷器,用于判斷所述內(nèi)存地址與所述指令所使用的數(shù)據(jù)地址是否相同,若相同,則確定所述指令對應(yīng)的線程與所述緩存一致性消息對應(yīng)的線程的序關(guān)系。
[0030]結(jié)合第四個方面的第六種可能的實現(xiàn)方式,在第七種可能的實現(xiàn)方式中,所述的設(shè)備,所述日志產(chǎn)生器,還用于。
[0031]第五個方面,本發(fā)明實施例提供一種網(wǎng)絡(luò)設(shè)備,包括:多個處理器和至少一個第四方面到第四方面的第七種可能的實現(xiàn)方式中的任意一種的基于程序的線程關(guān)系確定設(shè)備。
[0032]本發(fā)明提供的程序的線程關(guān)系確定方法、設(shè)備及系統(tǒng),通過檢測系統(tǒng)中的第一處理器執(zhí)行的目標(biāo)并行程序中的第一線程遷移至第二處理器,遷移到第二處理器后的第一線程作為第二線程,并確定第一線程和第二線程之間的序關(guān)系,從而實現(xiàn)對因操作系統(tǒng)調(diào)度而引起的線程遷移所產(chǎn)生訪問內(nèi)存地址的沖突的記錄,進而提高了對并行程序的調(diào)試的準確性。
【專利附圖】
【附圖說明】
[0033]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0034]圖1為本發(fā)明程序的線程關(guān)系確定方法實施例一的流程圖;
[0035]圖2為本發(fā)明程序的線程關(guān)系確定方法實施例二的流程圖;
[0036]圖3為本發(fā)明程序的線程關(guān)系確定方法實施例的線程與處理單元映射關(guān)系示意圖;
[0037]圖4為本發(fā)明程序的線程關(guān)系確定方法的日志保存序關(guān)系的數(shù)據(jù)格式示意圖;
[0038]圖5為本發(fā)明程序的線程關(guān)系確定方法的線程與處理器映射關(guān)系的格式示意圖;
[0039]圖6為本發(fā)明程序的線程關(guān)系確定方法實施例三的流程圖;
[0040]圖7為本發(fā)明程序的線程關(guān)系確定設(shè)備實施例一的結(jié)構(gòu)示意圖;
[0041]圖8為本發(fā)明程序的線程關(guān)系確定設(shè)備實施例二的結(jié)構(gòu)示意圖;
[0042]圖9為本發(fā)明程序的線程關(guān)系確定設(shè)備實施例三的結(jié)構(gòu)示意圖;
[0043]圖10為本發(fā)明程序的線程關(guān)系確定設(shè)備實施例四的結(jié)構(gòu)示意圖;
[0044]圖11為本發(fā)明程序的線程關(guān)系確定設(shè)備實施例五的結(jié)構(gòu)示意圖;
[0045]圖12為本發(fā)明的程序的線程關(guān)系確定設(shè)備的實施例六的結(jié)構(gòu)示意圖;
[0046]圖13為本發(fā)明的程序的線程關(guān)系確定設(shè)備的實施例七的結(jié)構(gòu)示意圖;[0047]圖14為本發(fā)明的程序的線程關(guān)系確定設(shè)備的實施例八的結(jié)構(gòu)示意圖。
【具體實施方式】
[0048]為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0049]本發(fā)明實施例提供的程序的線程關(guān)系確定方法具體可以應(yīng)用于多核處理器運行至少一個進程時,操作系統(tǒng)對同一個進程的多個軟件線程的調(diào)度所引起的序關(guān)系的記錄。程序的線程關(guān)系確定方法具體可以通過運行時管理軟件與程序的線程關(guān)系確定的硬件設(shè)備協(xié)同完成,并將操作系統(tǒng)對同一個進程的多個軟件線程的調(diào)度所引起的“happen-before”關(guān)系進行記錄,以在程序員后續(xù)的調(diào)試過程中進行重放,并保證程序的執(zhí)行序遵照原始的執(zhí)行。以下以多核處理器為例,對本實施例提供的程序的線程關(guān)系確定方法及其設(shè)備進行詳細地說明。
[0050]圖1為本發(fā)明程序的線程關(guān)系確定方法實施例一的流程圖,如圖1所示,本實施例提供的發(fā)明程序的線程關(guān)系確定方法具體包括如下步驟:
[0051]S11、檢測系統(tǒng)中的第一處理器執(zhí)行的目標(biāo)并行程序中的第一線程遷移至第二處理器,遷移到第二處理器后的第一線程作為第二線程;
[0052]本實施例的系統(tǒng)為多核處理器與運行時管理軟件協(xié)同工作的軟件系統(tǒng),本步驟的執(zhí)行主體是線程調(diào)度相關(guān)寄存器,多核處理器是在一枚處理器中集成兩個或多個完整的計算引擎(內(nèi)核),即該多核處理器包括有多個獨立的處理器,并且每個獨立的處理器由一組硬件設(shè)備組成。也就是說,N核處理器可以包括相互獨立的第一處理器、第二處理器、第三處理器、直到第N處理器,其中,N為大于I的正整數(shù)。
[0053]運行時管理軟件通過對來自系統(tǒng)的應(yīng)用程序進行過濾,以獲取關(guān)注的用戶態(tài)程序,本實施例中運行時管理軟件可以獲取多核處理器的第一處理器正在執(zhí)行的目標(biāo)并行程序中的第一線程,其中,目標(biāo)并行程序是本實施例所關(guān)注的用戶并行進程,通常進程可以分為系統(tǒng)進程和用戶進程,系統(tǒng)進程是用于完成操作系統(tǒng)的各種功能的進程,也就是處于運行狀態(tài)下的操作系統(tǒng)本身;用戶進程是由用戶啟動的進程。操作系統(tǒng)中,進程又被細化為線程,即一個進程下有多個能獨立運行的更小的單位。也就是說,運行時管理軟件獲取到系統(tǒng)的目標(biāo)并行程序是用戶啟動的進程,并且該進程包括有多個并行線程。
[0054]本實施例中的第一線程是軟件線程,線程調(diào)度相關(guān)寄存器可以判斷正在第一處理上執(zhí)行的該程序中的第一線程是否掛起,在確定第一線程掛起后,其他線程可以執(zhí)行在第一處理上,其中,其它線程可以是該程序中的其它線程,也可以是其它程序中的線程。當(dāng)?shù)谝痪€程被切換回執(zhí)行態(tài)時,判斷正在執(zhí)行第一線程的處理器與掛起前執(zhí)行第一線程的處理器是否相同,如果不同,則確定第一線程發(fā)生遷移,并將正在執(zhí)行第一線程的本地處理器確定為第二處理器,同時將遷移到第二處理器后的第一軟件線程作為第二軟件線程。在第一線程發(fā)生遷移至第二處理器后,可能產(chǎn)生處理器之間的訪存一致性沖突,本實施例中的訪存是指訪問內(nèi)存地址,因而需要記錄第一線程和第二線程之間的序關(guān)系,即向第一處理器的前驅(qū)后繼寄存器發(fā)送強制建立“happen-before”關(guān)系的請求,并強制建立序關(guān)系;如果相同,則不發(fā)送強制建立“happen-before”關(guān)系的請求,并繼續(xù)執(zhí)行第一線程的操作。
[0055]S12、確定第一線程和第二線程之間的序關(guān)系。
[0056]前驅(qū)后繼寄存器可以確定第一線程和第二線程之間的序關(guān)系,具體來講,在第一線程發(fā)生遷移至第二處理器后,可能產(chǎn)生處理器之間的訪存一致性沖突,因此第二處理器會向第一處理器的日志產(chǎn)生模塊發(fā)送強制建立“happen-before”關(guān)系的請求,于是在第一處理器的后繼集合中第二處理器對應(yīng)的位置寫入1,同時第一處理器向第二處理器發(fā)送緩存一致性應(yīng)答消息;在第二處理器接收到第一處理器的緩存一致性應(yīng)答消息后,在第二處理器的前驅(qū)集合中的第一處理器對應(yīng)的位置寫入1,如此建立第一線程和第二線程之間“happen-before”的序關(guān)系。同時可以將第一線程和第二線程之間“happen-before”的序關(guān)系存儲在硬件的日志目錄壓縮表中,也可以存儲在軟件的數(shù)據(jù)庫中,以方便程序員后續(xù)的調(diào)試過程中進行對該記錄進行重放,并保證程序的執(zhí)行序關(guān)系遵照原始的序關(guān)系執(zhí)行。
[0057]本實施例,通過線程調(diào)度相關(guān)寄存器檢測系統(tǒng)中的第一處理器執(zhí)行的目標(biāo)并行程序中的第一線程遷移至第二處理器,再由前驅(qū)后繼寄存器確定第一線程和第二線程之間的序關(guān)系,從而實現(xiàn)對操作系統(tǒng)調(diào)度而引起的同一軟件線程在不同處理器上遷移的確認,進而可以確定線程遷移前后的序關(guān)系,并減少并行程序調(diào)試中訪存沖突的幾率,提高了并行程序調(diào)試的準確性。
[0058]下面采用幾個具體的實施例,對圖1所示方法實施例的技術(shù)方案進行詳細說明。
[0059]圖2為本發(fā)明程序的線程關(guān)系確定方法實施例二的流程圖,如圖2所示,在圖1所示實施例的基礎(chǔ)上,本實施例提供了檢測系統(tǒng)中的第一處理器執(zhí)行的目標(biāo)并行程序中的第一線程遷移至第二處理器的一種可行實施方式,具體包括:
[0060]S111、檢測第一線程發(fā)生掛起;
[0061]具體的,線程調(diào)度相關(guān)寄存器可以判斷正在執(zhí)行的該程序中的第一線程是否掛起,舉例來說,目前商業(yè)處理器提供的軟件線程號寄存器可以判斷軟件線程是否掛起。
[0062]S112、記錄第一處理器的處理器標(biāo)識;
[0063]當(dāng)線程掛起時,運行時管理軟件清空前驅(qū)后繼寄存器與訪存地址蹤跡寄存器的信息,并將該些信息存入日志壓縮目錄表,同時將該處理器的處理器標(biāo)示寫入軟件線程的控制塊中,也就是說,可以在由內(nèi)核支持的用戶線程的輕量級進程軟件數(shù)據(jù)結(jié)構(gòu)中增加的一個域中寫入該處理器的處理器標(biāo)識,該標(biāo)識可以是處理器號,并進行記錄與存儲。
[0064]S113、當(dāng)?shù)谝痪€程重新執(zhí)行時,判斷第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行第一線程的處理器的處理器標(biāo)識是否一致,若不一致,則確定當(dāng)前執(zhí)行第一線程的處理器為第二處理器。
[0065]當(dāng)?shù)谝痪€程重新執(zhí)行時,將軟件線程的控制塊中保存的掛起時寫入在線程調(diào)度相關(guān)寄存器中的第一處理器的處理器標(biāo)識與當(dāng)前正在執(zhí)行切回的第一線程的本地處理器的處理器標(biāo)識進行比較,如果不一致,則確定第一線程發(fā)生遷移,并將當(dāng)前執(zhí)行第一線程的本地處理器確定為第二處理器。如果一致,則確定第一線程沒有發(fā)生遷移,從而繼續(xù)當(dāng)前第一線程的操作。
[0066]本實施例,通過在檢測到第一線程掛起后記錄下第一處理器的處理器標(biāo)示,并在第一線程重新執(zhí)行時,確定第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行第一線程的處理器的處理器標(biāo)識不一致,并確定第一線程發(fā)生遷移,從而實現(xiàn)因操作系統(tǒng)調(diào)度而引起的同一軟件線程在不同處理器上遷移的確認,進而可以有效的避免因線程引起的訪問內(nèi)存地址的沖突。
[0067]圖3為本發(fā)明程序的線程關(guān)系確定方法實施例的線程與處理單元映射關(guān)系示意圖。如圖3所示,多核處理器可以包括相互獨立的處理器O、處理器1、處理器2、處理器3,在處理器0上執(zhí)行的指令塊可以包括在處理器0上執(zhí)行的線程a、在處理器I上執(zhí)行的線程b、在處理器2上執(zhí)行的線程c和在處理器3上執(zhí)行的線程d,在線程調(diào)度相關(guān)寄存器判斷正在執(zhí)行的線程b掛起時,運行時管理軟件清空前驅(qū)后繼寄存器與訪存地址蹤跡寄存器的信息,并將該些信息存入日志壓縮目錄表中。當(dāng)線程e遷移到處理器I上執(zhí)行時,同樣記錄線程與處理器之間的映射關(guān)系,和處理單元之間的序關(guān)系。因此本發(fā)明可以同時記錄下了不同階段,處理單元與活動線程之間的關(guān)系。
[0068]在一種實施場景下,檢測系統(tǒng)中的第一處理器執(zhí)行的目標(biāo)并行程序中的第一線程遷移至第二處理器,遷移到第二處理器后的第一線程作為第二線程之后,還可以具體包括下述操作:
[0069]記錄第一線程和第二線程之間的序關(guān)系。
[0070]具體的,在線程調(diào)度相關(guān)寄存器檢測到第一處理器執(zhí)行的第一線程遷移至第二處理器作為第二線程之后,可能在多核處理器內(nèi)的多個處理器訪問的內(nèi)存地址上產(chǎn)生沖突。第二處理器可以向第一處理器的日志產(chǎn)生模塊發(fā)送強制建立“happen-before”關(guān)系的請求,在第一處理器的后繼集合中第二處理器對應(yīng)的位置可以寫入1,即記錄第一線程與第一處理器的映射關(guān)系,同時第一處理器可以向第二處理器發(fā)送緩存一致性應(yīng)答消息;在第二處理器接收到第一處理器的緩存一致性應(yīng)答消息后,可以在第二處理器的前驅(qū)集合中的第一處理器對應(yīng)的位置寫入1,即記錄第二線程與第二處理器的映射關(guān)系;接著第二處理器的日志產(chǎn)生模塊根據(jù)接收到的強制建立“happen-before”關(guān)系的請求信息,確定第二處理上執(zhí)行的第二線程可能會產(chǎn)生訪問內(nèi)存地址的沖突,進而將前驅(qū)后繼寄存器中的記錄經(jīng)過日志目錄壓縮表壓縮后記錄在設(shè)置在外部的日志中,即在日志中記錄第一線程和第二線程之間的序關(guān)系。
[0071]本實施里的前驅(qū)后繼寄存器可以是多項的數(shù)據(jù)結(jié)構(gòu),包括N個前驅(qū)寄存器與N個后繼寄存器,N為獨立處理單元個數(shù),N為大于I的正整數(shù),前驅(qū)后繼寄存器可以存儲最近使用的N個值,每一項可以對應(yīng)多核處理器內(nèi)的一個處理器,并可以采用不頻繁使用項替換算法對所存儲的值進行替換,本實施例不限于該算法對前驅(qū)后繼寄存器存儲的值進行替換。
[0072]在將前驅(qū)后繼寄存器中的記錄存儲到日志之前,可以利用前驅(qū)寄存器組的值、后繼寄存器的值或是前驅(qū)后繼寄存器的值在日志壓縮目錄表中查找,該日志壓縮目錄表記錄有本次需要記錄到日志之前一段時間的前驅(qū)后繼寄存器的值。如果查找到在日志壓縮目錄表中的值與準備存儲到外部日志的值相同,則在外部日志中存儲日志壓縮目錄表的索引,同時更新該日志壓縮目錄表;如果沒有查找到,則存入完整的前驅(qū)后繼寄存器的值在外部日志,并更新該日志壓縮目錄表。
[0073]圖4為本發(fā)明程序的線程關(guān)系確定方法的日志保存序關(guān)系的數(shù)據(jù)格式示意圖。如圖4所不,在日志中記錄的序關(guān)系項,具體可以包括:最聞位(bit25)為該記錄的映射關(guān)系的類型,映射關(guān)系的類型是序關(guān)系項時,設(shè)置為I ;與最高位相鄰的次高位(bit24)為前驅(qū)寄存器是否在壓縮目錄表中命中,與次高位相鄰的一位(bit23)為后繼寄存器是否在壓縮目錄表中命中;bit22至bit8的位置可以記錄邏輯時間;bit7至bit4的位置可以記錄前驅(qū)關(guān)系,最后的4為,bit3至bitO的位置可以記錄后繼關(guān)系,其中,前驅(qū)關(guān)系或者后繼關(guān)系保存在目錄表中的索引,如果命中則設(shè)置為1,否則設(shè)置為O ;前驅(qū)關(guān)系或者后繼關(guān)系保存完整的內(nèi)容。
[0074]本實施例,通過對第一處理器上執(zhí)行的第一線程遷移至第二處理器上作為第二線程的線程之間的序關(guān)系的記錄,實現(xiàn)了對線程的遷移的記錄,進而可以減少并行程序調(diào)試中訪存沖突的幾率,進一步的提高了并行程序調(diào)試的準確性。
[0075]在另一種實施場景下,檢測第一線程發(fā)生掛起之后,還可以具體包括下述操作:
[0076]記錄第一線程與第一處理器的映射關(guān)系。
[0077]記錄第一線程的序關(guān)系;
[0078]具體的,當(dāng)線程調(diào)度相關(guān)寄存器檢測到第一處理器上的第一線程發(fā)生掛起之后,可能會在重新執(zhí)行第一線程時在多核處理器內(nèi)的多個處理器訪問的內(nèi)存地址上產(chǎn)生沖突。日志產(chǎn)生模塊可以記錄第一線程與第一處理器的映射關(guān)系,在日志產(chǎn)生模塊記錄第一線程與第一處理器的映射關(guān)系后,日志產(chǎn)生模塊可以將該些記錄存儲日志中。圖5為本發(fā)明程序的線程關(guān)系確定方法的線程與處理器映射關(guān)系的格式示意圖。如圖5所示,記錄在日志中的線程與處理器映射關(guān)系項的結(jié)構(gòu)具體為,最高位表示該日志項的類型,當(dāng)是線程與處理單元映射關(guān)系項時設(shè)置為0,后續(xù)多位,保存線程號,本發(fā)明中為了減少同步開銷,使用了分布式的線程與處理器映射關(guān)系表,當(dāng)同一處理器發(fā)生同進程的不同線程的切換時,將線程與處理器映射關(guān)系表保存在日志中,在重放時,可以根據(jù)日志中記錄的第一線程與第一處理器的映射關(guān)系及序關(guān)系重構(gòu)全局映射關(guān)系表。
[0079]運行時管理軟件通過日志壓縮目錄表將前驅(qū)后繼寄存器中記錄的第一線程的序關(guān)系壓縮在日志中,將前驅(qū)后繼寄存器中記錄的值以序關(guān)系項的方式記錄,具體結(jié)構(gòu)與上述實施例中說明的相同,在此不再贅述。
[0080]在另一種實施場景下,檢測第一線程發(fā)生掛起之后,還可以具體包括下述操作:
[0081]確定第一線程與至少一個第三線程的序關(guān)系,第三線程為目標(biāo)并行程序中除第一線程之外在第一處理器上執(zhí)行的線程。
[0082]具體的,線程調(diào)度相關(guān)寄存器檢測到在第一處理器上的第一線程發(fā)生掛起,同時檢測到在第一處理器上開始執(zhí)行第三線程,其中,第三線程與第一線程可以是同一目標(biāo)并行程序中的不同線程,也可以是其它進程中線程。
[0083]相應(yīng)的,在本實施例中,檢測第一線程發(fā)生掛起之后,還可以具體包括:
[0084]記錄第一線程的序關(guān)系;
[0085]記錄第一線程與第一處理器的映射關(guān)系。
[0086]本實施例中,在記錄第一線程與第一處理器的映射關(guān)系之前,可以先確定第一線程的序關(guān)系及記錄第一線程與第一處理器的映射關(guān)系。確定方式和記錄方式及在日志中存儲的結(jié)構(gòu)與上述實施例中說明的相同,在此不再贅述。同樣的,在第一處理器上開始執(zhí)行的第三線程,如果第三線程在第一處理器上發(fā)生遷移,可以與上述實施例相同的方法進行確定與記錄第三線程的序關(guān)系,如果第三線程在第一處理器上發(fā)生掛起,可以與上述實施例相同的方法進行確定與記錄第三線程的序關(guān)系及第三線程與第一處理器及遷移到的第二處理器的映射關(guān)系。[0087]在又一個實施場景下,檢測系統(tǒng)中的第一處理器執(zhí)行的目標(biāo)并行程序中的第一線程遷移至第二處理器之前,還可以具體包括下述操作:
[0088]判斷第一處理器執(zhí)行的并行程序的頁表基址與設(shè)定的頁表基址是否相同,若相同,則將并行程序作為目標(biāo)程序。
[0089]具體的,訪存地址蹤跡寄存器判斷第一處理器執(zhí)行的并行程序的頁表基址與設(shè)定的頁表基址是否相同,每個處理器中有一個訪存地址蹤跡寄存器,并設(shè)置在CPU內(nèi)部,其中,運行時管理軟件將需要關(guān)注的并行程序的頁表基址寫入并行程序頁表基址寄存器中,當(dāng)運行時管理軟件檢查到指令流水線中的指令提交時,訪存地址蹤跡寄存器對并行程序頁表基址寄存器中的頁表地址與多核處理器自身具有的頁表基址寄存器的頁表基址進行判斷,若頁表基址相同,則將并行程序頁表基址寄存器的頁表基址寫入訪存地址蹤跡寄存器中,若頁表基址相同,則不將該頁表基址寫入在訪存地址蹤跡寄存器中,從而過濾掉與訪存沖突無關(guān)的頁表基址。
[0090]本實施例通過訪存地址蹤跡寄存器判斷第一處理器執(zhí)行的并行程序的頁表基址與設(shè)定的頁表基址是否相同,并將相同的頁表基址則的并行程序作為目標(biāo)程序,從而可以利用硬件記錄的需要關(guān)注的用戶態(tài)并行程序,過濾掉系統(tǒng)態(tài)與其它并行程序的無用信息。進而大大的節(jié)省了日志開銷,并減小對并行程序運行時性能的影響。
[0091]圖6為本發(fā)明程序的線程關(guān)系確定方法實施例三的流程圖。如圖6所示,本實施例還可以具體包括:
[0092]S131、從第一處理器獲取目標(biāo)并行程序的指令;
[0093]S132、接收系統(tǒng)中的第三處理器發(fā)送的緩存一致性消息,緩存一致性消息中攜帶第三處理器訪問的內(nèi)存地址;
[0094]S133、判斷內(nèi)存地址與指令所使用的數(shù)據(jù)地址是否相同,若相同,則確定指令對應(yīng)的線程與緩存一致性消息對應(yīng)的線程的序關(guān)系。
[0095]具體的,第一處理器的日志產(chǎn)生模塊接收到第三處理器發(fā)送的緩存一致性消息,該緩存一致性消息可以是訪存地址蹤跡寄存器與緩存一致性協(xié)議協(xié)同捕獲的,一致性協(xié)議主要有總線的偵聽協(xié)議和基于目錄的目錄協(xié)議,該消息可以是數(shù)據(jù)請求消息或是數(shù)據(jù)無效消息,其中,數(shù)據(jù)請求消息是用以多核處理器的不同處理器之間的請求數(shù)據(jù)一致的消息,數(shù)據(jù)無效消息用以請求無效掉其他處理器的數(shù)據(jù)。日志產(chǎn)生模塊從緩存一致性消息中獲得發(fā)送該緩存一致性消息的處理器信息,即第三處理器,并在第一處理器的前驅(qū)后繼寄存器和第二處理器的前驅(qū)后繼寄存器中分別記錄第三處理器與第一處理器的“happen-before”關(guān)系。
[0096]硬件設(shè)備中的日志產(chǎn)生模塊根據(jù)緩存一致性消息獲得第三處理器訪問的內(nèi)存地址,并將該訪問的內(nèi)存地址與訪存地址蹤跡寄存器中記錄訪問的內(nèi)存地址進行比較,如果訪問的內(nèi)存地址相同,則確定訪問內(nèi)存地址會產(chǎn)生沖突,日志產(chǎn)生模塊將前驅(qū)后繼寄存器和指令數(shù)寄存器的記錄通過日志壓縮目錄表壓縮到日志中,并以指令對應(yīng)的線程與緩存一致性消息對應(yīng)的線程的序關(guān)系的形式存儲。運行時管理軟件清空指令數(shù)寄存器、前驅(qū)后繼寄存器與訪存地址蹤跡寄存器的記錄,并向第三處理器回復(fù)一致性消息。如果訪問的內(nèi)存地址相同,則確定訪問內(nèi)存地址不會產(chǎn)生沖突,可以繼續(xù)當(dāng)前的操作,不做任何情況或是壓縮到日志的操作。[0097]相應(yīng)的,本實施例中,程序的線程關(guān)系確定的方法還可以包括:
[0098]記錄指令對應(yīng)的線程與第一處理器的映射關(guān)系及指令對應(yīng)的線程的序關(guān)系。
[0099]具體的,硬件的訪存地址蹤跡寄存器可以根據(jù)緩存一致性協(xié)議獲取可能產(chǎn)生沖突的情況,第一處理器的日志產(chǎn)生模塊接收到第三處理器的緩存一致性消息后,在第一處理器的后繼集合中第三處理器對應(yīng)的位置寫入1,即記錄指令對應(yīng)的線程與第三處理器的映射關(guān)系,同時第一處理器向第三處理器發(fā)送緩存一致性應(yīng)答消息;在第三處理器接收到第一處理器的緩存一致性應(yīng)答消息后,在第三處理器的前驅(qū)集合中的第一處理器對應(yīng)的位置寫入1,即指令對應(yīng)的線程與第一處理器的映射關(guān)系;確定第一處理上執(zhí)行的指令對應(yīng)的線程會產(chǎn)生訪問內(nèi)存地址的沖突,進而將第一處理器和第二處理器上的前驅(qū)后繼寄存器中的記錄經(jīng)過日志目錄壓縮表壓縮后記錄在設(shè)置在外部的日志中,即在日志中記錄指令對應(yīng)的線程與第一處理器的映射關(guān)系和指令對應(yīng)的線程與第三處理器的映射關(guān)系。
[0100]圖7為本發(fā)明程序的線程關(guān)系確定設(shè)備實施例一的結(jié)構(gòu)示意圖。如圖7所示,程序的線程關(guān)系確定設(shè)備包括:
[0101]檢測模塊61,用于檢測系統(tǒng)中的第一處理器執(zhí)行的目標(biāo)并行程序中的第一線程遷移至第二處理器,遷移到第二處理器后的第一線程作為第二線程;
[0102]確定模塊62,用于確定第一線程和第二線程之間的序關(guān)系。
[0103]本實施例的程序的線程關(guān)系確定設(shè)備,可以用于執(zhí)行圖1所示方法實施例的技術(shù)方案,其實現(xiàn)原理類似,此處不再贅述。
[0104]本實施例提供的程序的線程關(guān)系確定設(shè)備通過檢測模塊和確定模塊的設(shè)置,可以通過檢測模塊檢測系統(tǒng)中的第一處理器執(zhí)行的目標(biāo)并行程序中的第一線程遷移至第二處理器,再由確定模塊確定第一線程和第二線程之間的序關(guān)系,從而實現(xiàn)對操作系統(tǒng)調(diào)度而引起的同一軟件線程在不同處理器上遷移的確認,進而可以確定線程遷移前后的序關(guān)系,并提高了并行程序調(diào)試的準確性。
[0105]圖8為本發(fā)明程序的線程關(guān)系確定設(shè)備實施例二的結(jié)構(gòu)示意圖。如圖8所示,在圖7所示實施例的基礎(chǔ)上,本實施例的檢測模塊61,可以包括:
[0106]檢測單元611,用于檢測第一線程發(fā)生掛起;
[0107]軟件線程控制單元612,用于記錄第一處理器的處理器標(biāo)識;
[0108]判斷單元613,用于當(dāng)?shù)谝痪€程重新執(zhí)行時,判斷第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行第一線程的處理器的處理器標(biāo)識是否一致,若不一致,則確定當(dāng)前執(zhí)行第一線程的處理器為第二處理器。
[0109]本實施例的程序的線程關(guān)系確定設(shè)備,可以用于執(zhí)行圖2所示方法實施例的技術(shù)方案,其實現(xiàn)原理類似,此處不再贅述。
[0110]本實施例提供的程序的線程關(guān)系確定設(shè)備通過檢測單元、軟件線程控制單元和判斷單元的設(shè)置,可以通過在檢測到第一線程掛起后記錄下第一處理器的處理器標(biāo)示,并在第一線程重新執(zhí)行時,確定第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行第一線程的處理器的處理器標(biāo)識不一致,從而確定第一線程發(fā)生遷移,從而實現(xiàn)因操作系統(tǒng)調(diào)度而引起的同一軟件線程在不同處理器上遷移的確認,進而可以有效的避免因線程引起的訪問內(nèi)存地址的沖關(guān)。
[0111]圖9為本發(fā)明程序的線程關(guān)系確定設(shè)備實施例三的結(jié)構(gòu)示意圖。如圖9所示,在圖8所示實施例的基礎(chǔ)上,本實施例還可以包括:
[0112]日志產(chǎn)生模塊63,記錄第一線程和第二線程之間的序關(guān)系。
[0113]進一步的,日志產(chǎn)生模塊63,還可以具體用于確定第一線程與至少一個第三線程的序關(guān)系,第三線程為目標(biāo)并行程序中除第一線程之外在第一處理器上執(zhí)行的線程。
[0114]進一步的,日志產(chǎn)生模塊63,還可以包括:用于記錄第三線程與第一處理器的映身寸關(guān)系。
[0115]本實施例的程序的線程關(guān)系確定設(shè)備,可以用于執(zhí)行上述方法實施例的技術(shù)方案,其實現(xiàn)原理類似,此處不再贅述。
[0116]圖10為本發(fā)明程序的線程關(guān)系確定設(shè)備實施例四的結(jié)構(gòu)示意圖。如圖10所示,本實施例還可以包括:
[0117]判斷模塊64,用于判斷第一處理器執(zhí)行的并行程序的頁表基址與設(shè)定的頁表基址是否相同,若相同,則將并行程序作為目標(biāo)程序。
[0118]本實施例的程序的線程關(guān)系確定設(shè)備,可以用于執(zhí)行上述方法實施例的技術(shù)方案,其實現(xiàn)原理類似,此處不再贅述。
[0119]本實施例通過訪存地址蹤跡寄存器判斷第一處理器執(zhí)行的并行程序的頁表基址與設(shè)定的頁表基址是否相同,并將相同的頁表基址則的并行程序作為目標(biāo)程序,從而可以利用硬件記錄的需要關(guān)注的用戶態(tài)并行程序,過濾掉系統(tǒng)態(tài)與其它并行程序的無用信息。進而大大的節(jié)省了日志開銷,并減小對并行程序運行時性能的影響。
[0120]圖11為本發(fā)明程序的線程關(guān)系確定設(shè)備實施例五的結(jié)構(gòu)示意圖。如圖11所示,本實施例還可以包括:
[0121]獲取模塊71,用于從第一處理器獲取目標(biāo)并行程序的指令;
[0122]接收模塊72,用于接收系統(tǒng)中的第三處理器發(fā)送的緩存一致性消息,緩存一致性消息中攜帶第三處理器訪問的內(nèi)存地址;
[0123]第二判斷模塊73,用于判斷內(nèi)存地址與指令所使用的數(shù)據(jù)地址是否相同,若相同,則確定指令對應(yīng)的線程與緩存一致性消息對應(yīng)的線程的序關(guān)系。
[0124]進一步的,該設(shè)備還可以包括:
[0125]日志產(chǎn)生模塊63,還用于記錄所述指令對應(yīng)的線程與所述第一處理器的映射關(guān)系及所述指令對應(yīng)的線程的序關(guān)系。
[0126]本實施例的程序的線程關(guān)系確定設(shè)備,可以用于執(zhí)行上述方法實施例的技術(shù)方案,其實現(xiàn)原理與效果類似,此處不再贅述。
[0127]本實施例的基于程序的線程關(guān)系確定設(shè)備的系統(tǒng),具體可以包括:如上述實施例所述的基于程序的線程關(guān)系確定設(shè)備??梢杂糜趫?zhí)行上述方法實施例的技術(shù)方案,其實現(xiàn)原理類似,此處不再贅述。
[0128]本實施例,通過線程調(diào)度相關(guān)寄存器檢測系統(tǒng)中的第一處理器執(zhí)行的目標(biāo)并行程序中的第一線程遷移至第二處理器,再由前驅(qū)后繼寄存器確定第一線程和第二線程之間的序關(guān)系,從而實現(xiàn)對因操作系統(tǒng)調(diào)度而引起的同一軟件線程在不同處理器上遷移的確認,同時對線程遷移前后的序關(guān)系進行存儲后,進而提高了并行程序調(diào)試的準確性。
[0129]圖12為本發(fā)明的程序的線程關(guān)系確定設(shè)備的實施例六的結(jié)構(gòu)示意圖,如圖12所示,本實施例的程序的線程關(guān)系確定設(shè)備包括至少一個CPU1101,至少一個網(wǎng)絡(luò)接口 1104或者其他用戶接口 1103,存儲器1105,和至少一通信總線1102。通信總線1102用于實現(xiàn)各裝置之間的連接通信。該程序的線程關(guān)系確定設(shè)備可選的包含用戶接口 1103,包括顯示器,鍵盤或者點擊設(shè)備。存儲器1105可能包含高速RAM存儲器,也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。存儲器1105可選的可以包含至少一個位于遠離前述CPU1101的存儲裝置。在一些實施方式中,存儲器1105存儲了如下的元素,編碼,模塊或者數(shù)據(jù)結(jié)構(gòu),或者他們的子集,或者他們的擴展集:
[0130]操作系統(tǒng)1106,包含各種程序,用于實現(xiàn)各種基礎(chǔ)業(yè)務(wù)以及處理基于硬件的任務(wù);
[0131]線程調(diào)度相關(guān)寄存器1161,用于檢測系統(tǒng)中的第一處理器執(zhí)行的目標(biāo)并行程序中的第一線程遷移至第二處理器,遷移到第二處理器后的第一線程作為第二線程;
[0132]前驅(qū)后繼寄存器1162,用于確定第一線程和第二線程之間的序關(guān)系。
[0133]本實施例的程序的線程關(guān)系確定設(shè)備,可以用于執(zhí)行圖1所示方法實施例的技術(shù)方案,其實現(xiàn)原理類似,此處不再贅述。
[0134]本實施例提供的程序的線程關(guān)系確定設(shè)備通過線程調(diào)度相關(guān)寄存器和前驅(qū)后繼寄存器的設(shè)置,可以通過線程調(diào)度相關(guān)寄存器檢測系統(tǒng)中的第一處理器執(zhí)行的目標(biāo)并行程序中的第一線程遷移至第二處理器,再由前驅(qū)后繼寄存器確定第一線程和第二線程之間的序關(guān)系,從而實現(xiàn)對操作系統(tǒng)調(diào)度而引起的同一軟件線程在不同處理器上遷移的確認,進而可以確定線程遷移前后的序關(guān)系,并提高了并行程序調(diào)試的準確性。
[0135]圖13為本發(fā)明的程序的線程關(guān)系確定設(shè)備的實施例七的結(jié)構(gòu)示意圖。如圖13所示,本實施例的程序的線程關(guān)系確定設(shè)備包括至少一個CPU1101,至少一個網(wǎng)絡(luò)接口 1104或者其他用戶接口 1103,存儲器1105,和至少一通信總線1102。通信總線1102用于實現(xiàn)各裝置之間的連接通信。該程序的線程關(guān)系確定設(shè)備可選的包含用戶接口 1103,包括顯示器,鍵盤或者點擊設(shè)備。存儲器1105可能包含高速RAM存儲器,也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。存儲器1105可選的可以包含至少一個位于遠離前述CPU1101的存儲裝置。在一些實施方式中,存儲器1105存儲了如下的元素,編碼,模塊或者數(shù)據(jù)結(jié)構(gòu),或者他們的子集,或者他們的擴展集:
[0136]操作系統(tǒng)1106,包含各種程序,用于實現(xiàn)各種基礎(chǔ)業(yè)務(wù)以及處理基于硬件的任務(wù);
[0137]檢測器12611,用于檢測第一線程發(fā)生掛起;
[0138]軟件線程控制器12612,用于記錄第一處理器的處理器標(biāo)識;
[0139]判斷器12613,用于當(dāng)?shù)谝痪€程重新執(zhí)行時,判斷第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行第一線程的處理器的處理器標(biāo)識是否一致,若不一致,則確定當(dāng)前執(zhí)行第一線程的處理器為第二處理器。
[0140]前驅(qū)后繼寄存器1162,用于確定第一線程和第二線程之間的序關(guān)系。
[0141]日志產(chǎn)生器1263,記錄所述第一線程和所述第二線程之間的序關(guān)系。
[0142]進一步的,日志產(chǎn)生器1263,還可以具體用于確定第一線程與至少一個第三線程的序關(guān)系,第三線程為目標(biāo)并行程序中除第一線程之外在第一處理器上執(zhí)行的線程。
[0143]進一步的,日志產(chǎn)生器1263,還可以包括:用于記錄第三線程與第一處理器的映射關(guān)系。[0144]本實施例的程序的線程關(guān)系確定設(shè)備,可以用于執(zhí)行圖2所示方法實施例的技術(shù)方案,其實現(xiàn)原理類似,此處不再贅述。
[0145]本實施例提供的程序的線程關(guān)系確定設(shè)備通過檢測單元、軟件線程控制單元和判斷單元的設(shè)置,可以通過在檢測到第一線程掛起后記錄下第一處理器的處理器標(biāo)示,并在第一線程重新執(zhí)行時,確定第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行第一線程的處理器的處理器標(biāo)識不一致,從而確定第一線程發(fā)生遷移,從而實現(xiàn)因操作系統(tǒng)調(diào)度而引起的同一軟件線程在不同處理器上遷移的確認,進而可以有效的避免因線程引起的訪問內(nèi)存地址的沖關(guān)。
[0146]圖14為本發(fā)明的程序的線程關(guān)系確定設(shè)備的實施例八的結(jié)構(gòu)示意圖。如圖14所示,本實施例的程序的線程關(guān)系確定設(shè)備包括至少一個CPU1101,至少一個網(wǎng)絡(luò)接口 1104或者其他用戶接口 1103,存儲器1105,和至少一通信總線1102。通信總線1102用于實現(xiàn)各裝置之間的連接通信。該程序的線程關(guān)系確定設(shè)備可選的包含用戶接口 1103,包括顯示器,鍵盤或者點擊設(shè)備。存儲器1105可能包含高速RAM存儲器,也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。存儲器1105可選的可以包含至少一個位于遠離前述CPU1101的存儲裝置。在一些實施方式中,存儲器1105存儲了如下的元素,編碼,模塊或者數(shù)據(jù)結(jié)構(gòu),或者他們的子集,或者他們的擴展集:
[0147]操作系統(tǒng)1106,包含各種程序,用于實現(xiàn)各種基礎(chǔ)業(yè)務(wù)以及處理基于硬件的任務(wù);
[0148]獲取器1371,用于從第一處理器獲取所述目標(biāo)并行程序的指令;
[0149]接收器1372,用于接收系統(tǒng)中的第三處理器發(fā)送的緩存一致性消息,所述緩存一致性消息中攜帶第三處理器訪問的內(nèi)存地址;
[0150]第二判斷器1373,用于判斷內(nèi)存地址與指令所使用的數(shù)據(jù)地址是否相同,若相同,則確定指令對應(yīng)的線程與緩存一致性消息對應(yīng)的線程的序關(guān)系。
[0151]日志產(chǎn)生器1263,用于記錄記錄指令對應(yīng)的線程與述第一處理器的映射關(guān)系及指令對應(yīng)的線程的序關(guān)系。
[0152]本實施例的程序的線程關(guān)系確定設(shè)備,可以用于執(zhí)行上述方法實施例的技術(shù)方案,其實現(xiàn)原理類似,此處不再贅述。
[0153]本實施例的網(wǎng)絡(luò)設(shè)備的系統(tǒng),具體可以包括:多個處理器和至少如上述實施例所述基于程序的線程關(guān)系確定設(shè)備。可以用于執(zhí)行上述方法實施例的技術(shù)方案,其實現(xiàn)原理類似,此處不再贅述。
[0154]本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0155]最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分或者全部技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。
【權(quán)利要求】
1.一種程序的線程關(guān)系確定方法,其特征在于,包括: 檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移,第一線程為第一處理器執(zhí)行的目標(biāo)并行程序中的一個線程,遷移到所述第二處理器后的第一線程作為第二線程; 確定所述第一線程和所述第二線程之間的序關(guān)系。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移,包括: 檢測所述第一線程發(fā)生掛起; 記錄所述第一處理器的處理器標(biāo)識; 當(dāng)所述第一線程重新執(zhí)行時,判斷所述第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行所述第一線程的處理器的處理器標(biāo)識是否一致,若不一致,則確定第一線程發(fā)生遷移,且當(dāng)前執(zhí)行所述第一線程的處理 器為所述第二處理器。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移之后,還包括: 記錄所述第一線程和所述第二線程之間的序關(guān)系。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述檢測所述第一線程發(fā)生掛起之后,還包括: 確定所述第一線程與至少一個第三線程的序關(guān)系,所述第三線程為所述目標(biāo)并行程序中除所述第一線程之外在所述第一處理器上執(zhí)行的線程。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述檢測所述第一線程發(fā)生掛起之后,還包括: 記錄所述第一線程的序關(guān)系; 記錄所述第一線程與所述第一處理器的映射關(guān)系。
6.根據(jù)權(quán)利要求1-5任一項所述的方法,其特征在于,所述檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移之前,還包括: 判斷所述第一處理器執(zhí)行的并行程序的頁表基址與設(shè)定的頁表基址是否相同,若相同,則將所述并行程序作為所述目標(biāo)程序。
7.根據(jù)權(quán)利要求1-6任一項所述的方法,其特征在于,還包括: 從所述第一處理器獲取所述目標(biāo)并行程序的指令; 接收系統(tǒng)中的第三處理器發(fā)送的緩存一致性消息,所述緩存一致性消息中攜帶所述第三處理器訪問的內(nèi)存地址; 判斷所述內(nèi)存地址與所述指令所使用的數(shù)據(jù)地址是否相同,若相同,則確定所述指令對應(yīng)的線程與所述緩存一致性消息對應(yīng)的線程的序關(guān)系。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,還包括: 記錄所述指令對應(yīng)的線程與所述第一處理器的映射關(guān)系及所述指令對應(yīng)的線程的序關(guān)系。
9.一種程序的線程關(guān)系確定設(shè)備,其特征在于,包括: 檢測模塊,用于檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移,第一線程為第一處理器執(zhí)行的目標(biāo)并行程序中的一個線程,遷移到所述第二處理器后的第一線程作為第二線程; 確定模塊,用于確定所述第一線程和所述第二線程之間的序關(guān)系。
10.根據(jù)權(quán)利要求9所述的設(shè)備,其特征在于,所述檢測模塊,包括: 檢測單元,用于檢測所述第一線程發(fā)生掛起; 軟件線程控制單元,用于記錄所述第一處理器的處理器標(biāo)識; 判斷單元,用于當(dāng)所述第一線程重新執(zhí)行時,判斷所述第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行所述第一線程的處理器的處理器標(biāo)識是否一致,若不一致,則確定當(dāng)前執(zhí)行所述第一線程的處理器為所述第二處理器。
11.根據(jù)權(quán)利要求9或10所述的設(shè)備,其特征在于,還包括: 日志產(chǎn)生模塊,用于記錄所述第一線程和所述第二線程之間的序關(guān)系。
12.根據(jù)權(quán)利要求10所述的設(shè)備,其特征在于,所述日志產(chǎn)生模塊,還用于確定所述第一線程與至少一個第三線程的序關(guān)系,所述第三線程為所述目標(biāo)并行程序中除所述第一線程之外在所述第一處理器上執(zhí)行的線程。
13.根據(jù)權(quán)利要求12所述的設(shè)備,其特征在于,所述日志產(chǎn)生模塊,還用于記錄所述第一線程的序關(guān)系及所述第一線程與所述第一處理器的映射關(guān)系。
14.根據(jù)權(quán)利要求9-13任一項所述的設(shè)備,其特征在于,還包括: 判斷模塊,用于判斷所述第一處理器執(zhí)行的并行程序的頁表基址與設(shè)定的頁表基址是否相同,若相同,則將所述并行程序作為所述目標(biāo)程序。
15.根據(jù)權(quán)利要求9-14任一項所述的設(shè)備,其特征在于,還包括: 獲取模塊,用于從所述第一處理器獲取所述目標(biāo)并行程序的指令; 接收模塊,用于接收系統(tǒng)中的第三處理器發(fā)送的緩存一致性消息,所述緩存一致性消息中攜帶所述第三處理器訪問的內(nèi)存地址; 第二判斷模塊,用于判斷所述內(nèi)存地址與所述指令所使用的數(shù)據(jù)地址是否相同,若相同,則確定所述指令對應(yīng)的線程與所述緩存一致性消息對應(yīng)的線程的序關(guān)系。
16.根據(jù)權(quán)利要求15所述的設(shè)備,其特征在于,所述日志產(chǎn)生模塊,還用于記錄所述指令對應(yīng)的線程與所述第一處理器的映射關(guān)系及所述指令對應(yīng)的線程的序關(guān)系。
17.—種網(wǎng)絡(luò)設(shè)備,其特征在于,包括:多個處理器和至少一個如權(quán)利要求9-16任一所述的基于程序的線程關(guān)系確定設(shè)備。
18.—種程序的線程關(guān)系確定設(shè)備,其特征在于,包括: 線程調(diào)度相關(guān)寄存器,用于檢測系統(tǒng)中的第一線程發(fā)生由第一處理器至第二處理器的遷移,第一線程為第一處理器執(zhí)行的目標(biāo)并行程序中的一個線程,遷移到所述第二處理器后的第一線程作為第二線程; 前驅(qū)后繼寄存器,用于確定所述第一線程和所述第二線程之間的序關(guān)系。
19.根據(jù)權(quán)利要求18所述的設(shè)備,其特征在于,所述線程調(diào)度相關(guān)寄存器,還包括: 檢測器,用于檢測所述第一線程發(fā)生掛起; 軟件線程控制器,用于記錄所述第一處理器的處理器標(biāo)識; 判斷器,用于當(dāng)所述第一線程重新執(zhí)行時,判斷所述第一處理器的處理器標(biāo)識與當(dāng)前執(zhí)行所述第一線程的處理器的處理器標(biāo)識是否一致,若不一致,則確定當(dāng)前執(zhí)行所述第一線程的處理器為所述第二處理器。
20.根據(jù)權(quán)利要求18或19所述的設(shè)備,其特征在于,還包括: 日志產(chǎn)生器,記錄所述第一線程和所述第二線程之間的序關(guān)系。
21.根據(jù)權(quán)利要求20所述的設(shè)備,其特征在于,所述日志產(chǎn)生器,還用于確定所述第一線程與至少一個第三線程的序關(guān)系,所述第三線程為所述目標(biāo)并行程序中除所述第一線程之外在所述第一處理器上執(zhí)行的線程。
22.根據(jù)權(quán)利要求21所述的設(shè)備,其特征在于,所述日志產(chǎn)生器,還用于記錄所述第一線程的序關(guān)系及所述第一線程與所述第一處理器的映射關(guān)系。
23.根據(jù)權(quán)利要求19-22任一項所述的設(shè)備,其特征在于,所述設(shè)備,還包括: 判斷器,用于判斷所述第一處理器執(zhí)行的并行程序的頁表基址與設(shè)定的頁表基址是否相同,若相同,則將所述并行程序作為所述目標(biāo)程序。
24.根據(jù)權(quán)利要求19-23任一項所述的設(shè)備,其特征在于,還包括: 獲取器,用于從所述第一處理器獲取所述目標(biāo)并行程序的指令; 接收器,用于接收系統(tǒng)中的第三處理器發(fā)送的緩存一致性消息,所述緩存一致性消息中攜帶所述第三處理器訪問的內(nèi)存地址; 第二判斷器,用于判斷所述內(nèi)存地址與所述指令所使用的數(shù)據(jù)地址是否相同,若相同,則確定所述指令對應(yīng)的線程與所述緩存一致性消息對應(yīng)的線程的序關(guān)系。
25.根據(jù)權(quán)利要求24所述的設(shè)備,其特征在于,所述日志產(chǎn)生器,還用于。
26.—種網(wǎng)絡(luò)設(shè)備,其特征在于,包括:多個處理器和至少一個如權(quán)利要求18-25任一所述的基于程序的線程關(guān)系確定設(shè)備。
【文檔編號】G06F9/38GK103729166SQ201210382173
【公開日】2014年4月16日 申請日期:2012年10月10日 優(yōu)先權(quán)日:2012年10月10日
【發(fā)明者】唐士斌, 宋風(fēng)龍, 王達, 范東睿 申請人:華為技術(shù)有限公司, 中國科學(xué)院計算技術(shù)研究所