一種基于mic的隨機(jī)數(shù)發(fā)生器分段式并行化方法
【專利摘要】本發(fā)明公開一種基于MIC的隨機(jī)數(shù)發(fā)生器分段式并行化方法,利用對周期序列分段的方法進(jìn)行并行化,將各個(gè)線程生成的隨機(jī)數(shù)拼接起來形成最終的序列。相對于CPU單線程,MIC平臺下的加速比具有明顯優(yōu)勢。
【專利說明】
一種基于MIC的隨機(jī)數(shù)發(fā)生器分段式并行化方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及常規(guī)類型隨機(jī)數(shù)發(fā)生器的一種分段式并行化方法,尤指針對Intel MIC架構(gòu)的硬件進(jìn)行隨機(jī)數(shù)序列輸出的方法。
【背景技術(shù)】
[0002] 隨機(jī)數(shù)發(fā)生器是用來產(chǎn)生隨機(jī)數(shù)的裝置,一般分為真隨機(jī)數(shù)發(fā)生器和偽隨機(jī)數(shù)發(fā) 生器。目前科學(xué)研究和工程模擬對隨機(jī)數(shù)發(fā)生器的性能及速率要求日益增長,將并行計(jì)算 技術(shù)應(yīng)用于隨機(jī)數(shù)發(fā)生器可快速提高產(chǎn)生效率。另外隨機(jī)數(shù)發(fā)生器的并行化研究工作主要 集中于多核中央處理器(Central Processing Unit,CPU)平臺,缺少基于Intel最新產(chǎn)品 MIC(Many Integrated Core)平臺并行化的相關(guān)理論依據(jù)和性能分析。
[0003] Intel MIC(Many Integrated Core)架構(gòu)具有更小的內(nèi)核和更多的硬件線程,以 及更寬的矢量單元,是提高整體性能、滿足高度并行化應(yīng)用需求的理想之選,它基于x86架 構(gòu),支持0penMP、pThread等并行編程模型。基于MIC架構(gòu)的Xeon Phi計(jì)算加速卡由57~61顆 物理處理核心構(gòu)成,每個(gè)物理核心包含4個(gè)硬件線程,加速卡板載內(nèi)存大小為6GB~8GB,雙 精度計(jì)算峰值計(jì)算能力達(dá)到lTFlops。其在并行計(jì)算方面相比CPU更有優(yōu)勢,解決了高度并 行計(jì)算問題。
【發(fā)明內(nèi)容】
[0004] 發(fā)明要解決的問題
[0005] 本發(fā)明的一個(gè)目的在于克服現(xiàn)有技術(shù)中的不足,提供一種基于MIC的隨機(jī)數(shù)發(fā)生 器分段式并行化方法。
[0006] 用于解決問題的方案
[0007] -種基于MIC的隨機(jī)數(shù)發(fā)生器分段式并行化方法,包括以下步驟:
[0008] 步驟A、獲取劃分步驟,包括
[0009] 步驟Al、獲取原始隨機(jī)數(shù)序列的周期P;
[0010] 步驟A2、獲取可支持的最大線程數(shù)N,每線程可產(chǎn)生的隨機(jī)數(shù)個(gè)數(shù)i = f . *
[0011] 步驟B、主線程讀取參數(shù),計(jì)算各線程初始狀態(tài)seed[id],包括
[0012] 步驟B1、主線程讀取所需要的隨機(jī)數(shù)數(shù)量random_num、分配的線程數(shù)threads_num 以及種子seed,其中 0< random_num < P、0 < thr eads_num < N;
[0013] 步驟B2、建立內(nèi)存區(qū)間result;
[0014] 步驟B3、計(jì)算各線程需要產(chǎn)生的隨機(jī)數(shù)num = random_num/threads_num;
[0015] 步驟M、設(shè)置id的值為1;
[0016] 步驟B5、計(jì)算seed[ id];
[0017] 步驟 B6、若 id > threads_num,則轉(zhuǎn)到步驟 C;
[0018] 步驟B7、id值自增1,然后返回步驟B5;
[0019] 步驟C、MIC線程進(jìn)行計(jì)算,包括
[0020] 步驟Cl、設(shè)置i的初始值為0,U的初始值為0;
[0021] 步驟C2、通過隨機(jī)數(shù)串行算法計(jì)算U;
[0022] 步驟 C3、result[id*num+i] =U;
[0023] 步驟C4、gi>num,則結(jié)束該線程;
[0024]步驟C5、i值自增1,然后返回步驟C3。
[0025] 發(fā)明的效果
[0026]本發(fā)明利用對周期序列分段的方法進(jìn)行并行化,最后將各個(gè)線程生成的隨機(jī)數(shù)拼 接起來形成最終的序列。相對于CHJ單線程,MIC平臺下的加速比具有明顯優(yōu)勢。
【附圖說明】
[0027]圖1為隨機(jī)數(shù)發(fā)生器分段式并行化原理圖;
[0028]圖2為基于MIC實(shí)現(xiàn)隨機(jī)數(shù)發(fā)生器并行化的計(jì)算流程圖;
[0029] 圖3a和圖3b為MRG32k3a基于CPU和MIC并行化后的加速比趨勢圖。
【具體實(shí)施方式】
[0030]以下將結(jié)合實(shí)施例詳細(xì)說明本發(fā)明的各種示例性實(shí)施例、特征和方面。為了更好 的說明本發(fā)明,在下文的【具體實(shí)施方式】中給出了眾多的具體細(xì)節(jié)。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理 解,沒有這些具體細(xì)節(jié),本發(fā)明同樣可以實(shí)施。在另外一些實(shí)例中,對于大家熟知的方法、手 段、材料未作詳細(xì)描述,以便于凸顯本發(fā)明的主旨。
[0031]如圖1所示,本發(fā)明利用對周期序列分段的方法進(jìn)行并行化。首先將周期為P的原 始隨機(jī)數(shù)序列平均劃分成N段(N為最大可支持的線程數(shù)),每段包含i = f個(gè)數(shù),然后每個(gè)線 程從各段的起點(diǎn)開始遞推生成隨機(jī)數(shù)。假設(shè)random_num為需要生成的隨機(jī)數(shù)的總量, threads_num為分配的線程數(shù),則每個(gè)線程產(chǎn)生random_num/threads_num個(gè)隨機(jī)數(shù)。最后將 各個(gè)線程生成的隨機(jī)數(shù)拼接起來形成最終的序列。
[0032] 包括以下步驟:
[0033]步驟A、獲取劃分步驟,包括
[0034]步驟A1、獲取原始隨機(jī)數(shù)序列的周期P;
[0035] 步驟A2、獲取可支持的最大線程數(shù)N,每線程可產(chǎn)生的隨機(jī)數(shù)個(gè)數(shù)I = # . 9
[0036] 步驟B、主線程讀取參數(shù),計(jì)算各線程初始狀態(tài)Seed[id],包括
[0037] 步驟B1、主線程讀取所需要的隨機(jī)數(shù)數(shù)量random_num、分配的線程數(shù)threads_num 以及種子seed,其中 0< random_num < P、0 < thr eads_num < N;
[0038] 步驟B2、建立內(nèi)存區(qū)間result;
[0039] 步驟B3、計(jì)算各線程需要產(chǎn)生的隨機(jī)數(shù)num = random_num/threads_num;
[0040] 步驟Μ、設(shè)置id的值為1;
[0041 ]步驟B5、計(jì)算seed[id];
[0042]步驟 B6、若 i d > threads_num,則轉(zhuǎn)到步驟 C;
[0043] 步驟B7、id值自增1,然后返回步驟B5;
[0044] 步驟C、MIC線程進(jìn)行計(jì)算,包括
[0045] 步驟Cl、設(shè)置i的初始值為0,U的初始值為0;
[0046]步驟C2、通過隨機(jī)數(shù)串行算法計(jì)算U;
[0047]步驟 C3、result[id*num+i] =U;
[0048] 步驟C4、gi>num,則結(jié)束該線程;
[0049]步驟C5、i值自增1,然后返回步驟C3。
[0050]在一種可能的實(shí)施方式中,本發(fā)明包括以下步驟:
[0051 ] 1.準(zhǔn)備工作
[0052] a)研究隨機(jī)數(shù)發(fā)生器串行算法,并獲取其周期P;
[0053] b)確定周期劃分規(guī)則:可支持的線程數(shù)N,每線程可產(chǎn)生的隨機(jī)數(shù)個(gè)數(shù)i = f 八O
[0054] 2.主線程:讀取相應(yīng)參數(shù),計(jì)算各線程初始狀態(tài)Seed[ id]
[0055] a)讀取所需要的隨機(jī)數(shù)數(shù)量random_num、分配的線程數(shù)threads_num以及種子 seed,其中 0< random_num < P、0 < thr eads_num < N;
[0056] b)建立內(nèi)存區(qū)間result;
[0057] c)計(jì)算各線程需要產(chǎn)生的隨機(jī)數(shù)num = random_num/threads_num;
[0058] d) id = 1 ;
[0059] e)計(jì)算seed[id];
[0060] f)若 id>threads_num,則轉(zhuǎn) 3;
[0061] g)id++,Re)。
[0062] 3. MIC線程:通過native、off load等方式控制MIC設(shè)備,各線程同步工作,進(jìn)行以下 相同計(jì)算,如圖2所示,
[0063] a) i = 0 ,U = O ;
[0064] b)通過隨機(jī)數(shù)串行算法計(jì)算U;
[0065] c)result[id*num+i] =U;
[0066] d)gi>num,則結(jié)束;
[0067] e)i++,Rc)。
[0068] 在一種可能的實(shí)施方式中,本發(fā)明的步驟為
[0069] 通過native方式控制MIC設(shè)備,使用C++實(shí)現(xiàn)隨機(jī)數(shù)發(fā)生器MRG32k3a分段式并行化 為例,MRG32k3a遞推公式為:
[0070]
[0071] 其中η 2 3,
[0072] ai,2 = 1403580 ai,3 = -810728
[0073] a2,1 = 527612 a2,3 = -1370589
[0074] mi = 232-209 m2 = 232-2 2 8 5 3
[0075] 產(chǎn)生[0,1)之間的均勻隨機(jī)數(shù)Un。
[0076] Zn= (xi,n+X2,n)m〇d Π11
[0077]
[0078] 其周期P = 2192,設(shè)定最多運(yùn)行N=264個(gè)線程,各線程最多產(chǎn)生L = 2m個(gè)隨機(jī)數(shù)。
[0079] MRG32k3a遞推公式轉(zhuǎn)化為向量形式:
[0080]
[0081] - -, - -
[0082] 在各線程生成隨機(jī)數(shù)之前,需要先計(jì)算各線程的初始值,若0號線程的初始值為 so,則1號線程的初始值為S1,其計(jì)算方法如下:
[0083]
[0084] 根據(jù)公式(xyz)mod P = (((xy)mod p) · z)mod p
[0085] 易得:
[0086] si=(ALSo)mod m=(((AL)mod m) · so)mod m
[0087] 其中,ALmod m可以通過分治算法計(jì)算出來,遞推公式為:
[0088] ALmod m=((AL/2mod m) · (AL/2mod m))mod m
[0089] 以此類推可計(jì)算出各線程初始狀態(tài)Sid,其中0 < id<threads_num。
[0090] 綜上所述,MRG32k3a分段式并行化算法如下:
[0091]算法MRG32k3a分段式并行化算法
[0092] 輸入:種子seed[6],線程數(shù)threads_num,
[0093] 任務(wù)量 random_num
[0094] 輸出:random_hum個(gè)隨機(jī)數(shù)U
[0095] Begin
[0096] (1)主線程
[0099] (2)MIC 設(shè)備,native 模式
[0097]
[0098]
[0100]
[0101] 基于上述實(shí)施例,測試數(shù)據(jù):在CPU平臺1、2、4、8和16個(gè)線程下分別對MRG32k3a產(chǎn) 生1,000,000、10,000,000、100,000,000、1,000,000,000及10,000,000,000個(gè)隨機(jī)數(shù),并在 MIC 平臺 1、2、4、8、16、32、56、112、168 和 224線程個(gè)線程下分別產(chǎn)生 1,000,000、10,000,000、 100,000,000、1,000,000,000及10,000,000,000個(gè)隨機(jī)數(shù)的時(shí)間進(jìn)行測試。相對于CPU單線 程,,MIC平臺下的最優(yōu)加速比為17.73。
[0102] 測試結(jié)果如圖3a和圖3b所示。
[0103] 其中軟硬件環(huán)境如下:
[0104]
[0105]
[0106] 本發(fā)明利用對周期序列分段的方法進(jìn)行并行化,將各個(gè)線程生成的隨機(jī)數(shù)拼接起 來形成最終的序列。相對于CHJ單線程,MIC平臺下的加速比具有明顯優(yōu)勢。
[0107] 雖然已經(jīng)參照以上實(shí)施方式說明了本發(fā)明,但是,應(yīng)該理解的是本發(fā)明不限于所 公開的實(shí)施方式。所附權(quán)利要求書的范圍應(yīng)在最寬泛的范圍內(nèi)進(jìn)行解釋,以涵蓋所有變型、 等同結(jié)構(gòu)和功能。
【主權(quán)項(xiàng)】
1. 一種基于MIC的隨機(jī)數(shù)發(fā)生器分段式并行化方法,其特征在于,包括w下步驟: 步驟A、獲取劃分步驟,包括 步驟A1、獲取原始隨機(jī)數(shù)序列的周期P; 步驟A2、獲取可支持的最大線程數(shù)N,每線程可產(chǎn)生的隨機(jī)數(shù)個(gè)數(shù)^ = 9 步驟B、主線程讀取參數(shù),計(jì)算各線程初始狀態(tài)Seed [ id ],包括 步驟B1、主線程讀取所需要的隨機(jī)數(shù)數(shù)量random_num、分配的線程數(shù)threads_numW及 種子seed,其中 0< random_num < P、0 < t虹eads_num < N; 步驟B2、建立內(nèi)存區(qū)間result; 步驟B3、計(jì)算各線程需要產(chǎn)生的隨機(jī)數(shù)num=random_num/t虹eads_num; 步驟B4、設(shè)置id的值為1; 步驟B5、計(jì)算seed[id]; 步驟B6、若id > threads_num,則轉(zhuǎn)到步驟C; 步驟B7、id值自增1,然后返回步驟B5; 步驟C、MIC線程進(jìn)行計(jì)算,包括 步驟C1、設(shè)置i的初始值為0,U的初始值為0; 步驟C2、通過隨機(jī)數(shù)串行算法計(jì)算U; 步驟 C3、result[id 女 num+i ] =U; 步驟C4、若i >num,則結(jié)束該線程; 步驟巧、i值自增1,然后返回步驟C3。
【文檔編號】G06F7/58GK105843588SQ201610150661
【公開日】2016年8月10日
【申請日】2016年3月16日
【發(fā)明人】宋博文, 周曉輝, 張保東
【申請人】浪潮電子信息產(chǎn)業(yè)股份有限公司