今天看了以上關於parallel programming 和multi-core 的一系列影片, 才知道自己過去的錯誤認知XD
Why multi-core:
原來最跑出這東西的原因有三項
- power
在目前已經很高的CPU clock rate下, 為了增加13%的clock rate, 可能導致73%的功率消耗, 但如果我們把性能降到87%, 我們幾乎可以節省50%的功率消耗 - instruction level parallel
在提升CPU clock rate下, 從現行程式中找到可以並行的指令是越來越難 - memory
memory access的速度跟不上CPU clock rate增加的速度
以上都是造成目前往multi-core CPU方向走的原因之一
Parallel method:
- Data parallel
divide data into different part, and do the same work in each data part - Task parallel
divide task into different task, and do the each task separately
但是跟據Amdahl’s Law “速度的提升受程式中serial部分的限制,所謂serial部分,是指程式中不能並行執行的部分”, 所以無論怎麼增加CPU, 效率上的提升還是有所限制, 但是後來跑出一個人Gustafson, 他提出另一種看法, 我們可以讓電腦處理的資料提升, 就像有個程式需要跑500單位時間, 我們把並行的部分(ex: 200單位時間)增加一倍, 也就是在500單位時間內, 我們跑完700單位時間的工作, 那麼之前提到的serial 影響就會降到很低。
這就是超級電腦能夠成功運用並行技術的關鍵所在——我們不斷增加資料集,因為有了多核心處理器。
Key about parallel project:
- scalibilty
how to scale to 4-core, 8-core, 16-core - corresiton
- race condition
- dead lock
- maintainability
high abstraction
Abstraction Parallel programming
- library
- OpenMP (openmp.org) for c
- threading building block (threadingbuildingblocks.org) for c++
最後他提到了MPI(Message Passing Interface) http://www.mpi-forum.org/, 目前的multi-core 是以shared memory為前提, 我在想既然現在memory這麼便宜, 或許我每個core都讓他有自己獨立的memory (4G?), 然後全部以message passing來做, 不知道這樣的架構可不可行XD
Filed under: programming | Tagged: note