close

Goal:

提供使用者在異質多核心平台上撰寫平行程式的API,以cell為例,在cell上撰寫程式是相對困難的 (MPMD Model) ,因此,實作MPI Standard以減低撰寫的困難度及移植程式的困難度

實作細節

1. MPI initialization

mpirun -n <N> a.out

此處N表示SPE個數 (i.e worker個數),PPU擔任上層分配工作者,並未參與計算,原因是盡量讓PPU處於free 的狀態以免造成效能瓶頸。

2. Point-to-point communication

假設N為SPE個數,在PPU local端保留了N塊buffer (mpirun process allocate),也就是說,buffer Pi 就是讓SPEi 收送資料的buffer

而sender&receiver溝通所需的資訊則由SPE local store的meta-data queue (circular queue)維護,因此,共有N*(N-1)個queue

queue Qij 表示SPEi 送資料到SPEj 並且此queue存放在receiver端,因此,每個SPE維護N-1個queue

queue內每個entry存放:

  • 1.the location of the message within Pi
  • 2.the message tag
  • 3.the data type message
  • 4.message size
  • 5.communicator identifier
  • 6.flag

flag 狀態:

  • 1. valid       -->  表示接收端欲從傳送端接收的資料仍未收到,因此接收端必須前往Pi拿取資料
  • 2. invalid    -->  表示傳送端可以將資料寫入buffer

[1] Sender protocol :

  1. 1. 尋找buffer Pi 之free block
  2. 2. 將資料copy into Pi  (paper內提到因為buffer放在main memory,因此,資料由DMA複製到local store 在由DMA複製到buffer內,p.4 第二段)
  3. 3. 傳送端將Qij的此entry設定為valid並且在Qij內找尋下一個flag標示著invalid的request

[2] Receiver protocol :

  1. 1. 找尋Qij內標示著valid的request
  2. 2. 比對tag及communicator並且將資料從buffer複製到application area
  3. 3. 將entry flag設定為invalid

[3] Lock-free data structure

看無

[4] Communication modes

傳輸模式分成兩種:(1) buffered-mode, (2) synchronous-mode,小資料傳輸適用於buffered-mode,而大資料則適用synchronous-mode,paper內當傳輸資料大小超過2KB則切換到synchronous-mode

 

心得:

  • (1) 前述提到傳送端將資料複製到buffer做了兩次DMA,感覺有點多餘,不知是否能透過memcpy實現
  • (2) 文內未實作non-block protocol(放在future work)及collective operation (由send-recv 兜出來)
  • (3) 目前msg在PAC Duo上的作法與此處還滿類似的,希望接下來看synchronous-mode能吸收比較特別的作法
arrow
arrow
    全站熱搜

    phchiu 發表在 痞客邦 留言(0) 人氣()