用於亞洲期權定價的 Monte Carlo 模擬

NO IMAGE

本文對基於多核處理器和眾核 (MIC) 協處理器的異構英特爾架構系統進行了一項效能優化練習。

注:本實驗根據《利用英特爾至強融核協處理器進行並行程式設計與優化》(”Parallel Programming and Optimization with Intel Xeon Phi Coprocessors”,2015 年第二版)中的第 4.7.1 節和第 4.7.2 節內容操作。如欲獲取本書,請訪問xeonphi.com/book

本文討論瞭如何在異構叢集中實現 MPI 應用的負載平衡。本文涉及的原始碼來自用於亞洲期權定價的 Monte Carlo 模擬。為了便於練習,模擬的實際實施並不重要,如果您有興趣瞭解關於模擬的更多知識,請訪問 Colfax Research 網站。

亞洲期權程式碼示例連結:https://github.com/ColfaxResearch/Asian-Options

學習並編譯 “workdistribution.cc”。然後在所有節點(包括 MIC)間執行 MPI 應用,每個節點執行一個程序。

您會發現負載不平衡,即某個節點比其它節點完成得早。

維持負載平衡的一個簡單方法就是根據目標系統的差異,不均勻地分配任務。實施一個除錯變數 “alpha”(應為 typefloat 或 double),MIC 接受的工作負載數量是 CPU 接受的工作負載數量的 alpha 倍。每個節點應通過計算決定處理哪個選項。為了執行這一操作,使用函式輸入 “rankTypes”,後者儲存了全球所有的節點型別(CPU 或 MIC)。如果“i”佇列節點位於協處理器,則”rankTypes[i]” 為 “1”;如果“i”佇列節點位於 CPU,則 “rankTypes[i]”為 “0”。請確保每一個選項都被計算在內。

編譯並執行該應用。然後,嘗試尋找提供最佳效能的 “alpha” 值。

儘管之前的實施更為簡單,但是存在缺陷 – alpha 值取決於叢集。為了使應用獨立於其執行的叢集,請實施 boss-worker 模式,在該模式下,worker 完成工作後,由 boss 將工作分配給 worker。

編譯並執行程式碼,以檢視效能。請記住,Boss 程序所在的節點應該有兩個程序。

提示:為了實施 boss worker 模式,您將需要一個包含兩個 while 迴圈的 if 語句。worker 迴圈應將佇列傳送到主機,並接收需要計算的索引。主機應使用 MPI_ANY_SOURCE 接收佇列,並將下一個索引傳送到其接收的 worker 佇列。等到沒有需要模擬的選項時,boss 應傳送一個” terminate” 索引(如 -1 索引)。當 worker 收到 “terminate” 索引時,應當退出 while 迴圈。當 “terminate” 傳送到每個程序後,主機應當退出 while 迴圈。最後,請不要忘記在執行 MPI_Reduce 之前首先執行 MPI_Barrier,以確保在模擬結束前完成所有程序。

亞洲期權 程式碼 GitHub 連結:https://github.com/ColfaxResearch/Asian-Options