【高效能】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
【Hadoop】MapReduce平行計算框架
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從業人員在日常工作中經常碰到的兩個詞彙,舉個通俗點的例子幫助大家理解,“程式”可以看成是一張機械圖,圖上的內容都是手工畫上去的,相當於是計算機的輸入,在機械圖未正
【Shiro】Apache 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安裝scrapy之windows32位爬坑
命令 cep 3.2 wheel 跳過 。。 學習 自己的 打開 python3安裝scrapy之windows32位爬坑 原創 2016年11月06日 01:38:08 標簽: scrapy / windows / python / 開源框架 / 網絡爬蟲
【轉】文件下載之斷點續傳(客戶端與服務端的實現)
http協議 當前時間 end box [] ada demo 服務端 sem 【轉】文件下載之斷點續傳(客戶端與服務端的實現) 【轉】文件下載之斷點續傳(客戶端與服務端的實現) 前面講了文件的上傳,今天來聊聊文件的下載。 老規矩,還是從最簡單粗暴的開始。那麽多簡單算簡單
【javascript】javascript設計模式之單例模式
函數 設置 tin 私有 資源 公有 key fun 初始化 單例模式: 定義:單例模式之所以這麽叫,是因為它限制一個類只能有一個實例化對象。 實現方法:判斷實例是否存在,如果存在則直接返回,如果不存在就創建了再返回。(確保一個類只有一個實例對象) 特點: 命名空間提供者,
【javascript】javasrcipt設計模式之策略模式
影響 配置 可能 pan style 類庫 ava 自由 AC 策略模式支持在運行時由使用者選擇合適的算法,對於使用者而言不用關心背後的具體事項,而使用者自動根據當前程序執行的上下文和配置,從已有的算法列表中選擇出合適的算法來處理當前任務。 1.要解決的問題 2.如何實現
【20180417】ELK日誌管理之filebeat收集分析mysql慢日誌
filebeat slow log pipeline slowlog 環境版本 filebeat: 6.2.3mysql: 5.6.38 錯誤信息 { "_index": "mysql-slow-2018.04.17", "_type": "doc", "_id": "AWLRiD