我的實驗室有五颱雙核pentium d 925計算機,這正適合用來做分布式或並行式計算。我打算只呼叫那些計算機中的乙個核參與計算,留下乙個核可以讓其他人正常地使用該計算機。我們在這裡將會介紹matlab中distributed computing toolbox的基本使用方法,目標是實現簡單的分布式計算。
distributed computing toolbox就是分布式計算工具箱,簡稱dct,其可以在多台計算機組成的cluster中實現分布式或並行式計算。簡單來說,我們是把乙個很繁重的工作,分解成許多小任務,然後分給不同的計算機去處理,最後把計算結果彙總,以達到提高計算效率的目的。
matlab的做法是這樣的:在每台參與計算的計算機中啟動乙個叫matlab distributed computing engine的服務,該服務能啟動參與計算的worker的matlab session和管理各台計算機workers的job manager。
job manager對workers進行管理
,給workers分配計算任務
,接收workers計算後的結果
。而你本人就是client
,你要把你的工作分解為多個任務,然後把任務給job manager。job manager就會根據workers的多少和空閒情況,適當地把任務分配給workers去做。workers完成任務後,會把結果返回給job manager。當所有workers都完成任務後,你,即是
client,便可以從job manager裡取回結果。
具體的概念可以參考matlab的幫助,我們也不能說得很準確。我們在這裡只想給出使用matlab實現分布式計算的簡單步驟,以便初學者快速入門。
1、區域網ip位址分配與配置
首先第一步要做的,就是令每台要參與計算的計算機組成區域網。比如我有三颱計算機,其ip位址分別為192.168.1.101-192.168.1.103,以下簡稱計算機名為101,102和103。
2、分布式計算引擎服務的啟動
在三颱計算機中安裝matlab distributed computing engine(mdce)服務。
安裝方法為:如matlab的安裝位址為c:\program files\matlab\r2006b,則start->run->cmd到命令列視窗,進入c:\program files\matlab\r2006b\toolbox\distcomp\bin目錄,執行
mdce install(在matlab2012下沒找到此命令)
命令安裝mdce服務。接著去控制台->管理工具->服務,檢視matlab distributed computing engine的屬性。
進入登入頁,選擇「此帳戶」,輸入nt authority\networkservice,刪除下面的密碼,讓該服務以networkservice的形式登入,以便該服務訪問共享的對映網路驅動器中的原程式檔案。接著便可以啟動該服務了。注意以後重新開機,該服務都會啟動,當然你可以設定讓它手動啟動。
3、啟動job manager。
任一台計算機都可以啟動job manager,只要mdce服務啟動了即可。比如使用計算機101,在c:\program files\matlab\r2006b\toolbox\distcomp\bin目錄下,執行以下命令:複製內容到剪貼簿**:startjobmanager -name frenseljobm
該命令啟動jobmanager,其名字叫frenseljobm,啟動地點為計算機101。
4、啟動workers。任一台計算機都可以啟動workers,只要mdce服務啟動了即可。比如使用計算機101,在c:\program files\matlab\r2006b\toolbox\distcomp\bin目錄下,執行以下命令:複製內容到剪貼簿**:startworker -jobmanagerhost 192.168.1.101 -jobmanager frenseljobm -name worker1
此命令指明在計算機192.168.1.101中,啟動名為worker1的worker,而該worker受名為frenseljobm的jobmanager管理。就是說來自鄉下101的可憐工人worker1,成為萬惡的監工frenseljobm的「馬仔」了。接著,監工frenseljobm要在不同村102和103中雇用更多的工人worker2、worker3。執行如下的命令:複製內容到剪貼簿**:startworker -jobmanagerhost 192.168.1.101 -jobmanager frenseljobm -name worker2 -remotehost 192.168.1.102
即可在102計算機中啟動乙個新的,名為worker2的worker,如此類推啟動103計算機的worker3。使用nodestatus命令可以檢視節點的狀態,加上-remotehost可以檢視其他節點的狀態。
5、共享設定
如令計算機101為client,即我們的程式在這裡編寫的。設程式檔案位於d:\matlab_code\testdct中。共享出資料夾matlab_code,在資料夾中按工具->對映網路驅動器->令碟符為z:->資料夾裡填\\192.168.1.101\matlab_code。於是z:\testdct便成為放置你程式的地方了。以同樣的方法,讓計算機102和103都建立對映網路驅動器,令碟符為z:,資料夾裡填\\192.168.1.101\matlab_code。這時三颱機都可以通過z:\testdct訪問原程式檔案。
6、測試
這裡給出測試的**。首先寫乙個函式,模擬我們實際的工作。複製內容到剪貼簿**:% hp.m
function f = hp(m, n)
h1 = zeros(n);
h2 = zeros(n);
for i = 1 : m
h = h1 + h2;
endf = h;
end
function f = hp(m, n)
h1 = zeros(n);
h2 = zeros(n);
for i = 1 : m
h = h1 + h2;
endf = h;
end將此程式hp.m放在d:\matlab_code\testdct中。此函式計算n維隨機矩陣的加法m次。接著建立另乙個m檔案,做具體的分布式計算。複製內容到剪貼簿**:% rundct.m
tic% 尋找資源,比如jobmanager在什麼地方,叫什麼名字。
jm = findresource('scheduler', 'type', 'jobmanager', 'name',...
'frenseljobm', 'lookupurl', '192.168.1.101');
% 使用剛才找到的資源建立乙個工作
job = createjob(jm);
% 設定該工作的檔案關聯,讓所有workers都可以找到原程式檔案。
set(job, 'pathdependencies', )
% 另一種方法,把用到的原程式檔案傳給所有workers。
% set(job, 'filedependencies', )
n = 100;
m = 1000000;
% 建立三個任務,每任務都是算hp(m, n)。
createtask(job, @hp, 1, );
createtask(job, @hp, 1, );
createtask(job, @hp, 1, );
% 提交工作給jobmanager。
submit(job)
% 等待所有workers都把任務做完。
waitforstate(job, 'finished')
% 取出計算結果。
results = getalloutputarguments(job);
toc同樣地,該程式rundct.m也是放在d:\matlab_code\testdct中。該程式計算了三次100維矩陣的加法1000000次,即算了100維矩陣的加法3000000次。如果在單機上執行:複製內容到剪貼簿**:>> tic, a = hp(3000000, 100); toc
elapsed time is 63.096369 seconds.而使用三颱機作分布式計算時:複製內容到剪貼簿**:>> rundct
elapsed time is 24.323556 seconds.
效率有明顯的提公升。但注意到,當第一次進行分布式計算時,其他幾台機要從z:\testdct中讀取原程式檔案,會使得計算速度降低。
總結來說,matlab的distributed computing toolbox為我們提供了一種簡便的分布式或並行式計算的實現方法。以上所寫的是為了對dct具體做法的整個過程做一次簡單的介紹,我也是初學使用這個工具箱,文章可能很粗糙和存在許多謬誤,敬請指正。
分布式 集群
效能是乙個多方面綜合的結果,遵循短板理論。系統中任何乙個部分成為效能瓶頸,都會影響整個系統的效能表現 對於web應用,首先第一步是響應http請求,即使後端的效能再好,如果在這裡出現瓶頸,整個系統的效能也會很差,類似於乙個很大的水瓶,但是入水口很小。在這個環節,可以通過dns分流,負載均衡等方式改善...
分布式OR集群
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 分布式是相對中心化而來,強調的是任務在多個物理隔離的節點上進行。中心化帶來的主要問題是可靠性,若中心節點宕機則整個系統不可用,分布式除了解決...
分布式 集群
在談起集群,分布式之前,首先我們先從乙個簡單的小例子來講解下從單機到集群到分布式的乙個發展過程。需求 搭建乙個線上 服務。開始,開發人員比較少,整個公司的業務也剛起步,機器也只有幾台,為了能夠快速上線整個服務,我們開發人員選擇在一台機器上開發並上線,整個專案都是由單台伺服器提供。這也就是單機結構。後...