1. 程式人生 > >【高效能】Matlab的平行計算之spmd

【高效能】Matlab的平行計算之spmd

parfor的並行思想是把同一批資料分給for迴圈中不同的迴圈體,進行處理。spmd的思想則是不同的資料,用同一個程式處理。當然這個程式內部可以編寫針對不同情況的處理程式碼。spmd的內部實現程式碼限制很少,spmd的靈活性比parfor要高得多。

spmd的使用方法如下:

startmatlabpool(2)
spmd 
     a = magic(labindex )%程式碼
end
closematlabpool;
結果:

Lab 1: 
  
  a =
  
       1
  
Lab 2: 
  
  a =
  
       1     3
       4     2

為了處理不同的情況,spmd實際執行時會獲取當前執行緒編號,用常量labindex表示,等同於openMP的omp_get_thread_num()。

問題一:如何在外部手動分配資料?

startmatlabpool(2)
p = Composite();
p{1} = rand(1,3);
p{2} = 'hello';
spmd 
    disp(p);
end
closematlabpool;
結果:

Lab 1: 
           0.793866004096169         0.536373818464747         0.647201517107599
  
Lab 2: 
  hello

composite資料是spmd並行結構中最簡單的資料,每個labindex執行緒只訪問composite{labindex}資料。不可越界。在關閉並行環境後所有的composite資料都沒了。

composite資料每個部分可以有不同的資料型別。

問題二:分散式計算可以用spmd嗎?

of course。不過我也沒有多臺可以分散式計算的電腦,只能試驗一下了。

分散式計算的一大問題是資料的管理。下面分為兩個部分:

1、客戶端分配

客戶端(client)使用distributed語句產生分散式資料。預設根據最後一個維度來分配資料,你也可以自己調。下面原始碼:

startmatlabpool(2)
a = rand(5,2);
p1 = Composite();
b = rand(5,2);
for i = 1:2
    p1{i} = a(:,i);
end
p2 = distributed(b);
%p2 = distributed.rand(5,2);%同樣可以這樣幹
spmd
    disp([p1 getLocalPart(p2)]);
end
closematlabpool;
結果:

Lab 1: 
           0.101441167942127         0.885325931102933
           0.395333513944682         0.140505759300116
           0.604619875183008        0.0679844441385649
           0.102777340759248         0.890917146877593
           0.603123131497137         0.862605458737845
  
Lab 2: 
            0.68058153278091         0.239578384767141
           0.895975215333032         0.435924760832413
           0.584621985559958         0.831829000715115
           0.972073878349711         0.212887327746207
           0.872288140538251          0.18323345771615

請注意獲取p2要使用getLocalPart語句。


2、服務端(執行緒計算端)分配

startmatlabpool(2)
spmd
     X = [1 2;4 5];
    codist = codistributor1d(1, [1 1]);%1表示第一維度切割,行切割,[1 1]表示每個lab分配一行資料
    C = codistributed(X, codist);
    disp([labindex, numlabs]);
    disp(getLocalPart(C));
end
closematlabpool;

結果Lab 1: 
       1     2
  
       1     2
  
Lab 2: 
       2     2
  
       4     5

相關推薦

高效能Matlab平行計算spmd

parfor的並行思想是把同一批資料分給for迴圈中不同的迴圈體,進行處理。spmd的思想則是不同的資料,用同一個程式處理。當然這個程式內部可以編寫針對不同情況的處理程式碼。spmd的內部實現程式碼限制很少,spmd的靈活性比parfor要高得多。 spmd的使用方法如下:

高效能Matlab平行計算parfor

當matlab計算量很大,重複獨立的迴圈計算很多的時候,我們可以使用matlab的平行計算,這裡我先試驗了parfor平行計算。以下程式碼僅適合新版的matlab,改編自《實戰matlab之並行程式設計》。 啟動程式碼: function [pool] = startma

HadoopMapReduce平行計算框架

MapReduce平行計算框架 基本知識 前言 核心概念 計算模型 系統架構 作業配置 計算流程與機制 作業提交和初始化 Mapper Reducer

matlab平行計算parfor

原文:http://blog.sina.com.cn/s/blog_866e7fa70101cv08.html 提高matlab程式碼的執行效率,是很多碼農們的迫切願望和需求。最重要的當然是好的程式碼結構,向量化的語言的高效性是for迴圈拍馬也趕不上的。但是,現實中很多時候我們是

matlab對元素出現的次數進行統計

可以使用hist函式: A = [1 3 5 3 1 5 3 1 1 3 5]; count = hist(A,unique(A)) 1 2 count的結果與unique(A)對應。 對於unique

原創Matlab.NET混合程式設計技巧直接呼叫Matlab內建函式

  在我的上一篇文章【原創】Matlab.NET混編技巧之——找出Matlab內建函式中,已經大概的介紹了matlab內建函式在混合程式設計中的優點,並通過程式找出了matlab中的大部分內建函式,當然更多人關心是如何像我所說得那樣,不用直接編譯,就直接在C#中呼叫這些內建函式。本文就帶你揭開這些謎團

