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