欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種數(shù)據(jù)容錯的多線程投機方法

文檔序號:6541468閱讀:154來源:國知局
一種數(shù)據(jù)容錯的多線程投機方法
【專利摘要】本發(fā)明公開一種數(shù)據(jù)容錯的多線程投機方法。該方法是基于數(shù)據(jù)容錯的多線程投機方法,讓先到達柵欄的線程投機執(zhí)行,充分利用眾多線程之間同步數(shù)據(jù)造成的運行時間浪費,加速程序運行。本發(fā)明基于投機,判斷,回滾的流程通過回滾錯誤的投機來保證程序的正確性。本發(fā)明對投機判斷和回滾判斷進行了建模,保證其效率。本發(fā)明通過限制投機深度,使得投機收益在減去該投機開銷后保持一定范圍內(nèi)的穩(wěn)定,從而提供穩(wěn)定的程序運行速度提升。
【專利說明】一種數(shù)據(jù)容錯的多線程投機方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及片上多核體系結(jié)構(gòu)并行【技術(shù)領(lǐng)域】,特別是涉及一種數(shù)據(jù)容錯的多線程投機方法。
【背景技術(shù)】
[0002]片上多核體系結(jié)構(gòu)(Chip multiprocessors)技術(shù)通過在一個芯片上集成多個微處理器核心來提高程序的并行性。每個微處理器核心實質(zhì)上都是一個相對簡單的單線程微處理器或者比較簡單的多線程微處理器,這樣多個微處理器核心就可以并行地執(zhí)行程序代碼,因而具有了較高的線程級并行性。
[0003]控制多線程使它們串行化來訪問共享資源(包括硬件資源和軟件資源),以達到多線程同步的目的。不論是硬件臨界資源,還是軟件臨界資源,多個線程必須互斥地對它進行訪問,即每個時刻,只能有一個線程訪問臨界資源。目前主要有三種主流的方法:(1)臨界區(qū);每個線程中訪問臨界資源的那段代碼稱為臨界區(qū)(Critical Section)(臨界資源是一次僅允許一個線程使用的共享資源)。每次只準許一個線程進入臨界區(qū),進入后不允許其他線程進入;當(dāng)一個線程退出臨界區(qū)后,再允許其他線程進入。(2)信號量;信號量機制被廣泛的用于單處理機和多處理機系統(tǒng)以及計算機網(wǎng)絡(luò)中。信號量S是一個整數(shù),S大于等于零是代表可供并發(fā)進程使用的資源實體數(shù)量,當(dāng)S小于零時則表示正在等待使用該資源的而被阻塞的進程數(shù)。(3)互斥量(mutex)可以看成是信號量的一個簡化機制,它不需要信號量的計數(shù)功能,互斥量僅僅適用于管理共享資源或一小段代碼。由于互斥量在實現(xiàn)時既容易又有效,這使得互斥量在實現(xiàn)用戶空間線程包時非常有用。(4)事件(Event)用來通知線程有一些事件已發(fā)生,從而啟動后繼任務(wù)的開始。一個事件有兩種狀態(tài):激發(fā)狀態(tài)和未激發(fā)狀態(tài)。事件又分兩種類型:手動重置事件和自動重置事件。手動重置事件被設(shè)置為激發(fā)狀態(tài)后,會喚醒所有等待的線程,而且一直保持為激發(fā)狀態(tài),直到程序重新把它設(shè)置為未激發(fā)狀態(tài)。自動重置事件被設(shè)置為激發(fā)狀態(tài)后,會喚醒一個等待中的線程,然后自動恢復(fù)為未激發(fā)狀態(tài)。
[0004]雖然多核體系結(jié)構(gòu)的發(fā)展日益成熟以及多核多線程編程模型日加完善,但是這些多線程編程模型都存在明顯的缺陷。在目前工業(yè)界中成熟使用的多線程編程模型中,在程序執(zhí)行的某一階段,允許多線程自由執(zhí)行,但是運行到某一代碼段處,需要進行同步等待,當(dāng)所有的線程都達到預(yù)定的代碼段后,才能進行下一階段的執(zhí)行。各個線程運行有一定的自由度,但存在類似于聚合的約束性,這樣就沒有充分利用到多核各個核的計算處理能力,硬件資源空閑。這樣,那些因同步等待的線程會被阻塞,在同步等待的時間里,這些被阻塞的線程停止運行,沒有進行工作,白白浪費了寶貴的運行時間,大大降低了程序的運行效率。
[0005]針對這個缺陷,我們需要設(shè)計出一種機制,使提前到達柵欄處的線程不用等待還未到達的線程,讓它攜帶自己的數(shù)據(jù)繼續(xù)向前執(zhí)行,這樣如果它自己攜帶的數(shù)據(jù)與最后的數(shù)據(jù)相同或者不影響線程執(zhí)行的結(jié)果,那么向前執(zhí)行的這部分工作就相當(dāng)于提前完成了 ;如果由于該線程攜帶的數(shù)據(jù)不是后續(xù)執(zhí)行所使用的正確結(jié)果,提前執(zhí)行的這部分工作就是無用功,需要返回到原來的柵欄處,但是在這部分時間段內(nèi)該線程原本就是等待阻塞狀態(tài),因此提前執(zhí)行的這部分工作并不影響程序的這個性能。
[0006]為了獲得更多的性能提升,近年來研究人員提出的多線程投機技術(shù),這些線程級投機技術(shù)包括事務(wù)內(nèi)存(TransactionalMemory)投機,線程級并行化投機(SpeculativeParallel Threading)和檢測點(Checkpointed)多核投機技術(shù)以及基于硬件實現(xiàn)的投機技術(shù),該技術(shù)將中間執(zhí)行結(jié)果暫時保存在專門設(shè)置的緩沖存儲器中,直到本投機線程變?yōu)榉峭稒C狀態(tài)為止,并判斷是否有違反串行數(shù)據(jù)依賴的情況發(fā)生。如果發(fā)現(xiàn)投機線程執(zhí)行中違反串行數(shù)據(jù)依賴關(guān)系,就認為該投機線程投機失敗,則由相關(guān)硬件回滾該投機線程并重新執(zhí)行該投機線程。
[0007]在以上方法中,軟件投機方法恢復(fù)一次的代價相當(dāng)?shù)母撸谟布崿F(xiàn)的投機并行由于硬件開銷比較大,實現(xiàn)起來很復(fù)雜,并且基于硬件機制的投機并行大部分局限于模擬研究階段。

