為了找出並行計算上的各種狀況,需要找到可以表達的模型。
目前已知並行狀態機可以使用Petri Net來表達。
在找Petri Net資料中,找到了工作流模式(workflow pattern)。
也就是所有並行式工作流,都可以使用工作流模式內的模型來表達。
工作流模式基本模型有21種:
1. 順序(Sequence)
2. 平行拆分(Parallel Split)
3. 同步(Synchronization)
4. 排他選擇(Exclusive Choice)
5. 單合併(Single Merge)
6. 多選(Multi-choice)
7. 平行合併(Synchronize Merge)
8. 多合併(Multi-merge)
9. 鑒別器(Discriminator)
10. M中的N模式(N-out-of-M Join)
11. 強制循環(Arbitrary Cycles)
12. 隱式終止(Implicit Termination)
13. 非同步的多實例(Multiple Instances Without Synchronization)
14. 在設計期間預先確定的多實例(Multiple Instances With a Priori Design Time Knowledge)
15. 在運行期預先確定的多實例(Multiple Instances With a Priori Runtime Knowledge)
16. 無法在運行期預先確定的多實例(Multiple Instances Without a Priori Runtime Knowledge)
17. 延遲選擇(Deferred Choice)
18. 交替平行路由(Interleaved Parallel Routing)
19. 里程碑(Milestone)
20. 取消活動(Cancel Activity)
21. 取消實例(Cancel Case)
可以到
http://is.ieis.tue.nl/research/patterns/patterns.htm
上面有動畫實例,可以很容易的了解各模型的差異。
有了這個工作流模式,只要把各狀況找出解決方式,就不會用自己想的怪方法來解,然後遇到不明的問題。
2010年3月31日 星期三
2010年3月30日 星期二
2010年3月16日 星期二
"多核計算與程式設計"介紹
1.讀書原由
在CUDA程式設計上面遇到許多多核心程式計算的問題。個人從單核心作業系統一下子變成多核心程式設計,才發覺對於多核心知識的不足。
而CPU多核心已流行數年,在新的PC硬體上,要使用雙核心已是基本配備。意指,多核心已經是免費午餐。
但在軟體設計上,卻很少使用到雙核心,甚至四核心來做為加速。為何會如此?轉換程式是如此慢,其原因為何?
在收集網路資料後發現,出在使用語言上的問題比作業系統支援多核心來得嚴重。但不管如何,中文資料一樣貧乏。
a.作業系統支援及其問題
過去:
作業系統支援多核心是最早的,在Unix作業系統就已發展出支援多核心的方式。
但是現代作業系統都有支援的狀況下,為何沒有什麼程式設計師願意使用?原因在於使用的門檻高,且其經濟效應不好。
因為多核心程式在單核心的CPU運行效率不好,在市場尚未普及前,多數工程師仍未接受多核心程式訓練。
現在:
但現在環境已經不同了,多核心時代真的到來。
b.電腦語言支援多核心問題
過去:
其實這才是目前多核心程式發展的最大阻礙。撰寫多核心程式只能使用作業系統支援的狀況下,困難度太高。
而大部分使用者所使用的語言皆為對於單核心所設計。能使用在多核心的電腦語言則是太少。
所以大部分程式設計仍然被單核心程式語言所限住。這才是多核心程式真正無法流行的原因。
因為程式語言就是要讓使用者方便處理設計,若是學習門檻太高,就不易推行。
現在:
語言延伸:MPI、OpenMP
平行語言:Erlang、Scala
c.使用CUDA之後才發現的問題
CUDA的推行以資料為主的平行計算。和之前在作業系統所提的工作為主的平行計算上有很大的不同。
在超過八核心同時運算時,為了要增加產出率,勢必要採行以SIMD為主的語言架構,也就是資料為主的程式概念。
但個人發現,可以找到的資料不多,所以轉以找多核心程式的資料,所以找到此書。
2.書本結構
a.基礎知識
多核計算概述
多線程編程基礎
OpenMP程式設計
b.基礎資料結構及算法
結構
Link List
Hash
Tree
AVL search tree
c.平行運算法
並行程式設計模式
並行搜尋
並行排序
並行數值計算
d.共享資源分散式計算
分散式計算設計模式
分散式陣列
分散式查找
分散式記憶體管理
e.任務分解及調度
任務圖分解及調度
動態任務分解及調度
Lock-Free編程基礎
3.比對CUDA
a.有許多問題是一樣的
b.CUDA中有些問題解法未表明產生原因,在多核心中則有解釋
c.CUDA可視為多核心的一種實現
d.可以有效利用CUDA中的原子函式
e.免除遇到多核心問題,無從看出問題產生原因
訂閱:
文章 (Atom)