原創Matlab.NET混合程式設計技巧找出Matlab內建函式

  Matlab與.NET的混合程式設計,掌握了基本過程,加上一定的開發經驗和演算法基礎,肯定不難。反之,有時候一個小錯誤,可能抓破腦袋,加班幾個晚上,除錯才能解決。同樣,由於Matlab.NET混編的特殊性,加上MathWorks的原因,英文文件和沒有披露一些詳細的細節(甚至不允許反編譯MWArra

原創探索雲端計算容器底層Namespace

一、先談談程序 在正式介紹Namespace之前,先介紹下程序,因為容器本質上是程序,但是在介紹程序之前,先理清下“程式”和“程序”的關係,這是IT從業人員在日常工作中經常碰到的兩個詞彙,舉個通俗點的例子幫助大家理解,“程式”可以看成是一張機械圖,圖上的內容都是手工畫上去的,相當於是計算機的輸入,在機械圖未正

ShiroApache Shiro架構身份認證(Authentication)

trac pretty asm 安全保障 軟件測試 釋放 model tac 讀取配置文件 Shiro系列文章: 【Shiro】Apache Shiro架構之權限認證(Authorization) 【Shiro】Apache Shiro架構之集成web

Mysql經常使用指令——忘記password

my.cnf 執行cmd mysql blank lan service 重裝 授權 環境變量 上一篇文章基本總結了下myql下通過指令怎麽創建用戶。詳見:【Mysql】經常使用指令之——用戶操作(創建,授權,改動。刪除) 今天說下特殊情況,忘記passw

JavaSE--網絡安全證書、密鑰、密鑰庫等名詞解釋

detail 發的 都是 base64 request 服務器 win art ive 轉載:http://www.cnblogs.com/alanfang/p/5600449.html 那些證書相關的名詞解釋(SSL,X.509,PEM,DER,CRT,CER,KEY,

Effective C#觀後感提高Unity中C#代碼質量的21條準則

們的 嚴格 知識 將不 實現接口 控制流程 effect 序列 狀態 轉自:http://blog.csdn.net/swj524152416/article/details/75418162 我們知道,在C++領域,作為進階閱讀材料,必看的書是《Effective C++

中文分詞HMM模型詳解

實現 含義 jieba 順序 清晰 bsp 中國 matrix 統計 關於HMM模型的介紹,網上的資料已經爛大街,但是大部分都是在背書背公式,本文在此針對HMM模型在中文分詞中的應用,講講實現原理。 盡可能的撇開公式,撇開推導。結合實際開源代碼作為例子,爭取做到雅俗共賞,

AIX系統錯誤--磁盤錯誤

scsi 系統 article root into flag wsh digg kaa AIX系統錯誤之--磁盤錯誤 來源:http://blog.csdn.net/yujin2010good/article/details/40075485 系統環境: 操作系統

學習Unity手遊路<十二>手遊資源熱更新策略探討

似的 remove 方式 comment word rep 熱更新 style encoding http://blog.csdn.net/janeky/article/details/17666409 =================================

轉載python3安裝scrapywindows32位爬坑

命令 cep 3.2 wheel 跳過 。。 學習 自己的 打開 python3安裝scrapy之windows32位爬坑 原創 2016年11月06日 01:38:08 標簽: scrapy / windows / python / 開源框架 / 網絡爬蟲

文件下載斷點續傳(客戶端與服務端的實現)

http協議 當前時間 end box [] ada demo 服務端 sem 【轉】文件下載之斷點續傳(客戶端與服務端的實現) 【轉】文件下載之斷點續傳(客戶端與服務端的實現) 前面講了文件的上傳,今天來聊聊文件的下載。 老規矩,還是從最簡單粗暴的開始。那麽多簡單算簡單

javascriptjavascript設計模式單例模式

函數 設置 tin 私有 資源 公有 key fun 初始化 單例模式: 定義:單例模式之所以這麽叫,是因為它限制一個類只能有一個實例化對象。 實現方法:判斷實例是否存在,如果存在則直接返回,如果不存在就創建了再返回。(確保一個類只有一個實例對象) 特點: 命名空間提供者,

javascriptjavasrcipt設計模式策略模式

影響 配置 可能 pan style 類庫 ava 自由 AC 策略模式支持在運行時由使用者選擇合適的算法,對於使用者而言不用關心背後的具體事項,而使用者自動根據當前程序執行的上下文和配置,從已有的算法列表中選擇出合適的算法來處理當前任務。 1.要解決的問題 2.如何實現

20180417ELK日誌管理filebeat收集分析mysql慢日誌

filebeat slow log pipeline slowlog 環境版本 filebeat: 6.2.3mysql: 5.6.38 錯誤信息 { "_index": "mysql-slow-2018.04.17", "_type": "doc", "_id": "AWLRiD