熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

多核編程的四層境界

2013-11-15 12:50:59  來源: ASP編程 

  自發表老子是偉大的多核計算科學家一文來收到許多網友的強烈反響褒揚者有之砸板磚者亦有之不過板磚數量倒是在我的意料之中凡是跟哲學或者說是玄學的東西沾上邊的總會招來一陣口舌之爭雖然砸板磚者也沒有說出任何反駁的道理來但是並不代表那篇文章就很完美沒有不足的地方實際上那篇文章中只涉及了多核編程的一個層面的思想還有另外三層思想沒有被提及這也許可以算作是那篇文章的不足之處吧為彌補其不足之處下面從四個層面來闡述多核編程的基本思想

  第一層  先天方法策略層

  第一層的基本思想就是老子是偉大的多核計算科學家一文中所提及的幾個基本思想貪心自私這些東西是先天存在的是人類的一種本能它又可以看作是方法策略因此把這層叫作先天方法策略層

  先天的方法策略並不限於貪心自私這三種去年的SD大會上我講過一個基於搶奪的分布式內存管理算法說明也是一種先天的方法策略所謂

  人之初性本貪性自私性喜偷性喜搶

  為避免誤解這裡先說明一下這裡所說的和通常意義的偷搶並不完全相同和道家意義上的偷是同一個含義不與取之意則是取不歸還之意

  昔范蠡雲且夫天輿弗取反受其咎既然上天給了我們這麼多好的方法策略不用它的話顯然是一種糟蹋在多核編程中如何使用這些策略來進行編程開源項目TBB中可以找到詳細的代碼例子

  第二層  目標需求評價層

  先天的方法策略雖然看似簡單但要用好它並不是一件容易的事情自私貪心搶等先天方法既可以用來做好事也可以用來做壞事這就牽涉到如何評價是否用好了這些先天方法策略的問題也就是第二層目標需求評價層所需要解決的問題

  並不能為了使用先天方法策略而使用它而是用它來滿足我們的需求到達一定的目標那麼這個需求和目標是什麼呢?

  在這裡不想對一般的需求進行分析只分析優化方面的需求要達到優化可以理解為各種資源的有效利用可能有很多人已經有這方面的理解這些資源可以分為以下幾個方面

  )時間資源 時間資源指的就是時間比如一段程序或算法需要運行多長時間

  )空間資源如內存硬盤網絡各種IO設備資源等均屬於空間資源

  )計算資源如CPUGPU各種板卡上的處理器等均屬於計算資源

  )能源資源通常指的是電能的消耗量由於全球變軟環保問題的日益重要這個在以往被忽視的資源也變得重要起來

  如何有效利用上述資源並在各種資源利用間取得均衡是制定目標和需求的基礎也是評價程序或算法優化程度的基礎

  第三層  本質根源保障層

  資源的有效利用可不是一件簡單的事情在單核時代許多程序員已有時間資源和空間資源的利用及均衡方面的豐富經驗那時幾乎不用考慮計算資源的利用問題因為處理器只有一個

  然而在多核系統中計算資源的利用成了頭號問題多個處理器的使用使得程序員必須考慮如何將程序在各個處理器上並行地執行這就牽涉到一個負載均衡問題

  負載均衡問題歷來屬於難題由於客觀上存在大量的共享資源各種不同的共享資源情況復雜並不能簡單地將負載平均一下就攤到各個CPU核上去執行那麼用什麼來保障負載平衡呢?如何去達到資源有效利用的終極目標需求呢?

  要保障目標需求的實現其核心就是公平正義問題當然對公平正義這兩個詞的理解現實情況中存在多種解釋這裡采用更廣義的解釋凡是可從正確的前提通過邏輯推導出來的定義均視做正義例如自然科學中的所有公理定理及推論均屬於正義在人類社會中一些公認的道德標准法律條文也屬於正義

  以動態偷取的調度算法為例一般都是設計成每個線程一次偷取一個任務實際上已經隱含地使用公平正義對偷取的數量做了限制倘若不如此任由一個線程一次將隊列中所有任務都偷走那麼其他線程就偷不到任務了這樣就會出現負載不均衡無法有效地利用多個處理器的計算資源

  再比如基於搶奪的內存分配算法每個線程使用了共享內存後它並不返回給它的屬主線程而是據為己有這樣時間一長必然有某些線程占有了過多的內存資源為了解決這個問題解決方法就是每次搶完後都需要判斷一下自己占有的內存數量是否過多過多的話則主動將一部分內存歸返給公共內存池從而實現負載均衡可以看出基於搶奪的內存分配算法中也使用了公平正義以確保負載均衡

  公平正義問題可以說是算法之本全局效率之源為什麼這麼說呢?不妨看看現在美國發生的次貸危機其根本原因是由於銀行將貸款發放給無償返能力的客戶所造成的從公平正義的角度看實質上是銀行為了自身的貪心自私違反了基本的公平正義問題次貸危機的後果無需我多言大家均已看到可見沒有公平正義貪心自私等先天方法策略必然會被濫用其結果必然導致全局的不優

  由此可見公平正義是保障貪心自私搶等先天方法策略得以正確使用的前提條件本層名稱中的本質根源保障說的就是公平正義

  需要提及的是在人類社會的現實中由於人是有情感的公平正義在執行中總會存在偏差這時就需要仁愛來彌補其不足這也許是儒家思想能夠流傳兩千多年而不滅的根本原因當然如果把仁愛思想也看作是道德標准的一部分的話按照前面給出的正義的定義其實仁愛也屬於正義的范疇

  第四層  算法實現執行層

  通過上面三個層面的闡述可以知道先天的方法策略是實現優化的基本手段資源有效利用則是實現優化的目標需求及評價條件公平正義則是保障先天的方法策略合理使用的前提條件是不是有了這幾樣東西就可以做到達成優化的最終結果呢?

  答案是非也如果上面那幾個東西就可以達成優化的結果那麼從街上隨便抓個人恐怕都可以寫出很好的多核程序來了還要程序員干嘛還要去學習多核編程的各種模式技巧及算法干嘛?

  就像學了牛頓力學一樣有些人可以設計出摩天大廈造出各種機械有些人卻啥也做不了何也?運用好壞之不同也要寫出好的多核程序同樣牽涉導如何運用上面三層中的基本原理思想方法的問題而要用好這些基本原理思想更多的還是要靠程序員自身的知識及能力最終依賴於算法或程序的具體實現就像有了道家儒家卻仍然少不了法家農家醫家等各個領域的諸子百家

  怎樣寫出好的多核算法或程序來? 好好學習天天向上是也


From:http://tw.wingwit.com/Article/program/ASP/201311/21742.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.