※ 引述《tester.bbs@bbs.csie.ncu.edu.tw (try or test)》之銘言:
> > 你要的是 process network modeling, 而非 OO,
> > 使用 C++ 以及 multi-thread 來製作 process network modeling,
> > 可以充分利用SMP處理器的好處,並且提供了很好的設計方法,
> > 至於寫好的程式不做修改就可以分散的,
> > openmp是一個機會,可以動到最少的狀況下,獲得一些好處,
> > 然而這樣的平行化有其極限,
> 對於 Networked/Cluster Computer 與 SMP 這兩種形式的 Architecture ,
> 前者以 Java CORBA 出名, 另一個就是配合各種程式(通常是 FORTRAN)的
> MPI . 對於 SMP 如果是想加速平行計算, 出名的是 Parallel FORTRAN ,
> 或是您提到的 OpenMP . 後兩者通常使用 directive 加註 與 修改原始程
> 式中的 data partition 相互配合. 但這種修改除了配合傳統的 Matrix
> Do Loop 外, 還需假設有個方便的 shared memory .
> 假如將來還是得要使用分離的多部電腦, 整個計算模擬的程式設計就必須
> 思考能降低藕合度的可能做法. 況且 object 具有 self contained 的特
> 性, 最適合分散式環境.
> 不過, 目前配合計算的習慣, FORTRAN 與 SMP 環境還是被物理, 機械
> 專業者所喜愛 . 但 Middleware 的興起, Architecture 的趨勢可能就是
> 由多個 SMP 的單機經 Cluster 或 network 再彙總而成.
SMP or Cluster的主要差異在於 SMP可以有效率的共用Memory,
也就是SMP可以做Thread parallel,而Cluster常見的是process parallel,
OS在SMP可以移動thread,是沒有問題,
有些OS可以把process自動移動到別的OS,如OpenMosix,
而整個環境,問題在於一個平行度不佳的程式,再多的資源是沒有用的,
而平行度不佳的問題在於之前寫的程式是建立在單一處理器的架構下,
而現在是要使用多處理器,所以使用的狀況基本上不會很好,
而其中address point是整個問題中的最大問題,
因為compiler根本就不知道address point會使用到那些的記憶體,
一遇到address point就平行不起來,即使到了OO也沒有改善
所以programmer必須給與更多的足夠的資訊,這樣才平行的有效率,
// 在c/c++上這是大問題,
再者,有時候job是否需要分出去是根據job運算所需的時間,
一個小小的job分出去,所付出的可能比賺的還要多,
而一個job,有時候根本就不知道所需要的時間是多少,
在資訊不夠的狀況下,compiler就不能幫你處理的適當,
// 使用profile feedback的方式可以改善這樣的狀況......
目前最有效的方法是在寫程式的時候就考慮parallel的問題,
甚至使用演算法的時候,就必須考慮這問題了........
"多個 SMP 的單機經 Cluster 或 network 再彙總而成"
dual-core的CPU已經是SMP了,那之後隨便建構的cluster,
已經符合您的趨勢了
--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: pingpong.EE.NCTU.edu.tw