国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

MATLAB并行計算解決方案

2016-10-28 16:11:05姚尚鋒劉長江唐正華
計算機時代 2016年9期
關鍵詞:并行計算仿真建模

姚尚鋒+劉長江+唐正華

DOI:10.16644/j.cnki.cn33-1094/tp.2016.09.021

摘 要: 為了利用分布式和并行計算來解決高性能計算問題,本文介紹了利用MATHWORKS公司開發(fā)的并行計算工具箱在MATLAB中建模與開發(fā)分布式和并行應用的一些方法;包括并行for循環(huán)、批處理作業(yè)、分布式數(shù)組、單程序多數(shù)據(jù)(SPMD)結構等。用這些方法可將串行MATLAB應用程序轉換為并行MATLAB應用程序,且?guī)缀醪恍枰薷拇a和低級語言編寫程序,從而提高了編程和程序運行的效率。用這些方法來執(zhí)行模型,可以解決更大的問題,覆蓋更多的仿真情景并減少桌面資源。

關鍵詞: 建模; 仿真; 并行計算; MATLAB

中圖分類號:TP31 文獻標志碼:A 文章編號:1006-8228(2016)09-73-03

Parallel computing solutions with MATLAB

Yao Shangfeng, Liu Changjiang, Tang Zhenghua, Dai Di

(Simulation Training Center, Armored Force Institute, Bengbu, Anhui 233050, China)

Abstract: For the use of distributed and parallel computing to solve the problem of high-performance computing, this article describes the use of Parallel Computing Toolbox developed by MATHWORKS Company and some methods of parallel applications, including parallel for loop, batch jobs, distributed arrays, Single Program Multiple Data (SPMD) structure. by the methods, the serial MATLAB applications can be converted to parallel MATLAB applications, and almost no need to modify the code and program in low level languages, thereby increasing the efficiency of programming and operation. Use this method to perform model can solve bigger problems, cover more simulation scenarios and reduce the desktop resources.

Key words: modeling; simulation; parallel computing; MATLAB

0 引言

用戶面臨著用更少的時間建立復雜系統(tǒng)模型的需求,他們使用分布式和并行計算來解決高性能計算問題。MATHWORKS公司開發(fā)的并行計算工具箱(Parallel Computing Toolbox)[1-5]可以在MATLAB中建模和開發(fā)分布式和并行應用,并在多核處理器和多核計算機中執(zhí)行,解決計算、數(shù)據(jù)密集型問題[2],而且并不離開即使的開發(fā)環(huán)境;無需更改代碼,即可在計算機集群上運行同一個應用程序(使用MATLAB Distributed Computing Server)。并行的MATLAB應用程序也可以作為可執(zhí)行程序或共享庫(用MATLAB Compiler構建)分發(fā),這些可執(zhí)行程序或共享庫可以訪問MATLAB。

1 并行for循環(huán)

并行for循環(huán)提供了一種在多個MATLAB worker(從客戶會話中單獨運行的MATLAB計算引擎)間分配任務的方式。使用該循環(huán),可以將獨立的循環(huán)迭代自動分配給多個MATLAB worker。例如,100次迭代的循環(huán)可以同時在20個MATLAB worker集群上運行,從而每個worker只執(zhí)行五次迭代循環(huán),整體上提高了循環(huán)的速度。并行for循環(huán)用關鍵字parfor代替關鍵字for。parfor結構管理著MATLAB客戶端與worker之間的數(shù)據(jù)和代碼傳輸。它會自動檢測是否有worker,如果沒有,則還原為串行方式。

下面給出如何將一個簡單的for循環(huán)修改為一個并行的for循環(huán)[1,6]。這一循環(huán)沒有很多的迭代,也不需要很長時間來執(zhí)行,但可以應用相似的方法到更大的循環(huán)。對于這一簡單的例子,我們可能不會注意到執(zhí)行速度的增加,但對于更大的循環(huán),執(zhí)行速度的增加是相當可觀的。

假設用for循環(huán)創(chuàng)建一個正弦波并繪制波形:

for i=1:1024

A(i)=sin(i*2*pi/1024);

end

plot(A)

