最近在學習matlab平行計算,發現關於這方面的部落格比較少,要麼就時間比較久遠,matlab版本更新了,原來的**函式無效。要麼就寫的比較簡單,只解釋了並行兩個字的大體意思。所以就決定自己在學習的時候,分享一些學習資料。
與普通平行計算資料型別(同體變數、異體變數和獨有變數)相比,分布式陣列與申行程式 中的 matlab陣列差異最大。因此,分布式matlab陣列的建立和使用比較複雜。鑑於分布式陣列在 matlab並行程式設計中擁有的重要作用,有必要對其進行詳細說明。分布式陣列擁有統一的變數名,但變數的資料內容分布在各工作單元worker上。
通過分布式陣列可以達到兩個目的:
一是可以將資料分布儲存到各工作單元中,降低對單個工作單元硬體配置的要求;
二是通過分布式陣列簡化 matlab客戶端、各工作單元之間的資料傳輸方式。
parpool()
;spmd
a=rand
(100
,300);
%預設情況下,按列分割
b=codistributed
(a);
bend
%通過建立 codistributor1d類建立使用者自定義分割方式
spmd
a=rand
(100
,300);
%按行分割,每個計算單元分配50行資料
codist=
codistributor1d(1
,[5050])
;%對於codistributor1d,第乙個引數 1按行,2按列(預設),
%第二個引數是分配情況,這裡是分配給lab1 50行,lab2 50行,
%此處省略的第三個引數,是整體的大小。
b=codistributed
(a, codist);b
end
在client和worker中, matlab顯示分布式陣列的方式不同。另外,在不同的並行結構中,分布式陣列的顯示方式也不相同。下面分別針對1.parallel job中parallel job和spmd並行結構進行說明。
由於參考書籍是2023年出版的,筆者在看這部分的時候,輸入源**,在matlab 2019a中無法執行,便到官網查詢是否有關於parallel job相關的,最新的官方文件是沒有這部分內容的,因此涉及到這個的,我們暫時先跳過。
2.spmd中
在spmd並行結構內部顯示分布式陣列時, matlab按照工作單元端方式進行顯示。在spmd並行結構外部顯示分布式陣列時, matlab按照客戶端方式進行顯示。在 matlab客戶端,可以通過 distributed物件方便地檢視分布式陣列。下面通過 disp codistributed arrayspmd例項**進行說明。
function dispcodistributedarray_spmd()
%function dispcodistributedarray_spmd()
parpool(2
);spmd
a =ones(2
,2)*labindex;
part =
ones(1
,numlabs)*2
; codist =
codistributor1d(2
,part,[2
sum(
part(:
))])
; a = codistributed.
build
(a,codist)
;%在工作單元中顯示分布式變數a
disp
(a);
end%在matlab client端顯示分布式變數a
disp
(a);
delete
(gcp
('nocreate'))
;
在 matlab中,分布式陣列是乙個物件。localpart和 codistributor是分布式陣列的兩個屬性。 localpart屬性表示當前工作單元中分配的資料, codistributor物件則包含了預設的或者使用者指定的分布式陣列的分割方式。spmd並行結構中,在 matlab client端通過 distributed物件檢視分布式陣列非常方便,使用者幾乎可以忽略分布式陣列與一般 matlab陣列之間的差別。
在 matlab client端分布式陣列一般由 distributed物件操作,在 matlab並行程式中,分布式陣列一般由 codistributed陣列操作。
distributed陣列和 codistributed陣列本質上是完全相同的,只是建立機理和訪問位置不同。
distributed陣列實際上是在 matlab客戶端構建,將資料分割後傳送到各個lab中,而 codistributed陣列實際上是在平行計算單元中建立的。
只有在spmd並行結構中, distributed陣列和 codistributed陣列才能互相訪問。在其他並行結構中,需要將 codistributed陣列轉換為其他型別的陣列才能在matlab client端訪問。
未完待續
分布式 分布式鎖
本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...
分布式 分布式事務
是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...
分布式之分布式事務
被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...