MPJ Express 內容總結

Towords Scalable Java HPC with Hybrid and Native Communication Devices in MPJ Express 內容總結

2.相關工做

本文關注:

clipboard.png

  • 當前的一些實現java

clipboard.png

  • Open MPI Java Bindings 只能使用Open MPI 座位底層通訊庫。數組

  • 隨着處理器核數的增長,須要混合並行計算。網絡

  • Hybrid MPI 使用單線程MPI進程。多線程

  • 在Hybrid MPI中,單節點的多核處理器經過共享堆內存進行通訊。所以須要安裝一個自定義堆內存管理器,用來把共享堆內存的分配給MPI進程,這些進程能夠相互訪問其內存。架構

clipboard.png

  • 在Java領域提出MPJ Express。socket

clipboard.png

3.MPJ Express 架構

clipboard.png

4.MPJ Express中的緩衝層

  • 利用池機制。性能

clipboard.png

  • API的使用spa

    • 在MPJ Express 高層,點對點通訊中:線程

    clipboard.png

  • 舉例:發送一個int型數組的10個元素設計

    clipboard.png

  • Java:

    • JDK1.4引入NIO,在NIO中,JVM操做一系列buffer類來對文件和socket進行讀寫。ByteBuffer類實現了一個字節數組,但存儲在JVM堆內存外部(所謂的直接字節緩衝區)。
      因此,當用戶想傳一個int型數組的10個元素時,可將其複製到一個ByteBuffer中,相似的,若是想傳遞一個派生數據類型,則能夠把派生數據類型中的每一個基本數據類型打包,存到ByteBuffer中,這樣軟件的高層個底層就能夠經過緩衝層提供的的功能對基本數據類型和高級數據類型進行通訊。對於專用網絡,NIO能夠直接讀取直接字節緩衝區,這樣能夠消除使用JNI帶來的額外複製。

clipboard.png

  • 緩衝策略利用池機制來下降通訊開銷————減小通訊buffer的建立時間。

4.1 Open MPI Java 和 FastMPJ 中的緩衝層

通訊層中是否有緩衝對Java消息庫的性能影響極大

clipboard.png

  • 因爲缺少統一標準,Java MPI庫爲了性能最優,其遵循的標準各不相同。由此提出:要解決標準統一的問題。

5.通訊device的實現

clipboard.png

5.1 Hybrid device

  • hybrid device 的設計

    • 基於現有的device進行設計,這樣能夠選用任何一個網絡device進行節點間通訊,同時有利於代碼的服用,便於之後維護。

  • 實現hybrid device時,首先遇到的問題:

clipboard.png

  • MPJ Express 運行時系統負責啓動計算節點上的進程。

  • bybdev的設計具備在使用運行時系統的單個計算節點上啓動一個或多個網絡device實例的靈活性

  • smpdev是一個多個通訊device,在那裏,不一樣的線程表明不一樣的MPJ Express進程,每個線程有一個包含UUID的進程ID(PID)

  • smpdev的一個具備挑戰性的需求是:smpdev依賴於xdev層中各線程中的共享變量,而用戶程序中的變量禁止共享。

    • 解決:smpdev和bybdev用過一種智能的類加載機制來知足這個要求。這個類加載機制是:MPJ Express軟件的不一樣包被分爲2組,而後分別用不一樣的的類加載器進行加載。

  • 用戶經過指定進程數和可用節點數來執行並行Java應用。基於此:

    1. MPJ Express運行時動態地決定每一個節點中運行的線程數

    2. hybdev建立一個鏈接網絡中全部JVM的網絡device實例

    3. 每一個節點建立一個smpdev實例

    4. smpdev線程共享網絡device,以便在網絡中進行通訊

  • 網絡中的每一個節點用網絡device的PID進行標識,這個PID座位網絡ID

  • 網絡中的smpdev線程用他們的PID進行標識,這些PID也叫做線程ID

  • 每一個節點僅使用一個網絡device或固定數量的線程使得MPJ Express 可以利用更多的Java線程而不是進程,這樣能夠極大地減小device的初始化時間和網絡資源開銷。

5.1.2通訊

clipboard.png

  • 到達的信息被放入隊列,用戶調用MPI.Recv()取出消息

clipboard.png

  • smpdev和niodev實現了RecvQueue以用來保存當前用戶發出的Recv()方法請求後尚未徹底接受的信息。

  • ArriveQueue用來保存已經徹底接受到的信息,但Recv()方法不是由用戶發出的

  • 網絡device座位smpdev線程間的共享網絡通道。

    • 當同一節點中的2個線程想得到一條來自某個遠程source的信息時,就會發生接受錯誤。任何線程都能獲得被定向到對等縣城的信息。

      • 解決:在key中增長destination線程的UUID,這樣,niodev就能區分destination線程。source和destination的UUID在信息的頭部

  • MPJ Express 能夠用MPI.ANY_SOURCE來檢測通配符信息

    • 在hybdev中,首先要解決用哪一個device來檢索這樣的信息

    • 解決:在hybdev中啓動一個新進程,該進程在smpdev隊列和正在被使用的網絡device中搜索通配符信息,找到後取出信息。

5.1.3 控制網絡擁塞

  • hybdev通訊device利用單個計算節點中的多線程,這些單個計算節點在節點間通訊時,共享單個網絡通道,在以前的試驗中發現,共享單個網絡通道會在這個通道上發生擁塞(尤爲是在多核節點中)。

    • 解決:每一個節點引入多個網絡通達————>每一個節點建立多個bybdev實例,每一個實例在單獨的JVM中。這樣,每一個節點有多個hybdev實例,每一個bybdev實例有本身的用於多節點通訊的網絡通道。bybdev的實例數有每一個節點建立的的進程數決定,而進程是MPJ Express軟件的可配參數。

5.2 Native Device

clipboard.png

clipboard.png

clipboard.png

  • 對於點對點通訊,native device 使用叫做mpjbuf的MPJ Express中間緩衝層。

  • mpjbuf實現類 ————> NIO Buffer

  • 使用NIO Buffer 時,應用數據以字節形式被複制到ByteBuffer中,而後送到mpjdev層 ,java NIO yong allocateDirect()方法吧ByteBuffer分配到JVM內存外面,這樣native device就能直接獲取ByteBuffer內存。native device獲得地址後,把地址傳給底層的本地MPI庫。此處要注意,由於正在使用ByteBuffer進行數據通訊,MPI_BYTE數據類型被用做全部的點對點通訊。

6.性能評估

clipboard.png

clipboard.png

相關文章
相關標籤/搜索