主頁 > 後端開發 > 并行計算——緒論

并行計算——緒論

2023-06-19 07:31:09 後端開發

一、緒論

1.1 基本概念

  1. 加速比:表示加速效果,單個處理器運行花費時間 / P個處理器運行花費時間;\(S=\frac{T(1)}{T(p)}\)
  2. 效率:\(E = \frac{S}{p} = \frac{T(1)}{T(p)\times p}\)
  3. 開銷:\(C=T(p)\times p\)
  4. 可擴展性:處理器數目增多時并行程式的行為;
  5. 計算通信比:計算花費時間 / 處理器訊息通信花費時間;
  6. 計算:在1個時間單位內,每個PE(處理單元)能完成2個數相加,并在本地記憶體保存計算結果;
  7. 通信:在3個單位時間內,一個PE能夠把資料從自己的本地記憶體發送到另一個PE的本地記憶體;
  8. 輸入和輸出:程式開始時,整個輸入陣列A保存在0號處理單元PE0,程式結束時,計算結果應匯聚到PE0;
  9. 同步:所有PE同時進行計算、通信,或處于閑置狀態;

1.2 求和案例

1.2.1 分配流程

PE = 1:即為串行,

PE = 2:PE#0分1半任務給PE#1,分別計算,PE#1將求和后資料匯聚到PE#0,

image-20230617004458512

PE = 4:

image-20230617004714400

1.2.2 分發時間計算

以PE = 2為例

  1. 最初PE#0存盤全部資料;
  2. PE#0發送一般資料給PE#1,花費3個單位時間;(自己規定的,見1.2.4)
  3. 每個處理單元將資料相加,花費511個單元時間;(因為每個處理器分別有511個資料)
  4. PE#1求和后資料回傳給PE#1,花費3個單元時間;
  5. PE#0把2部分資料相加,花費1個時間單元;

共計 3 + 511 + 3 + 1 個時間單元

通用運算式

使用\(p=2^{q}\)個處理單元,以及\(n=2^{k}\)個輸入整數

  • 資料分發次數:\(3 \times q\)
  • 本地求和:\(\frac{n}{p} -1 = 2^{k-q}-1\)
  • 收集中間資料:\(3 \times q\)
  • 中間結果求和::\(q\)

則共 \(T(p,n)=T(2^{q},2^{k})=3q+2^{k-q}-1+3q+q=2^{k-q}-1+7q\)

1.2.3 擴展性分析

強擴展性分析:改變處理器的數量,并行計算時間、加速比、開銷和效率變化規律;

弱擴展性分析:改變處理器的數量,同時改變資料量,并行計算時間、加速比、開銷和效率變化規律;

上述演算法不是強擴展性,是弱擴展性,

1.2.4 一般情形計算

$\alpha $:執行一次單獨的假發操作需要的時長

$\beta $:傳輸一批整數需要的時長;

運行時間:\(T_{\alpha,\beta }(p,n)=T(2^{q},2^{k})=\beta q+\alpha(2^{k-q}-1)+\beta q+\alpha q=2\beta q +\alpha (2^{k-q}-1 + q)\)

加速比:$S_{\alpha ,\beta } (2^{q}, 2^{k})=\frac{T_{\alpha ,\beta }(2^{0}, 2^{k})}{T_{\alpha ,\beta }(2^{q}, 2^{k}) }=\frac{\alpha(2^{k}-1)}{2\beta q + \alpha(2^{k-q}-1+q)} $

通信比:\(\gamma=\frac{\alpha}{\beta}\)

求解最優單元:\(2^{q}={\frac{\gamma\ln2}{2+\gamma}}2^{k}\)

比如,對于\(\gamma=\frac{1}{3},n=1024\),加速比最大可求\(p=1000\)

當處理資料規模固定,并行效率和加速比依賴于計算單元個數和計算通信比;

1.3 并行計算基礎

1.3.1 分布式記憶體

特點:每個PE只能訪問自己的本地記憶體,如果跨PE訪問,需要一個顯式的通信步驟,

資料劃分是分布式記憶體系統編程的關鍵,

image-20230618123227022

1.3.2 共享記憶體系統

通過一個共享總線或者縱橫交換機,所有的CPU都能訪問同一塊公共記憶體空間,

  • 除了共享主存外,每個核心包含一塊更小的本地記憶體;
  • 快取一致性,存盤在本地快取中的值和存盤在共享記憶體中的值保持一致;

image-20230618123237716

1.4 并行程式設計考慮因素

  1. 劃分:給定的問題劃分為子問題;
  2. 通信:選定劃分方案決定了行程或縣城之間需要的通信量和通信型別;
  3. 同步:為了以正確的方式共同運行,執行緒或行程之間可能需要同步操作;
  4. 負載平衡:多個縣城或多個行程之間的作業量需要平均分配,以平衡他們各自的負載,并最小化空閑時間;

求和案例

image-20230618123941539

1.5 不同層次的并行

  1. 節點級并行化:需要針對分布式記憶體機器的模型實作演算法,例如MPI(在第9章深入學習)或者UPC++(在第10章深人學習)等,
  2. 節點內的并行化:通常基于針對共享記憶體系統(多核CPU)的語言,比如C++多執行緒(在第4章深人學習),或者OpenMP(在第6章深人學習),
  3. 加速卡級的并行化:把一部分計算任務分配給加速卡承擔,比如大規模并行GPU等,借助包括CVDA在內的特定語言(將在第7章深入學習),

image-20230618124555139
參考:《并行程式設計》

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/555489.html

標籤:其他

上一篇:集合體系結構

下一篇:返回列表

標籤雲
其他(161224) Python(38240) JavaScript(25505) Java(18246) C(15237) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7256) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4603) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1968) 功能(1967) Web開發(1951) C++(1941) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • 并行計算——緒論

    # 一、緒論 ## 1.1 基本概念 1. 加速比:表示加速效果。單個處理器運行花費時間 / P個處理器運行花費時間;$S=\frac{T(1)}{T(p)}$ 2. 效率:$E = \frac{S}{p} = \frac{T(1)}{T(p)\times p}$ 3. 開銷:$C=T(p)\tim ......

    uj5u.com 2023-06-19 07:31:09 more
  • 集合體系結構

    集合體系結構 List系列集合:添加的元素有序,可重復,有索引 Collection:是單列集合的祖宗介面,它的功能是全部單列集合都可以繼承使用的 set系列集合:添加的元素無序,不重復,無索引 方法名說明 public boolean add(E e) 把給定的物件添加到當前集合中 public ......

    uj5u.com 2023-06-18 08:13:56 more
  • 集合體系結構

    集合體系結構 List系列集合:添加的元素有序,可重復,有索引 Collection:是單列集合的祖宗介面,它的功能是全部單列集合都可以繼承使用的 set系列集合:添加的元素無序,不重復,無索引 方法名說明 public boolean add(E e) 把給定的物件添加到當前集合中 public ......

    uj5u.com 2023-06-18 08:12:55 more
  • rust 使用第三方庫構建mini命令列工具

    這是上一篇 [rust 學習 - 構建 mini 命令列工具](https://www.cnblogs.com/dreamHot/p/17467837.html)的續作,擴展增加一些 crate 庫。這些基礎庫在以后的編程作業中會常用到,他們作為基架存在于專案中,解決專案中的某個問題。 專案示例還是 ......

    uj5u.com 2023-06-18 07:49:48 more
  • [ARM 匯編]進階篇—例外處理與中斷—2.4.2 ARM處理器的例外向量

    #### 例外向量表簡介 在ARM架構中,例外向量表是一組固定位置的記憶體地址,它們包含了處理器在遇到例外時需要跳轉到的處理程式的入口地址。每個例外型別都有一個對應的向量地址。當例外發生時,處理器會自動跳轉到對應的向量地址,并開始執行例外處理程式。 #### 例外向量表的位置 ARM處理器的例外向量表 ......

    uj5u.com 2023-06-18 07:49:41 more
  • 基于回歸分析的波士頓房價分析

    #基于回歸分析的波士頓房價分析 專案實作步驟: 1.專案結構 2.處理資料 3.處理繪圖 4.對資料進行分析 5.結果展示 一.專案結構 ![image](https://img2023.cnblogs.com/blog/3047082/202306/3047082-2023061722315431 ......

    uj5u.com 2023-06-18 07:49:28 more
  • 通過模仿學會Python爬蟲(一):零基礎上手

    好家伙,爬蟲來了 爬蟲,這玩意,不會怎么辦, 誒,先抄一份作業回來 1.別人的爬蟲 Python爬蟲史上超詳細講解(零基礎入門,老年人都看的懂)_ChenBinBini的博客-CSDN博客 # -*- codeing = utf-8 -*- from bs4 import BeautifulSoup ......

    uj5u.com 2023-06-18 07:49:10 more
  • 09. centos使用docker方式安裝mysql

    ## 一、創建宿主機物理路徑 新建/mydata/mysql/data、log和conf三個檔案夾 ```bash mkdir -p /mnt/mysql/log mkdir -p /mnt/mysql/data mkdir -p /mnt/mysql/config ``` 或者 ```bash m ......

    uj5u.com 2023-06-18 07:49:00 more
  • C++面試八股文:聊一聊指標?

    某日二師兄參加XXX科技公司的C++工程師開發崗位第17面: > 面試官:聊一聊指標? > > 二師兄:好的。 > > 面試官:你覺得指標本質上是什么? > > 二師兄:這要從記憶體地址開始說起了。如果有一塊容量是1G的記憶體,假設它的地址是從`0x00000000` 到`0x3fffffff`,每一個 ......

    uj5u.com 2023-06-18 07:48:54 more
  • Java 注釋及Dos命令

    # Java 注釋、絕對路徑、相對路徑、基本Dos命令 # 1. Java的三種注釋方式 ## 注釋能增加代碼的可讀性,習慣寫注釋能提升我們撰寫代碼的能力 > ### 單行注釋:用//注釋一些代碼提示 > > ### 多行注釋:以/*為開頭 以 */為結束 > > ### 檔案注釋:/* > > # ......

    uj5u.com 2023-06-18 07:48:48 more