【發(fā)明內(nèi)容】

[0008]本發(fā)明的目的是針對現(xiàn)有技術(shù)的不足,提供一種數(shù)據(jù)容錯的多線程投機方法。
[0009]目前在運用同步和柵欄機制來實現(xiàn)多線程協(xié)同工作提高多核體系結(jié)構(gòu)資源利用率的系統(tǒng)中,首先先到達柵欄的線程需要等待,后到達柵欄的線程,匯總數(shù)據(jù)以繼續(xù)執(zhí)行。
[0010]本發(fā)明提出,對于先于其他到達柵欄的線程,允許其攜帶自身的數(shù)據(jù)繼續(xù)執(zhí)行而不是等待其他線程。其攜帶的數(shù)據(jù)稱為容錯數(shù)據(jù),該帶有容錯數(shù)據(jù)的線程稱為容錯投機線程。
[0011]本發(fā)明方法包括以下步驟:
步驟(I).線程到達柵欄,賦予投機線程容錯數(shù)據(jù)版本
多線程執(zhí)行過程中線程會遇到多個柵欄,對于任何先于其他線程到達某一柵欄的線程,從第一個穿越該柵欄的線程開始,每個線程所攜帶的容錯數(shù)據(jù)賦予一個版本,該版本的賦予可以由其穿越該柵欄的次序決定;最后一個到達該柵欄的線程擁有數(shù)據(jù)的最終版本,所述的最終版本為數(shù)據(jù)的正確版本;
步驟(2).判斷投機線程容錯數(shù)據(jù)版本是否為最終版本
當(dāng)某個投機線程到達柵欄時,判斷其容錯數(shù)據(jù)版本是否為最終版本;若不是最終版本,則該線程繼續(xù)投機執(zhí)行步驟(3);反之則標記自身為非投機線程正確運行并發(fā)出投機喚醒信號,通知非最終版本的投機線程執(zhí)行步驟(5);
步驟(3).判斷非最終版本的投機線程是否收到收到投機喚醒信號,若收到則執(zhí)行步驟(5),否則執(zhí)行步驟(4);
步驟(4).判斷投機線程是否需要回滾
對于非最終版本的投機線程,在其每到下一個柵欄時都要判斷其是否需要回滾,判斷線程回滾條件如下所述;如果不需要回滾,則繼續(xù)投機執(zhí)行;如果需要回滾,則回滾至該投機線程第一次投機執(zhí)行所在的柵欄;
所述的線程回滾的條件為:投機線程在最終版本的數(shù)據(jù)到達之前,若該線程已經(jīng)投機執(zhí)行超過了設(shè)定的投機深度,則回滾。[0012]所述的投機深度為允許投機線程攜帶容錯數(shù)據(jù)穿越的柵欄數(shù)目;
步驟(5).判斷投機線程是否投機成功
對于非最終版本的投機線程,在收到投機喚醒信號后都要判斷自身是否投機成功,投機成功的判斷條件如下所述;如果投機成功,則標記自身為非投機線程正確運行;反之則回滾至該投機線程第一次投機執(zhí)行時所在的柵欄;
所述的投機成功條件包括兩種,滿足任意一種即可:第一種,投機線程內(nèi)的容錯數(shù)據(jù)與最終版本的數(shù)據(jù)相同,則認為投機成功;第二種,投機線程內(nèi)的容錯數(shù)據(jù)與最終版本的數(shù)據(jù)不相同,但是該投機線程不依賴于投機線程內(nèi)與最終版本數(shù)據(jù)不同的容錯數(shù)據(jù),或者該投機線程最終的運行結(jié)果與容錯數(shù)據(jù)無關(guān)。
[0013]本發(fā)明的有益效果是: 1.本發(fā)明提出容錯數(shù)據(jù)和容錯投機線程兩個概念,對于先于其他到達柵欄的線程,允許其攜帶自身的數(shù)據(jù)繼續(xù)執(zhí)行而不是等待其他線程,減少線程同步的等待時間。
[0014]2.對本發(fā)明用容錯數(shù)據(jù)版本來管理多個線程自身的數(shù)據(jù)和最終正確版本數(shù)據(jù)之間的關(guān)系,簡化了投機線程容錯數(shù)據(jù)的管理。每個線程所攜帶的容錯數(shù)據(jù)都有一個版本,該版本可以用其穿越特定柵欄的次序決定,最后一個到達柵欄的線程擁有數(shù)據(jù)的最終版本(也就是肯定正確的版本);每個柵欄都維護一個這樣的數(shù)據(jù)版本。
[0015]3.本發(fā)明提出投機成功的兩個條件:第一種,容錯投機線程內(nèi)容錯數(shù)據(jù)與最終版本的數(shù)據(jù)相同則可以認為投機成功;第二種,容錯投機線程內(nèi)容錯數(shù)據(jù)與最終版本的數(shù)據(jù)不相同,但是該容錯投機線程內(nèi)部數(shù)據(jù)不依賴與容錯數(shù)據(jù)或者該線程最終的運行結(jié)果與容錯數(shù)據(jù)無關(guān),這樣雖然容錯數(shù)據(jù)是不正確的數(shù)據(jù),但是這個錯誤不影響線程最終的結(jié)果。特別是第二種條件,有效的提高投機成功的概率。
[0016]4.本發(fā)明提出對于投機執(zhí)行超過了設(shè)定的投機深度的線程,不再向前投機,從而有效保證投機成功的概率。
[0017]5.本發(fā)明的投機收益高。
【專利附圖】

