1.一種基于訪存依賴對(duì)的并行重放方法,包括:
靜態(tài)掃描原日志文件,并基于拓?fù)鋱D識(shí)別所有訪存依賴對(duì);
根據(jù)所述識(shí)別出的訪存依賴對(duì)的類型,在拓?fù)鋱D中的合適位置添加條件變量集合;
將原日志文件分散為多個(gè)線程獨(dú)立日志文件,當(dāng)并行程序在重放執(zhí)行時(shí),每個(gè)線程各自讀取自己的獨(dú)立日志文件來指導(dǎo)重放。
2.根據(jù)權(quán)利要求1所述的方法,其中對(duì)于某個(gè)內(nèi)存地址,對(duì)所述內(nèi)存地址執(zhí)行連續(xù)兩次不同類型的訪問的兩個(gè)或多個(gè)線程稱為所述訪存依賴對(duì)。
3.根據(jù)權(quán)利要求2所述的方法,所述訪存依賴對(duì)的類型包括:讀后寫類型WAR、寫后讀類型RAW以及寫后寫類型WAW。
4.根據(jù)權(quán)利要求3所述的方法,所述基于拓?fù)鋱D識(shí)別所有訪存依賴對(duì)為:
步驟1,線性掃描原日志文件,選取與訪存操作相關(guān)的日志項(xiàng)x;若x為空,掃描結(jié)束;否則,執(zhí)行步驟2;
步驟2,遍歷工作隊(duì)列中的日志項(xiàng)α,如果α中的內(nèi)存地址與x中的內(nèi)存地址不一致,則將x添加至工作隊(duì)列隊(duì)尾,并執(zhí)行步驟1;否則,執(zhí)行步驟3;
步驟3,如果α的訪存類型為讀,且x的訪存類型也為讀,則為α與x建立并行關(guān)系,并執(zhí)行步驟1;否則,執(zhí)行步驟4;
步驟4,如果α的訪存類型為讀,且x訪存類型為寫,則標(biāo)識(shí)α以及和α具有并行關(guān)系的日志項(xiàng)與x為WAR類型的訪存依賴對(duì),并將α從工作隊(duì)列中移除,將x添加至工作隊(duì)列隊(duì)尾,執(zhí)行步驟1;否則,執(zhí)行步驟5;
步驟5,如果α的訪存類型為寫,且x的訪存類型為讀,則首先判斷α是否與其他日志項(xiàng)建立依賴關(guān)系,如果α已經(jīng)與日志項(xiàng)y存在依賴關(guān)系,則僅為x與y建立并行關(guān)系;如果α沒有與其他日志項(xiàng)建立依賴關(guān)系,則標(biāo)識(shí)α與x為RAW類型的訪存依賴對(duì),并將x添加至工作隊(duì)列隊(duì)尾,并執(zhí)行步驟1;否則,執(zhí)行步驟6;以及
步驟6,如果α和x的訪存類型均為寫,將α從工作隊(duì)列中移除,將x添加至工作隊(duì)列隊(duì)尾,并判斷α是否與其他日志項(xiàng)建立依賴關(guān)系,如果α與其他日志項(xiàng)z建立依賴關(guān)系,則標(biāo)識(shí)α與z為RAW類型的訪存依賴對(duì),標(biāo)識(shí)z與x為WAR類型的訪存依賴對(duì),并將α、z從工作隊(duì)列中移除;否則,標(biāo)識(shí)α與x為類型為WAW的訪存依賴對(duì),并執(zhí)行步驟1。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述工作隊(duì)列暫存每個(gè)訪存依賴對(duì)中首個(gè)執(zhí)行訪存操作的日志項(xiàng)。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)所述識(shí)別出的訪存依賴對(duì)類型,在拓?fù)鋱D中添加條件變量集合包括:當(dāng)所述訪存依賴對(duì)類型為WAW時(shí),在所述訪存依賴對(duì)的前驅(qū)所對(duì)應(yīng)的日志項(xiàng)后添加條件變量的單個(gè)喚醒操作,在所述訪存依賴對(duì)的后繼所對(duì)應(yīng)的日志項(xiàng)之前添加條件變量的單個(gè)等待操作。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)所述識(shí)別出的訪存依賴對(duì)類型,在拓?fù)鋱D中添加條件變量集合包括:當(dāng)所述訪存依賴對(duì)類型為RAW時(shí),在所述訪存依賴對(duì)的前驅(qū)所對(duì)應(yīng)的日志項(xiàng)后添加條件變量的廣播式喚醒操作,在訪存依賴對(duì)的后繼所對(duì)應(yīng)的日志項(xiàng)之前添加條件變量的單個(gè)等待操作。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)所述識(shí)別出的訪存依賴對(duì)類型,在拓?fù)鋱D中添加條件變量集合包括:當(dāng)所述訪存依賴對(duì)類型為WAR時(shí),在每個(gè)訪存依賴對(duì)的前驅(qū)所對(duì)應(yīng)的日志項(xiàng)后添加多個(gè)條件變量的單個(gè)喚醒操作,在訪存依賴對(duì)的后繼所對(duì)應(yīng)的日志項(xiàng)之前添加多個(gè)條件變量的單個(gè)等待操作。
9.一種基于訪存依賴對(duì)的并行重放裝置,包括:
掃描識(shí)別單元,用于靜態(tài)掃描原日志文件,并基于拓?fù)鋱D識(shí)別所有訪存依賴對(duì);
程序邏輯重構(gòu)單元,用于在拓?fù)鋱D中的合適位置添加條件變量集合;以及
日志分散單元,用于將所述原日志文件分散為多個(gè)線程獨(dú)立日志文件,當(dāng)并行程序在重放執(zhí)行時(shí),每個(gè)線程各自讀取自己的日志文件來指導(dǎo)重放。