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.免除遇到多核心問題,無從看出問題產生原因



4 則留言:

  1. 推你幾本書
    The art of multiprocessor programing
    Programming Massively Parallel Processors: A Hands-on Approach

    [版主回覆04/29/2010 09:47:31]這是nVidia的新書,主要以CUDA為程式平台,不過我沒有。您也在研究CUDA嗎?

    因為平行運算對我仍算很新。目前有三種運算結構存在
    1.分散式運算,工具為MPI。
    2.Multi-core,工具為OpenMP。
    3.GPGPU,工具為CUDA及OpenCL。
    還是要多認識一下架構的差異。依我看雲端會三者齊用,所以還是都要了解。

    感謝你提供資料。

    回覆刪除
  2. 我是在研究CUDA
    所以現在回去研究所讀書了

    [版主回覆05/04/2010 09:18:10]CUDA學起來數個月,研究所要數年。還是多學一點其他的。

    而且大部分教授也不會CUDA,因為太新了。不管是教授還是學生都在同一個起跑點,自學比較實在。不然就是找同校有在用的同學,還比較有得討論。

    歡迎加入CUDA行列!

    回覆刪除
  3. 我是因為教授才去的
    指導教授是GPGPU運算的名人
    也是HPC的名人

    [版主回覆05/05/2010 09:58:03]很好啊!清楚知道自己要的才去學,這樣不會浪費時間。
    再來是論文及就業問題。我想論文對你應不是大問題。

    之前因為景氣不好,為了打點知名度,並留下所走的路,才會產生這個部落格,希望可以幫助就業(雖然已在工作)。要經營好一個成果,不是短時間可以完成。
    這個部落格的東西不多,但別人還是可以看到Bee近年來的研究。另外也可能認識相關領域的人。這個做法提供一個參考。

    回覆刪除
  4. Using OpenMP: Portable Shared Memory Parallel Programming (Scientific and Engineering Computation)這本書還算不錯,可是已經沒有更好的openmp的書了


    [版主回覆05/07/2010 10:24:47]感謝提供資料。
    不過對我來說,還是如何應用到實際上問題比較實在。
    Bee的研究所本來是做機器人的,並不是做高效能計算。
    所以和您聚焦的資料有些不同。

    還是很感謝您最近常來逛。有想法也可以提出討論。

    回覆刪除