Matab分布式陣列

2021-10-08 07:04:03 字數 2669 閱讀 4801

最近在學習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顯示分布式陣列的方式不同。另外,在不同的並行結構中,分布式陣列的顯示方式也不相同。下面分別針對

parallel jobspmd並行結構進行說明。

1.parallel job中

由於參考書籍是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.分布式...