為了將其修改為并行for循環(huán)代碼,首先按以下方式打開MATLAB池,這樣將保留三個本地worker運行循環(huán)迭代。

matlabpool open local 3

然后,使用parfor修改代碼運行并行for循環(huán):

parfor i=1:1024

A(i)=sin(i*2*pi/1024);

end

plot(A)

此循環(huán)中的惟一差別是關鍵字parfor代替了for。循環(huán)運行后,其結果與for循環(huán)沒有任何區(qū)別。任務完成后,關閉MATLAB池并釋放worker。

matlabpool close

2 批處理作業(yè)

當與MATLAB客戶端交互會話工作時,可以卸載工作到一個運行批處理作業(yè)的MATLAB worker。執(zhí)行此任務的命令是異步的,這意味著客戶端MATLAB進程不會受阻,你能繼續(xù)你的交互式會話,而MATLAB worker負責處理代碼。MATLAB worker可以運行在同一臺機器上,或者如果使用MATLAB分布式計算服務器,也可以運行在遠程集群機器上[4]。

為了卸載工作從MATLAB客戶端到一個worker,可以使用批處理命令。下面的示例使用上面介紹的for循環(huán)。

首先創(chuàng)建和編輯文件名為mywave的文件[6];文件內(nèi)容如下。

for i=1:1024

A(i)=sin(i*2*pi/1024);

end

保存文件并關閉編輯器。然后,在MATLAB命令窗口使用批處理命令在一個單獨的MATLAB worker中運行腳本。

job=batch('mywave')

批處理命令不阻止MATLAB,所以你必須等待作業(yè)完成,然后才能檢索和查看它的結果。

wait(job)

“l(fā)oad”命令將worker工作空間的變量轉移到客戶端工作空間,在這里你可以查看結果。

load(job, 'A')

plot(A)

最后,當作業(yè)完成,刪除其數(shù)據(jù)。

destroy(job)

3 批處理并行循環(huán)

在前面兩個例子中,一個修改了for循環(huán)變?yōu)閜arfor循環(huán),一個提交腳本for循環(huán)作為批處理作業(yè)。下面將它們結合起來創(chuàng)建一個批處理parfor循環(huán)。

首先,在MATLAB編輯器中打開腳本文件mywave并修改腳本,變for循環(huán)為parfor循環(huán)。

parfor i=1:1024

A(i)=sin(i*2*pi/1024);

end

保存文件并關閉編輯器。然后,像前面一樣用批處理命令運行腳本,但需要表明該腳本使用MATLAB池做并行循環(huán)。

job=batch('mywave', 'matlabpool', 3)

此命令指定三名worker(不包括運行批處理腳本的worker)執(zhí)行循環(huán)迭代。因此,本例使用四個本地worker;等待并查看結果。

wait(job)

load(job, 'A')

plot(A)

最后,當作業(yè)完成,刪除其數(shù)據(jù)[4]。

destroy(job)

4 分布式數(shù)組和單程序多數(shù)據(jù)

假如有一個數(shù)組,它相對計算機的內(nèi)存過大,因此它不容易在單一的MATLAB中處理。并行計算工具箱可以將這個數(shù)組分配到多個MATLAB worker中,每個worker只包含數(shù)組的一部分。然而,你可以將整個數(shù)組作為一個單一實體進行操作;每個worker僅操作它所管理的部分,但各worker間在需要時可自動相互傳送數(shù)據(jù),就像使用常用數(shù)組一樣。工具箱提供了150多個用于分布式數(shù)組的重載MATLAB函數(shù);使得我們可以快速的設計開發(fā)并行程序,而不需要去處理低層次的消息傳遞的細節(jié)問題。

分布式數(shù)組的創(chuàng)建有多種方法,可直接使用創(chuàng)建函數(shù)如rand,ones,,zeros創(chuàng)建;下面介紹使用distributed函數(shù)創(chuàng)建分布數(shù)組的方法。

首先,打開MATLAB池。

matlabpool open %用戶默認并行配置

然后,使用distributed函數(shù)創(chuàng)建分布數(shù)組。

M=magic(4) %客戶工作空間中的4×4魔方矩陣

MM=distributed(M);

