Just My Life & My Work

data parallelism & task parallelism

data parallelism和task parallelism的關係是怎樣呢?查了網路上,很少有比較的例子,還是看圖比較清楚。

原來data parallelism就是SIMD架構,而task parallelism即是MIMD架構,架構圖如下:

而兩者還有一些細節:

如果這樣還不瞭解的話,舉一個日常生活的例子:150份15題的考卷分給三個助教去改,若是data parallelism的作法,則每一個助教分別改50份考卷;若是task parallelism的方法,則每一個助教分別改150份考卷的前、中、後5題。瞭解嗎?這裡可以分析每個助教的負擔,乍看下是一樣的,然而後者方法中每個助教分別對前、中、後5題有高度熟悉感,那麼後者的方法可以有很好的效能,一下子就把考卷給改完!而前者方法中每個助教都批改15題,無法發揮所長,效能因此較不彰。

來看一下虛擬碼,假設有a和b兩個CPU:

data parallelism (SIMD)

define foo
    if CPU = "a"
       lower_limit := 1
       upper_limit := round(d.length/2)
    else if CPU = "b"
       lower_limit := round(d.length/2) + 1
       upper_limit := d.length

for i from lower_limit to upper_limit by 1
   foo(d[i])

task parallelism (MIMD)
program:
...
if CPU="a" then
   do task "A"
else if CPU="b" then
   do task "B"
end if
...
end program

從架構來看,data parallelism (SIMD)會比task parallelism (MIMD)好實現,於是今天的GPU架構就是前者!不曉得未來後者會不會有發展的潛力?在我看來,因為MIMD架構比較複雜,就算能夠做出來,在同樣大小的晶片上能夠容納的數量一定會比SIMD少很多,感覺有點像現在的CPU與GPU的狀況,可以快速處理比較複雜的運算,但是對於大量同樣簡單的運算不見得會比較快。

參考:Parallel Programming ModelsSIMDMIMDdata parallelismtask parallelism

Comments on: "data parallelism & task parallelism" (1)

  1. […] 更好的SIMD支援, dynamic for non- at objc(目前的dynamic本身是基於objc的runtime), data parallelism, higher kinded types, […]

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: