1. 程式人生 > >【平行計算】字首和並行思路

【平行計算】字首和並行思路

一.定義

如果給定一個數列a[n],令S[k] = a[0]+a[1]+…+a[k],(k = 0, 1, 2…n-1),數列S[k]即為數列a[n]的字首和。

二.序列演算法

很容易就能想到序列的演算法:

S[0] = a[0];
for (int i = 1; i < n; i++)
    S[i] = S[i-1] + a[i];

三.並行演算法

我們用一個實際的例子來說明本問題的並行解題思路。

假設有4個處理器要計算以下16個整數的字首和:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

1.將上面資料平分成4組,每個處理器計算一組資料的字首和(單個處理器內部序列計算,多個處理器並行):

(1 2 3 4) (5 6 7 8) (9 10 11 12) (13 14 15 16)
—>
(1 3 6 10) (5 11 18 26) (9 19 30 42) (13 27 42 58)

2.選取每組的最後一個數據,對這幾個資料計算字首和:

(1 3 6 10) (5 11 18 26) (9 19 30 42) (13 27 42 58)
–>
(1 3 6 10) (5 11 18 36) (9 19 30 78) (13 27 42 136)

此時,每組最後一個數據的值已經變成了原始資料在它所處位置之前(包含本位置)的所有資料的和。例如:

36 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8

78 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12

3.從第2組數開始,將每組中的數(除最後一個數外)加上它的前一組數的最後一個數,即可得到所有數的字首和:

(1 3 6 10) (5+10 11+10 18+10 36) (9+36 19+36 30+36 78) (13+78 27+78 42+78 136)
–>
(1 3 6 10) (15 21 28 36) (45 55 66 78) (91 105 120 136)

至此,並行字首和計算結束,實際應用中我們推廣到p個處理器,n個數即可。

**在平行計算中,我們應該使用盡量多的處理器,這樣子才能發揮出並行的優勢!(如果處理器過少,通訊成本以及其他並行開銷將使得演算法效率不如序列演算法)

相關推薦

平行計算字首並行思路

一.定義 如果給定一個數列a[n],令S[k] = a[0]+a[1]+…+a[k],(k = 0, 1, 2…n-1),數列S[k]即為數列a[n]的字首和。 二.序列演算法 很容易就能想到序列的演算法: S[0] = a[0]; for (int i

平行計算用MPI進行分散式記憶體程式設計(二)

 通過上一篇中,知道了基本的MPI編寫並行程式,最後的例子中,讓使用0號程序做全域性的求和的所有工作,而其他的程序卻都不工作,這種方式也許是某種特定情況下的方案,但明顯不是最好的方案。舉個例子,如果我們讓偶數號的程序負責收集求和的工作,情況會怎麼樣?如下圖:  

平行計算Bitonic Sort(雙調排序)基礎

雙調序列 雙調序列(Bitonic Sequence)是指由一個非嚴格增序列X和非嚴格減序列Y構成的序列,比如序列(23,10,8,3,5,7,11,78)。 定義:一個序列a1,a2,…,an是雙調序列(Bitonic Sequence),如果: (1)

Python平行計算Python 多核平行計算

以前寫點小程式其實根本不在乎並行,單核跑跑也沒什麼問題,而且我的電腦也只有雙核四個超執行緒(下面就統稱核好了),覺得去折騰並行沒啥意義(除非在做IO密集型任務)。然後自從用上了32核128GB記憶體,看到 htop 裡面一堆空載的核,很自然地就會想這個並行必須去折騰一下。後面發現,其實 Python 的並行真

演算法競賽進階指南字首BZOJ1218鐳射炸彈

題目是二維字首和,N^2完成維護 S[i,j]=S[i-1,j]+S[i,j-1]+A[i,j],簡化操作資料直接輸入S中 題目中要注意目標的座標,往往被包含在x+1,y+1之中 #include<cstdio> #include<algorithm> using namespa

Codeforces Round #520 C.Banh-mi字首+

C. Banh-mi 題意 題意就是給你一個01串,q次詢問每次詢問一段區間題意就是給你一個01串,q次詢問每次詢問一段區間題意就是給你一個01串,q次詢問每次詢問一段區間 每次詢問詢問的是:最初區間內0的權值是0,1的權值是1每次詢問詢問的是:最初區間內0的權

離散+二維字首Gym - 101991D - Dull Chocolates

題目連結<https://cn.vjudge.net/problem/2049045/origin> 題意: 在一個N*M的棋盤中,有K個白子,其他的都是黑子。問有多少個字首和矩陣包含奇數個白子,多少個包含偶數個白子。 (1≤N,M≤1e9,1≤K≤1e3).

平行計算-CUDA開發淺談GPU平行計算新趨勢

 隨著GPU的可程式設計性不斷增強,GPU的應用能力已經遠遠超出了圖形渲染任務,利用GPU完成通用計算的研究逐漸活躍起來,將GPU用於圖形渲染以外領域的計算成為GPGPU(General Purpose computing on graphics proces

前端面試變數型別計算

1.題目 1.JS使用typeof能得到哪些型別 === 和 == 的選擇 JS中有哪些內建函式 JS變數按儲存方式分為哪些型別,並描述其特點 如何理解JSON 2.知識點 2.1 值型別和引用型別 值型別(boolean,string,

平行計算-CUDA開發FPGA 設計者應該學習 OpenCL及愛上OpenCL的十個理由

作為OpenCL CodeBench的開發者,Amdahl軟體公司始終堅信OpenCL能夠帶來巨大的利益,也從未懷疑過OpenCL標準的成功性。現在人們對計算效能的要求越來越高,在不超過發熱量和功耗的限制範圍,我們相信多核和多核系統提供了一個可行的解決方法。對於OpenCL使用者來說,OpenCL標準的優

平行計算-CUDA開發CUDA軟體架構與Nvidia硬體對應關係

硬體基本架構 實際上在nVidia的GPU裡,最基本的處理單元是所謂的SP(Streaming Processor),而一顆nVidia的GPU裡,會有非常多的SP可以同時做計算;而數個SP會在附加一些其他單元,一起組成一個SM(Streaming Multiprocessor)。幾個SM則會在組成所

平行計算-CUDA開發OpenACC與OpenHMPP

在西雅圖超級計算大會(SC11)上釋出了新的基於指令的加速器並行程式設計標準,既OpenACC。這個開發標準的目的是讓更多的程式設計人員可以用到GPU計算,同時計算結果可以跨加速器使用,甚至能用在多核CPU上。出於顯而易見的原因,NVIDIA在大力推廣和支援OpenACC。

平行計算-CUDA開發從零開始學習OpenCL開發(一)架構

本文將作為我《從零開始做OpenCL開發》系列文章的第一篇。 1 異構計算、GPGPU與OpenCL   OpenCL是當前一個通用的由很多公司和組織共同發起的多CPU\GPU\其他晶片 異構計算(heterogeneous)的標準,它是跨平臺的。旨在充分利用G

計算機視覺平行計算與CUDA開發GPU硬解碼---CUVID

問題描述:專案中,需要對高清監控視訊分析處理,經測試,其解碼過程所佔CPU資源較多,導致整個系統處理效率不高,解碼成為系統的瓶頸。 解決思路: 利用GPU解碼高清視訊,降低解碼所佔用CPU資源,加速解碼過程。 一、OpenCV中的硬解碼 OpenCV2.4.6中,

平行計算-CUDA開發GPGPU OpenCL/CUDA 高效能程式設計的10大注意事項

1.展開迴圈 如果提前知道了迴圈的次數,可以進行迴圈展開,這樣省去了迴圈條件的比較次數。但是同時也不能使得kernel程式碼太大。   迴圈展開程式碼例子: 1 #include<iostream> 2 using namespace std; 3 4 int main(){

矩陣計算矩陣乘法其一:基礎符號演算法

矩陣符號 如果用表示所有實數的集合,那麼我們用表示所有的實數矩陣組成的向量空間,即: 其中,大寫字母(如)表示矩陣,帶下標的小寫字母(如)表示矩陣中的元素。除了用表示矩陣中第行第列的元素之外,也可以用和表示。 矩陣操作 矩陣轉置(transposition): 矩陣加法(addition): 標量-矩陣乘

Sqlserver系列CASTCONVERT

數值 定義 內容 ros 如何 turn 標量 sdn 相同 1 概述 本篇文章主要講解SqlServer中類型轉換涉及的兩個函數:CAST和CONVERT。 2 具體內容 2.1 CAST (1)作用:將一種數據類型的表達式轉換為另一種

簡單理解gulpwebpack的區別

task ont 是個 多個 自動化構建 簡單明了 能夠 基本 指正 Gulp和Webpack的基本區別: gulp可以進行js,html,css,img的壓縮打包,是自動化構建工具,可以將多個js文件或是css壓縮成一個文件,並且可以壓縮為一行,以此來減少文件體積,加快

HTML基礎表格表單

天津 adding 文字 最小 words 常見 jpg checked 搜索引擎 本次博客的主要內容如下: meta和link 表格 表單 meta和link meta meta的屬性有兩種:name和http-equiv。 name屬性主要用於描述

JS點滴substringsubstr以及slicesplice的用法區別。

[0 相等 交換 top subst char ima cas 負數 那麽就由一道筆試題引入吧,已知有字符串a=”get-element-by-id”,寫一個function將其轉化成駝峰表示法”getElementById”; var a = "get-element-