[note] Multi-core & parallel programming knowledge

Ref: http://cgi.taiwan.cnet.com/referral/?uid=2000006303

今天看了以上關於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