【附圖說明】
[0018]圖1是投機線程工作的流程圖。
【具體實施方式】
[0019]下面結(jié)合附圖對本發(fā)明做進一步的分析。
[0020]如圖1所示,本發(fā)明方法是:
步驟(1).線程到達柵欄,賦予投機線程容錯數(shù)據(jù)版本
多線程執(zhí)行過程中線程會遇到多個柵欄,對于任何先于其他線程到達某一柵欄的線程,從第一個穿越該柵欄的線程開始,每個線程所攜帶的容錯數(shù)據(jù)賦予一個版本,該版本的賦予可以由其穿越該柵欄的次序決定;最后一個到達該柵欄的線程擁有數(shù)據(jù)的最終版本,所述的最終版本為數(shù)據(jù)的正確版本;
數(shù)據(jù)版本記錄的數(shù)據(jù)結(jié)構(gòu)定義如下所示:
00: s true t VersionRecord {
01: char* version;// 版本號
02: bool IsLastVersion; //該數(shù)據(jù)版本是否為最終版本 03: datatype* dataref; //該版本對應(yīng)的數(shù)據(jù) 04: unsigned threadID;//攜帶該版本數(shù)據(jù)的線程號 05: };
05:s tack<VersionRecord} Da ta_Barrier_ Version; // 數(shù)據(jù)版本記錄棧該數(shù)據(jù)結(jié)構(gòu)內(nèi)定義有三個成員變量:version代表數(shù)據(jù)的版本號,dataref指針指向該版本對應(yīng)的數(shù)據(jù),threadID為攜帶該數(shù)據(jù)版本的線程號。
[0021]步驟(2).判斷投機線程容錯數(shù)據(jù)版本是否為最終版本
當(dāng)某個投機線程到達柵欄時,判斷其容錯數(shù)據(jù)版本是否為最終版本;若不是最終版本,則該線程繼續(xù)投機執(zhí)行步驟(3);反之則標記自身為非投機線程正確運行并發(fā)出投機喚醒信號,通知非最終版本的投機線程執(zhí)行步驟(5);
步驟(3).判斷非最終版本的投機線程是否收到收到投機喚醒信號,若收到則執(zhí)行步驟(5),否則執(zhí)行步驟(4);
步驟(4).判斷投機線程是否需要回滾
對于非最終版本的投機線程,在其每到下一個柵欄時都要判斷其是否需要回滾,判斷線程回滾條件如下所述;如果不需要回滾,則繼續(xù)投機執(zhí)行;如果需要回滾,則回滾至該投機線程第一次投機執(zhí)行所在的柵欄;
所述的線程回滾的條件為:投機線程在最終版本的數(shù)據(jù)到達之前,若該線程已經(jīng)投機執(zhí)行超過了設(shè)定的投機深度,則回滾。
[0022]所述的投機深度為允許投機線程攜帶容錯數(shù)據(jù)穿越的柵欄數(shù)目;
步驟(5).判斷投機線程是否投機成功
對于非最終版本的投機線程,在收到投機喚醒信號后都要判斷自身是否投機成功,投機成功的判斷條件如下所述;如果投機成功,則標記自身為非投機線程正確運行;反之則回滾至該投機線程第一次投機執(zhí)行時所在的柵欄;
所述的投機成功條件包括兩種,滿足任意一種即可:第一種,投機線程內(nèi)的容錯數(shù)據(jù)與最終版本的數(shù)據(jù)相同,則認為投機成功;第二種,投機線程內(nèi)的容錯數(shù)據(jù)與最終版本的數(shù)據(jù)不相同,但是該投機線程不依賴于投機線程內(nèi)與最終版本數(shù)據(jù)不同的容錯數(shù)據(jù),或者該投機線程最終的運行結(jié)果與容錯數(shù)據(jù)無關(guān)。
[0023]上述實施例并非是對于本發(fā)明的限制,本發(fā)明并非僅限于上述實施例,只要符合本發(fā)明要求,均屬于本發(fā)明的保護范圍。
【權(quán)利要求】
1.一種數(shù)據(jù)容錯的多線程投機方法,其特征在于該方法包括以下步驟: 步驟(I).線程到達柵欄,賦予投機線程容錯數(shù)據(jù)版本: 多線程執(zhí)行過程中線程會遇到多個柵欄,對于任何先于其他線程到達某一柵欄的線程,從第一個穿越該柵欄的線程開始,每個線程所攜帶的容錯數(shù)據(jù)賦予一個版本,該版本的賦予由其穿越該柵欄的次序決定;最后一個到達該柵欄的線程擁有數(shù)據(jù)的最終版本,所述的最終版本為數(shù)據(jù)的正確版本; 步驟(2).判斷投機線程容錯數(shù)據(jù)版本是否為最終版本: 當(dāng)某個投機線程到達柵欄時,判斷其容錯數(shù)據(jù)版本是否為最終版本;若不是最終版本,則該線程繼續(xù)投機執(zhí)行步驟(3);反之則標記自身為非投機線程正確運行并發(fā)出投機喚醒信號,通知非最終版本的投機線程執(zhí)行步驟(5); 步驟(3).判斷非最終版本的投機線程是否收到收到投機喚醒信號,若收到則執(zhí)行步驟(5),否則執(zhí)行步驟(4); 步驟(4).判斷投機線程是否需要回滾: 對于非最終版本的投機線程,在其每到下一個柵欄時都要判斷其是否需要回滾,判斷線程回滾條件如下所述;如果不需要回滾,則繼續(xù)投機執(zhí)行;如果需要回滾,則回滾至該投機線程第一次投機執(zhí)行所在的柵欄; 所述的線程回滾的條件為:投機線程在最終版本的數(shù)據(jù)到達之前,若該線程已經(jīng)投機執(zhí)行超過了設(shè)定的投機深度,則回滾; 所述的投機深度為允許投機線程攜帶容錯數(shù)據(jù)穿越的柵欄數(shù)目; 步驟(5).判斷投機線程是否投機成功: 對于非最終版本的投機線程,在收到投機喚醒信號后都要判斷自身是否投機成功,投機成功的判斷條件如下所述;如果投機成功,則標記自身為非投機線程正確運行;反之則回滾至該投機線程第一次投機執(zhí)行時所在的柵欄; 所述的投機成功條件為:投機線程內(nèi)的容錯數(shù)據(jù)與最終版本的數(shù)據(jù)相同;或者投機線程內(nèi)的容錯數(shù)據(jù)與最終版本的數(shù)據(jù)不相同,但該投機線程最終的運行結(jié)果與容錯數(shù)據(jù)無關(guān)。
【文檔編號】G06F11/07GK103942096SQ201410111160
【公開日】2014年7月23日 申請日期:2014年3月24日 優(yōu)先權(quán)日:2014年3月24日
【發(fā)明者】孟靜磊, 潘平, 袁明敏, 李頌元, 邵景程, 馬建良, 俞立呈, 陳天洲, 劉莉, 施青松 申請人:浙江大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
阳山县| 武义县| 获嘉县| 平安县| 扎鲁特旗| 扎鲁特旗| 竹山县| 葫芦岛市| 雅安市| 灵石县| 叙永县| 曲松县| 新巴尔虎左旗| 正宁县| 平安县| 桃源县| 普洱| 延安市| 花莲市| 潼关县| 托克逊县| 河曲县| 酒泉市| 大宁县| 平度市| 苏尼特左旗| 香港 | 襄垣县| 金门县| 武冈市| 绥江县| 那曲县| 西藏| 云安县| 汝城县| 东乡族自治县| 枞阳县| 开远市| 曲周县| 安陆市| 固镇县|