155
技術社區[雲棲]
多核時代:並行程序設計探討(10)——任務分組模式Group Task Pattern
任務分組模式Group Task Pattern
1.1 問題
一個問題的多個任務如何聚集成一組,以簡化依賴關係的管理?
1.2 上下文
當任務和數據分解完成後,就可以應用此模式了。
任務分組模式描述了分析任務之間的依賴關係的第一步。在任務分解的過程中,我們按照任務可以並行運行來考慮,然而我們並沒有強調一個很明顯的事實:這些任務並不是組成一個扁平(譯者注:指任務之間也是有層次關係)的集合。例如,繼承於算法中同一個高級的操作的任務自然的應該組成一組。其它任務可能和初始問題沒有關係,但在並行運行時存在相似的約束,因此也可以組成一組。
簡而言之,任務集內存在一個值得考慮的結構。這些結構——指任務組——簡化了問題的依賴關係分析。如下分析:
1) 如果一個任務組共享一個時序的約束(例如等待一個任務組完成文件的填充),我們可以一次滿足整個組的約束;
2) 如果一個組必須在一個共享數據結構上一起工作,整個組的同步可以一次解決;
3) 如果一組任務互相獨立,那麼把它們組成一個獨立的組然後在運行時作為一組同一調度,則可以簡化設計並且提高並行性,因此可以讓整個解決方案分布到更多的處理單元上。
以上無論哪種情況,思想都是通過定義共享相同約束的任務組,以及通過處理一組任務而不是單個任務來簡化約束管理。
1.3 解決方法
任務間的約束可以劃分到如下主要的幾類:
1)最容易理解的依賴就是時序依賴:即一組任務順序運行時存在的約束。如果任務A依賴於任務B的結果,則A必須等到B運行完畢後才能運行。我們經常把這種情況叫做數據流:任務A阻塞直到任務B準備好數據,當任務B結束後,數據就流向A了。
2)另一種順序依賴就是指一組任務必須同時運行。例如,在很多“數據並行(data-parallel)”的問題中,原始問題劃分為多個可以同時更新的區域。典型的情況為,任何指定區域的更新需要其相鄰區域的邊界信息,如果所有區域沒有同時處理,則並行程序將停止或者死鎖,因為某些區域要等待不活動區域的數據。
3)某些情況下,任務組中的任務是互相獨立的,這些任務並沒有順序執行的約束。這是一個重要的特性,因為這意味著這些任務可以以任何順序執行,包括並行執行。
沒有一個簡單的方法來發現任務組。我們建議按照如下方法進行操作。但要記住不能不考慮約束本身而去考慮任務分組,在這個設計點上,最好的方法是盡可能的抽象——識別約束然後將任務分組以解決這些約束,但是不要陷入到細節的泥沼中去。
1) 首先,關注初始問題如何分解。大部分情況下,高層的操作或者大的循環結構在分解中扮演關鍵的角色,這是第一個尋找任務組的地方,屬於同一高層操作的任務自然的就劃為一組了。
這樣劃分後,可能有很多小的任務組。接下來我們將關注那些由一個任務組內的任務共享的約束,共享同一約束的任務劃為一組。
2) 其次,我們需要問是否有其它任務組共享相同的約束。如果有,將任務組合並。大的任務組提供了額外的並行性,使得更多的處理單元運行;同時也提供了額外的任務調度的靈活性,使得在處理單元間進行平衡也更加容易。
3) 接下來的步驟要關注任務組之間的約束。如果任務組間有明確的時間順序,或者任務間有明確的數據流,這種情況很簡單。更複雜的情況是獨立的任務組之間以另外方式共享約束。這種情況下,將這些任務組合並成一個更大的任務。
最後更新:2017-04-02 04:01:42
上一篇:
百度有啊前端框架分析(瀏覽器內置事件)
下一篇:
企業服務總線ESB的概念及應用
金融安全資訊精選 2017年第十期 中國台灣遠東銀行遭黑客入侵被盜六千萬美元,GDPR成了歐洲企業“最擔心的挑戰”,CISO在企業中的位置會變得更加重要
使用 Axel 命令行下載器/加速器加速下載
試用Office 365 家庭高級版的十大理由
實踐重於理論——創建一個監控程序探測WCF的並發處理機製
關於CDN那些名詞,你知道嗎?
5月教程月|ECS服務器掛載雲盤(非普通雲盤)圖文教程
《SAFe 4.0參考指南:精益軟件與係統工程的規模化敏捷框架》SAFe原則
打造高效前端工作環境-tmuxinator
你的變量究竟存儲在什麼地方 && 全局內存
SSH整合時sessionFactory or hibernateTemplate is required異常