這里,MM是分布數(shù)組,等同于M;可以象任何其他數(shù)組一樣操縱或訪問它的元素。

M 2=2*MM; %M2也是分布數(shù)組,計算在worker中進行

x=M2(1,1); %客戶端x等于M2的第一個元素

處理完畢后,關閉matlab池。

matlabpool close

單程序多數(shù)據(jù)(SPMD)結構可以定義一個并行運行在MATLAB池中所有l(wèi)abs (workers)上的代碼塊。這里的lab,當MATLAB工作進程開始工作時,它們在默認情況下獨立工作,也可以相互通信協(xié)同工作,這時它們被稱為labs。

matlabpool %使用默認并行配置

SPMD %默認使用池中的所有l(wèi)abs

R=rand(4);

end

此代碼創(chuàng)建一個獨立的4×4隨機矩陣R,其元素存于MATLAB池中所有l(wèi)abs上。

5 結束語

并行計算工具箱延伸了MATLAB交互式環(huán)境,并行命令窗口即能提供熟悉的MATLAB環(huán)境原型用于開發(fā)分布式和并行應用程序,也能提供在批處理環(huán)境中脫機執(zhí)行分布式和并行應用程序。無需為特定的硬件和網(wǎng)絡架構編寫程序,就可方便的將串行MATLAB應用程序轉換為并行MATLAB應用程序,從而能夠以較高的級別在MATLAB中執(zhí)行任務及數(shù)據(jù)并行算法。用這種方法來執(zhí)行模型,可以解決更大的問題,覆蓋更多的仿真情景并減少桌面資源。

參考文獻(References):

[1] 劉維編著.實戰(zhàn)Matlab之并行程序設計[M].北京航空航天大

學出版社,2012.

[2] 高山流水.Matlab并行計算工具箱及MDCE介紹[M/OL].

http://blog.sina.com.cn/s/blog_45eac6860100lzlk.html.

[3] 吳鵬編著.Matlab高效編程技巧與應用[M]. 北京航空航天大

學出版社,2010.

[4] 靖穩(wěn)峰.Matlab并行程序設計[M/OL].http://wenku.baidu.com/

link?url=yKuBHklFu3oxBDDUl6BXr4xzRhbepRJlhJoWwUlbr_

FMvRNR3VDhnw-AvC9wJvSmuMVC3TAH3A5ncOO3Ep

WVX7HuBObM9ubhWzlr4KXVRpK

[5] 彭代慧,鄒顯春編著.Matlab2013實用教程[M].高等教育出

版社,2014.

[6] 飛思科技產(chǎn)品研發(fā)中心編著.Matlab7基礎與提高[M].電子

工業(yè)出版社,2006.

猜你喜歡
并行計算仿真建模
聯(lián)想等效,拓展建模——以“帶電小球在等效場中做圓周運動”為例
基于PSS/E的風電場建模與動態(tài)分析
電子制作(2018年17期)2018-09-28 01:56:44
不對稱半橋變換器的建模與仿真
云計算中MapReduce分布式并行處理框架的研究與搭建
矩陣向量相乘的并行算法分析
Buck開關變換器的基本參數(shù)設計及仿真分析
試析PLC控制下的自動化立體倉庫仿真情況分析
基于MADYMO的航空座椅約束系統(tǒng)優(yōu)化設計
科技視界(2016年18期)2016-11-03 21:44:44
中國體態(tài)假人模型與FAA Hybrid Ⅲ 型假人模型沖擊差異性分析
科技視界(2016年18期)2016-11-03 20:31:49
并行硬件簡介
双柏县| 兴安县| 沙洋县| 峨眉山市| 辽宁省| 炎陵县| 渝北区| 博白县| 闽清县| 临安市| 金秀| 黄平县| 寿光市| 寿阳县| 丹棱县| 元阳县| 囊谦县| 寻甸| 双鸭山市| 陆丰市| 增城市| 西峡县| 西华县| 保山市| 衡阳县| 达拉特旗| 康保县| 察雅县| 东乡县| 衡南县| 静海县| 鱼台县| 鹤岗市| 丹巴县| 上犹县| 谢通门县| 灵璧县| 象州县| 沅陵县| 京山县| 福鼎市|