主頁 > 後端開發 > 武漢理工大學-并行計算-2020年期末復習指南

武漢理工大學-并行計算-2020年期末復習指南

2020-11-03 02:06:48 後端開發

并行計算-2020-復習指南

制作:紀元

本提綱遵循CC-BY-NC-SA協議

(署名-非商業性-相同方式共享)

文章目錄

    • 并行計算機系統及其結構模型
      • 存盤墻
      • 互聯網路
        • 網路性能指標
        • 靜態互連網路
        • 動態互連網路
      • 并行計算機結構
        • 定義
        • 圖示
      • 并行計算機訪存模型
        • 概念
        • 小結
    • 當代并行計算機系統介紹
      • 共享存盤的對稱多處理機SMP
        • 結構特性:
        • 問題:
      • 分布存盤的大規模并行處理機 MPP
        • MPP公共結構
        • MPP設計問題
      • 差別
      • 作業站機群COW
        • 定義
        • 優勢
    • 并行計算性能評測
      • 作業負載
      • 并行執行時間
      • 存盤器性能
        • 存盤器的層次結構
        • 存盤器帶寬的估算
          • 公式
          • 例:RISC加法指令帶寬估算
      • 三大定律
        • 簡稱定義
        • Amdahl定律 - 固定負載的加速公式
          • 原公式
          • 歸一化的公式
          • 修正的公式
          • 極限情況與條件
          • 出發點
          • 含義
        • Gustafson加速定律
          • 原公式
          • 歸一化公式
          • 修正的公式
          • 極限情況與條件
          • 出發點
          • 含義
        • Sun和Ni定律 - 存盤受限的加速定律
          • 原公式
          • 歸一化公式
          • 修正的公式
          • 極限情況與條件
          • 基本思想
    • 并行演算法的設計基礎
      • 并行演算法基本概念
      • 并行計算模型基本概念
        • PRAM(ParallelRandomAccessMachine)模型
          • 分類
          • 優點
          • 缺點
          • 推廣
        • 異步PRAM模型
          • 特點
          • 指令型別
        • BSP(BulkSynchronousParallel)模型
          • 性質和特點
        • logP模型(logPModel)
          • 引數
    • 并行演算法的一般設計策略
      • 串行演算法直接并行化
      • 從問題描述開始設計并行演算法
      • 借用已有演算法求解新問題
    • 并行演算法的基本設計技術
      • 劃分求解的基本步驟
      • 均勻劃分技術
      • 對數劃分技術
      • 功能劃分技術
    • 并行演算法的一般設計程序
      • PCAM基本步驟
      • 劃 分
      • 通 信
        • 通信模式
      • 組 合
      • 映 射
        • 基本策略
    • 演算法撰寫
      • 矩陣相乘、線性方程組求解(稠密)、快速傅里葉變換

符號釋義

  • ? ? \lfloor \rfloor ??向下取整數
  • ? ? \lceil \rceil ??向上取整數

題型設定

  • 選擇 20x2
  • 填空 10x2
  • 簡答 2x10
  • 編程 2*10

并行計算機系統及其結構模型

存盤墻

記憶體墻,指的是記憶體性能嚴重限制CPU性能發揮的現象,

在過去的20多年中,處理器的性能以每年大約55%速度快速提升,而記憶體性能的提升速度則只有每年10%左右,長期累積下來,不均衡的發展速度造成了當前記憶體的存取速度嚴重滯后于處理器的計算速度,記憶體瓶頸導致高性能處理器難以發揮出應有的功效,這對日益增長的高性能計算(High Performance Computing,HPC)形成了極大的制約,事實上,早在1994年就有科學家分析和預測了這一問題,并將這種嚴重阻礙處理器性能發揮的記憶體瓶頸命名為"記憶體墻"(Memorya Wall),

在這里插入圖片描述

互聯網路

網路性能指標

  • 節點度(Node Degree):射入或射出一個節點的邊數,在單向網路中,入射和出射邊之和稱為節點度,
  • 網路直徑(Network Diameter): 網路中任何兩個節點之間的最長距離,即最大路徑數,
  • 對剖寬度(Bisection Width) :對分網路各半所必須移去的最少邊數
  • 對剖帶寬( Bisection Bandwidth):每秒鐘內,在最小的對剖平面上通過所有連線的最大資訊位(或位元組)數
  • 對稱(Symmetry):從任一節點觀看網路都一樣

靜態互連網路

  • 靜態互連網路:處理單元間有著固定連接的一類網路,在程式執行期間,這種點到點的鏈接保持不變;典型的靜態網路有一維線性陣列、二維網孔、樹連接、超立方網路、立方環、洗牌交換網、蝶形網路等,
  • 嵌入(Embedding):指將網路中的各節點映射到另一個網路中去,
  • 膨脹(Dilation):系數來描述嵌入的質量,它是指被嵌入網路中的一條鏈路在所要嵌入的網路中對應所需的最大鏈路數,如果該系數為1,則稱為完美嵌入,
    • 例如,一個環網可完美嵌入到2-D 環繞網中,同樣,一個超立方網也可以完美嵌入到2-D環繞網中,并非所有網路之間均可實作完美嵌入,
    • 一般而言,對于高度為 h 的完全二叉樹,其膨脹系數為 ? h / 2 ? \lceil{h/2}\rceil ?h/2?
網路名稱網路規模節點度網路直徑對剖寬度對稱鏈路數
線性陣列 N N N 2 2 2 N ? 1 N-1 N?1 1 1 1 N ? 1 N-1 N?1
環形 N N N 2 2 2 N ? 1 ( 單 向 ) ? N / 2 ? ( 雙 向 ) N-1(單向)\\\lfloor{N}/2\rfloor(雙向) N?1()?N/2?() 2 2 2 N N N
2-D網孔 ( N × N ) (\sqrt{N}\times\sqrt{N}) (N ?×N ?) 4 4 4 2 ( N ? 1 ) 2(\sqrt{N}-1) 2(N ??1) N \sqrt{N} N ? 2 ( N ? N ) 2(N-\sqrt{N}) 2(N?N ?)
Illiac網孔 ( N × N ) (\sqrt{N}\times\sqrt{N}) (N ?×N ?) 4 4 4 N ? 1 \sqrt{N}-1 N ??1 2 N 2\sqrt{N} 2N ? 2 N 2N 2N
2-D環繞 ( N × N ) (\sqrt{N}\times\sqrt{N}) (N ?×N ?) 4 4 4 2 ( ? N / 2 ? ) 2(\lfloor\sqrt{N}/2\rfloor) 2(?N ?/2?) 2 N 2\sqrt{N} 2N ? 2 N 2N 2N
二叉樹 N N N 3 3 3 2 ? log ? N ? ? 1 2\lceil\log{N}\rceil-1 2?logN??1 1 1 1 N ? 1 N-1 N?1
星形 N N N N ? 1 N-1 N?1 2 2 2 ? N / 2 ? \lfloor{N/2}\rfloor ?N/2? N ? 1 N-1 N?1
超立方 N = 2 n N=2^n N=2n n n n n n n N / 2 N/2 N/2 n N / 2 nN/2 nN/2
立方環 N = k × 2 k N=k\times2^k N=k×2k 3 3 3 2 k ? 1 + ? k / 2 ? 2k-1+\lfloor{k/2}\rfloor 2k?1+?k/2? N / ( 2 k ) N/{(2k)} N/(2k) 3 N / 2 3N/2 3N/2

在這里插入圖片描述
在這里插入圖片描述

完美嵌入(膨脹系數=1)

在這里插入圖片描述

不完美嵌入(膨脹系數=2)

在這里插入圖片描述

動態互連網路

  • 動態網路:用交換開關構成的,可按應用程式的要求動態地改變連接組態;典型的動態網路包括總線、交叉開關和多級互連網路等,

  • 總線(Bus)實際上是連接處理器、存盤模塊和I/O 外圍設備等的一組導線和插座,總線系統用以主設備(如處理器)和從設備(如存盤器)之間的資料傳輸,公用總線以分時作業為基礎,在多個請求情況下,總線的仲裁是重要的,

  • 區域/本地總線(Local Bus):在印刷電路板上實作的總線

    • 本地總線:CPU板級上的總線(習慣叫法)

    • 存盤器總線:存盤器板級上的總線

    • 資料總線:I/O 板級和通信板級上的總線,

    • 系統總線:在底板上實作的,它為所有插入板之間的通信提供了通路,

  • 區域/本地總線+存盤器總線,將處理器與存盤模塊相連;

  • I/O總線+系統總線,將I/O設備、網卡等連接起來,

    • I/O總線有時也叫作小型機系統介面SCSI(Small Computer System Interface)總線,
  • 絕大多數標準總線都可低價構造單一處理系統(Unity Processor System),在構造多處理器系統時,常使用多總線層狀總線

板級、底板級和I/O級總線系統:

在這里插入圖片描述

  • 總線系統造價最低,但易沖突;
  • 交叉開關造價最高,但帶寬和選路性能最好;
  • 多級互連網路是總線與交叉開關的折衷
    • 主要優點采用模塊結構,可擴展性好
    • 但延遲隨網路尺寸對數增長,

在這里插入圖片描述

并行計算機結構

定義

大型并行機系統一般可分為6類機器,SIMD計算機多為專用,其余的5種均屬于多指令多資料流MIMD計算機,

  • 單指令多資料流SIMD
  • 并行向量處理機PVP
    • 多為定制,通常不使用高速快取,而是使用大量的向量暫存器和指令緩沖器
  • 對稱多處理機SMP
    • 系統對稱,每個處理器可等同的訪問共享存盤器、I/O設備和作業系統服務,能開拓較高的并行度
    • 是共享存盤,限制系統中的處理器不能太多(一般少于64個),同時總線和交叉開關互連一旦作成也難于擴展,
  • 大規模并行處理機MPP
    • 處理節點采用商品微處理器;
    • 系統中有物理上的分布式存盤器;
    • 采用高通信帶寬和低延遲的互連網路(專門設計和定制的);
    • 能擴放至成百上千乃至上萬個處理器;
    • 它是一種異步的MIMD機器,程式系由多個行程組成,每個都有其私有地址空間,行程間采用傳遞訊息相互作用,
  • 作業站機群COW
    • COW的每個節點都是一個完整的作業站(不包括監視器、鍵盤、滑鼠等),也可以是一臺PC或SMP;
    • 各節點通過一種低成本的商品(標準)網路(如以太網、FDDI和ATM開關等)互連(有的商用機群也使用定做的網路);
    • 各節點內總是有本地磁盤,而MPP節點內卻沒有;
    • 節點內的網路介面是松散耦合到I/O 總線上的,而MPP內的網路介面是連到處理節點的存盤總線上的,因而可謂是緊耦合式的;
    • 一個完整的作業系統駐留在每個節點中,而MPP中通常只是個微核,COW的作業系統是作業站UNIX,加上一個附加的軟體層以支持單一系統映像、并行度、通信和負載平衡等
  • 分布共享存盤DSM多處理機,
    • DSM在物理上有分布在各節點中的區域存盤,從而形成了一個共享的存盤器,對用戶而言,系統硬體和軟體提供了一個單地址的編程空間,DSM相對于MPP的優越性是編程較容易,
屬性PVPSMPMPPDSMcow
結構型別MIMDMIMDMIMDMIMDMIMD
處理器型別專用定制商用商用商用
互連網路定制交叉開關總線、交叉開關定制網路定制網路商用網路(以太ATM)
通信機制共享變數共享變數訊息傳遞共享變數訊息傳遞
地址空間單地址空間單地址空間多地址空間單地址空間多地址空間
系統存盤器集中共享集中共享分布非共享分布共享分布非共享
訪存模型UMAUMANORMANUMANORMA

圖示

  • B(Bridge)是存盤總線和I/O總線間的介面
  • DIR(CacheDirectory)是 高速快取目錄
  • IOB(I/O Bus)是I/O 總線
  • NIC(InterfaceCircuitry)是網路介面電路(網卡)
  • P/C(MicroprocessorandCache)是微處理器和高速快取
  • VP(Vector Processor)向量處理器
  • SM(SharedMemory)是共享存盤器,
  • LM(Local Memory)本地/區域存盤
  • LD(LocalDisk)是 本 地 磁 盤
  • RC(RemoteCatch)遠程高速快取

在這里插入圖片描述

并行計算機訪存模型

概念

  • UMA(Uniform MemoryAccess)模型是均勻存盤訪問模型的簡稱,適于通用或分時應用,

    • 對稱多處理機SMP(SymmetricMultiprocessor):所有的處理器都能等同地訪問所有I/O設備、能同樣地運行執行程式(如作業系統內核和I/O服務程式等)時稱為

    • 非對稱多處理機:只有一臺 或一組處理器(稱為主處理器),它能執行作業系統并能操縱I/O,而其余的處理器無I/O 能力(稱為從處理器),只在主處理器的監控之下執行用戶代碼,

    其特點是:

    • 物理存盤器被所有處理器均勻共享;
    • 所有處理器訪問任何存盤單元取相同的時間(此即均勻存盤訪問名稱的由來);
    • 每臺處理器可帶私有高速快取;
    • 外圍設備也可以一定形式共享,這種系統由于高度共享資源而稱為緊耦合系統(TightlyCoupledSystem),

在這里插入圖片描述

  • NUMA(Nonuniform MemoryAccess)模型是非均勻存盤訪問模型的簡稱,特點是:
    • 被共享的存盤器在物理上是分布在所有的處理器中的,其所有本地存盤器的集合就組成了全域地址空間;
    • 處理器訪問存盤器的時間是不一樣的:訪問本地存盤器LM 或群內共享存盤器CSM較快,而訪問外地的存盤器或全域共享存盤器 GSM較慢(此即非均勻存盤訪問名稱的由來);
    • 每臺處理器照例可帶私有高速快取,且外設也可以某種形式共享,

在這里插入圖片描述

  • COMA(Cach-OnlyMemoryAccess)模型是全高速快取存盤訪問的簡稱,是 NUMA 的一種特例,其特點是:
    • 各處理器節點中沒有存盤層次結構,全部高速快取組成了全域地址空間;
    • 利用分布的高速快取目錄D進行遠程高速快取的訪問;
    • COMA中的高速快取容量一般都大于2級高速快取容量;
    • 使用COMA時,資料開始時可任意分配,因為在運行時它最侄訓被遷移到要用到它的地方,

在這里插入圖片描述

  • CC-NUMA(Coherent-CacheNonuniform MemoryAccess)模型是高速快取一致性非均勻存盤訪問模型的簡稱,它實際上是將一些SMP機器作為一個單節點而彼此連接起來所形成的一個較大的系統,其特點是:
    • 絕大多數商用 CC-NUMA多處理機系統都使用基于目錄的高速快取一致性協議;
    • 它在保留SMP結構易于編程的優點的同時,也改善了常規 SMP 的可擴 放性問題;
    • CC-NUMA 實際上是一個分布共享存 儲的DSM多處理機系統;
    • 它最顯著的優點是程式員無需明確地在節點上分配資料,系統的硬體和軟體開始時自動在各節點分配資料,在運行期間,高速快取一致性硬體會自動地將資料移至要用到它的地方,

在這里插入圖片描述

  • NORMA(No-RemoteMemoryAccess)模型是非遠程存盤訪問模型的簡稱,在一個分布存盤的多計算機系統中,如果所有的存盤器都是私有的、僅能由其處理器所訪問時就稱為 NORMA,系統由多個計算節點通過訊息傳遞互連網路連接而成,每個節點都是一臺由處理器、本地存盤器和/或I/O 外設組成的自治計算機,NORMA的特點是:

    • 所有存盤器均是私有的;
    • 絕大多數 NUMA都不支持遠程存盤器的訪問;
    • 在DSM中,NORMA 就消失了,

小結

物理上分布的存盤器從編程的觀點看可以是共享的或非共享的

  • 共享存盤結構(多處理機)可同時支持共享存盤和訊息傳遞編程模型
  • 共享存盤的編程模型可同時執行于共享存盤結構和分布式存盤結構(多計算機)上,

在這里插入圖片描述

當代并行計算機系統介紹

共享存盤的對稱多處理機SMP

  • SMP系統屬于UMA(Uniform MemoryAccess)機器
  • NUMA(Nonuniform MemoryAccess)機器是SMP系統的自然推廣
  • CC-NUMA (Coherent-CacheNUMA)實際上是將一些SMP作為單節點而彼此連接起來所構成的分布共享存盤系統

結構特性:

  • 對稱性:系統中任何處理器均可訪問任何存盤單元和I/O設備;

  • 單地址空間: 單地址空間有很多好處,例如因為只有一個OS和DB等副本駐留在共享存盤器中,所以OS可按作業負載情況在多個處理器上調度行程從而易達到動態負載平衡,又如因為所有資料均駐留在同一共享存盤器中,所以用戶不必擔心資料的分配和再分配;

  • 高速快取及其一致性:多級高速快取可支持資料的區域性,而其一致性可由硬體來增強;

  • 低通信延遲:處理器間的通信可用簡單的讀/寫指令來完成(而多計算機系統中處理器間的通信要用多條指令才能完成發送/接收操作),目前大多數商用SMP系統都是基于總線連接的,占了并行計算機很大的市場

問題:

  • 欠可靠:總線、存盤器或OS失效均會造成系統崩潰,這是SMP系統的最大問題;
  • 可觀的延遲:盡管SMP比MPP通信延遲要小,但相對處理器速度而言仍相當可觀(競爭會加劇延遲),一般為數百個處理器周期,長者可達數千個指令周期;
  • 慢速增加的帶寬:有人估計,主存和磁盤容量每3年增加4倍,而SMP存盤器總線帶寬每3年只增加2倍,I/O 總線帶寬增加速率則更慢,這樣存盤器帶寬的增長跟不上處理器速度或存盤容量的步伐;
  • 不可擴放性:總線是不可擴放的,這就限制最大的處理器數一般不能超過10,為了增大系統的規模,可改用交叉開關連接,或改用CC-NUMA或機群結構,

分布存盤的大規模并行處理機 MPP

MPP公共結構

所有的 MPP均使用物理上分布的存盤器,且使用分布的I/O也漸漸變多,節點間通過高速網路HSN(HighSpeedNetwork)相連, 每個節點包括:

  • 一個或多個處理器和高速快取(P/C)
  • 一個區域 存盤
  • 有或沒有磁盤和網路介面電路 NIC(NetworkInterfaceCircuitry),它們均連向本地互連網路(早期多為總線而近期多為交叉開關)

MPP設計問題

  • 可擴放性:MPP著名特性就是系統能擴展至成千上萬個處理器,而存盤器和I/O 的容量及帶寬亦能按比例的增加,為此,采用物理上分布的存盤器結構,它能提供比集中存盤器結構更高的總計存盤帶寬,因此有潛在的高可擴放性;
    • 要平衡處理能力與存盤和I/O 的能力,因為存盤器和I/O 子系統的速度不可能與處理器成比例地提高;
    • 要平衡計算能力與互動能力,因為行程/執行緒的管理、通信與同步等都相當費時間,
  • 系統成本:因為 MPP系統中包含大量的元件,為了保證系統的低成本應確保每個元件的低成本,為此,
    • 應采用現有的商用 CMOS微處理器
    • 要采用相對穩定的結構,
    • 要使用物理上分布的存盤器結構,它比同規模機器的中央(集中)存盤器結構要便宜;
    • 要采用SMP節點方式以削級訓連規模,
    • 設計者必須加入專門硬體以擴大物理地址空間規模
  • 通用性和可用性:
    • MPP要支持異步 MIMD模式;
    • 要支持流行的標準編程模式;
    • 諸節點應能按大、小作業要求進行不同的組合以支持互動和批處理模式;
    • 互連拓撲應對用戶透明,看到的是一組全連接的節點;
    • MPP應在不同層次上支持單一系統映像SSI(Single-SystemImage)
    • MPP必須使用高可用性的技術,
  • 通信要求:MPP和 COW 的關鍵差別是節點間的通信,COW 使用標準的LAN,而 MPP使用高速、專用高帶寬、低延遲的互連網路,無疑在通信方面優于 COW,
  • 存盤器和I/O 能力:因為 MPP是可擴放系統,所以就要求非常大的總計存盤器和I/O 設備容量,目前I/O方面的進展仍落后于系統中的其余部分,

差別

MPP和 COW 的關鍵差別是節點間的通信,COW 使用標準的LAN,而 MPP使用高速、專用高帶寬、低延遲的互連網路,無疑在通信方面優于 COW,

作業站機群COW

定義

作業站機群COW(ClusterofWorkstations)是實作并行計算的一種新主流技術,是屬于分布式存盤的 MIMD并行計算機結構,系由作業站和互連網路兩部分組成,由于這種結構用于并行計算的主要資源是作業站,所以作業站機群的名稱便由此產生,作業站機群COW 這一名稱,在早期的研究階段,也曾被稱為作業站網路NOW(NetworkofWorkstations),

  • 從用戶、程式員和系統管理員的角度看,COW 相當于單一并行系統,感覺不到多個作業站的實際存在;
  • 從程式設計模式的角度看,它與 MPP一樣可采用面向訊息傳遞的SPMD(SingleProgramMultipleData)編程方式,即各個作業站均運行同一個程式,但分別加載不同的資料,從而可支持粗粒度的并行應用程式,

優勢

  • 投資風險小
  • 編程方便
  • 系統結構靈活
  • 性能/價格比高
  • 能充分利用分散的計算資源
  • 可擴放性好

并行計算性能評測

名稱符號含意單位
機器規模 n n n處理器的數目無量綱
時鐘速率 f f f時鐘周期長度的倒數 M H z MHz MHz
作業負載 W W W計算操作的數目 M f l o p Mflop Mflop
順序執行時間 T i T_i Ti?程式在單處理機上的運行時間 s ( 秒 ) s(秒) s()
并行執行時間 T n T_n Tn?程式在并行機上的運行時間 s ( 秒 ) s(秒) s()
速度 R n = W / T n R_n=W/T_n Rn?=W/Tn?每秒百萬次浮點運算 M f l o p s Mflops Mflops
加速 S n = T 1 / T n S_n=T_1/T_n Sn?=T1?/Tn?衡量并行機有多快無量綱
效率 E n = S n / n En=S_n/n En=Sn?/n衡量處理器的利用率無量綱
峰值速度 R p e a k = n R ’ p e a k R_{peak}=nR’_{peak} Rpeak?=nRpeak?所有處理器峰值速度之積, R p e a k ′ R'_{peak} Rpeak?為一個處理器的峰值速度 M f l o p s Mflops Mflops
利用率 U = R n / R p e a k U=R_n/R_{peak} U=Rn?/Rpeak?可達速度與峰值速度之比無量綱
通信延遲 t 0 t_0 t0?傳送0一位元組或單字的時間 μ s \mu{s} μs
漸近帶寬 r ∞ r_\infty r?傳送長訊息通信速率 M B / s MB/s MB/s

作業負載

所謂作業負載(荷),就是計算操作的數目,通常可用執行時間、所執行的指令數目和所完成的浮點運算元三個物理量來度量它,

  • 執行時間:它可定義為在特定的計算機系統上的一個給定的應用所占用的總時間,系指應用程式從開始到結束所掠過時間(ElapsedTime),它不只是CPU時間,還包括了訪問存盤器、磁盤、I/O 通道的時間和 OS開銷等,
  • 浮點運算:對于大型科學與工程計算問題,使用所執行的浮點運算元目來表示作業負載是很自然的,對于程式中的其他型別的運算,可按如下經驗規則折算成浮點運算(Flop)數:在運算運算式中的賦值操作、變址計算等均不單獨考慮(即它們被折算成0Flop);單獨賦值操作、加法、減法、乘法、比較、資料型別轉換等運算均各折算成1Flop;除法和開平方運算各折算成4Flop;正(余)弦、指數類運算各折算成8Flop;其他類運算,可按其復雜程度,參照上述經驗資料進行折算之,
  • 指令數目:對于任何給定的應用,它所執行的指令條數就可視為作業負載,常以百萬條指令為計算單位,與其相應的速度單位就是MIPS(每秒百萬條指令),

并行執行時間

在無重疊操作的假定下,并行程式的執行時間 T n T_n Tn?為:
T n = T c o m p u t + T p a r o + T c o m m T_n=T_{comput}+T_{paro}+T_{comm} Tn?=Tcomput?+Tparo?+Tcomm?

  • Tcomput為計算時間
  • Tparo為并行開銷時間
    • 包括行程管理(如行程生成、結束和切換等)時間,組操作(如行程組的生成與消亡等)時間和行程查尋(如詢問行程的標志、等級、組標志和組大小等)時間;
  • Tcomm為相互通信時間,
    • 包括同步(如路障、鎖、臨界區、事件等)時間,通信(如點到點通信、整體通信、讀/寫共享變數等)時間和聚合操作(如歸約、前綴運算等)時間,

存盤器性能

存盤器的層次結構

  • 容量C:表示各層的物理存盤器件能保存多少位元組的資料;
  • 延遲L:表示讀取各層物理器件中一個字所需的時間;
  • 帶寬B:表示在1秒鐘內各層的物理器件中能傳送多少個位元組,

在這里插入圖片描述

存盤器帶寬的估算

公式

帶 寬 = 操 作 的 存 儲 長 度 × 時 鐘 頻 率 帶寬=操作的存盤長度\times時鐘頻率 =×

較快的時鐘頻率和處理器中較高的并行操作,可獲得較寬的帶寬

例:RISC加法指令帶寬估算

條件:字長64位(8位元組),時鐘頻率100MHz,單拍內可完成指令

指令流程:取2個字a,b,執行操作后送回暫存器,共涉及3個字(24位元組)

三大定律

簡稱定義

  • 是并行系統中處理器數;
  • W是問題規模(下文中也常叫作計算負載、作業負載,它定義為給定問題的總計算量),
  • Ws 是應用程式中的串行分量,
  • Wp是W中可并行化部分(顯然 Ws+Wp= W);
  • Wo為額外開銷
  • f是串行分量比例(f= Ws/W,Ws= W1),
  • 1-f為并行分量比例(顯然 f+(1-f)=1);
  • Ts=T1 為串行執行時間,
  • Tp 為并行執行時間;
  • S為加速(比),
  • E為效率,
  • G(p)反映存盤容量增加到p倍時作業負載的增加量

Amdahl定律 - 固定負載的加速公式

原公式

S = W s + W p W s + W p p S=\frac{W_s+W_p}{W_s+\frac{W_p}{p}} S=Ws?+pWp??Ws?+Wp??

歸一化的公式

W s + W p W_s+W_p Ws?+Wp?表示為 f + ( 1 ? f ) f+(1-f) f+(1?f)得:
S = f + ( 1 ? f ) f + 1 ? f p = p 1 + f ( p ? 1 ) S=\frac{f+(1-f)}{f+\frac{1-f}{p}}=\frac{p}{1+f(p-1)} S=f+p1?f?f+(1?f)?=1+f(p?1)p?

修正的公式

上并行加速不僅受限于程式的串行分量,而且也受并行程式運行時的額外開銷影響

極限情況與條件
  • 對于理想情況:當 p → ∞ p\to\infty p時取極限

S = 1 f S=\frac{1}{f} S=f1?

  • 對于實際情況:當 p → ∞ p\to\infty p時取極限

S = 1 f + W o W S=\frac{1}{f+\frac{W_o}{W}} S=f+WWo??1?

出發點
  • 對于很多科學計算,實時性要求很高,即在此類應用中時間是個關鍵因素,而計算負載是固定不變的,為此在一定的計算負載下,為達到實時性可利用增加處理器數來提高計算速度;
  • 因為固定的計算負載是可分布在多個處理器上的,這樣增加了處理器就加快了執行速度,從而達到了加速的目的,
含義

它意味著隨著處理器數目的無限增大,并行系統所能達到的加速之上限為 1 f \frac{1}{f} f1?

在這里插入圖片描述

Gustafson加速定律

原公式

歸一化公式

修正的公式

極限情況與條件

當 p充分大時,S′與p幾乎成線性關系,其斜率為1-f,

出發點
  • 對于很多大型計算,精度要求很高,即在此類應用中精度是個關鍵因素,而計算時間是固定不變的,此時為了提高精度,必須加大計算量,相應地亦必須增多處理器數才能維持時間不變;
  • 除非學術研究,在實際應用中沒有必要固定作業負載而使計算程式運行在不同數目的處理器上,增多處理 器必須相應地增大問題規模才有實際意義,
含義

意味著隨著處理器數目的增加,加速幾乎與處理器數成比例的線性增加,串行比例 f不再是程式的瓶頸,

注意,Wo是p的函式,它可能隨 p增大、減小或不變,一般化的 Gustafson 定律欲達到線性加速必須使 Wo隨 p減小,但這常常是困難的,

在這里插入圖片描述

Sun和Ni定律 - 存盤受限的加速定律

原公式

S ′ ′ = f W + ( 1 ? f ) G ( p ) W f W + ( 1 ? f ) G ( p ) W p S''=\frac{fW+(1-f)G(p)W}{fW+(1-f)G(p)\frac{W}{p}} S=fW+(1?f)G(p)pW?fW+(1?f)G(p)W?

歸一化公式

S ′ ′ = f + ( 1 ? f ) G ( p ) f + ( 1 ? f ) G ( p ) p S''=\frac{f+(1-f)G(p)}{f+(1-f)\frac{G(p)}{{p}}} S=f+(1?f)pG(p)?f+(1?f)G(p)?

修正的公式

極限情況與條件
  • G ( p ) = 1 G(p)=1 G(p)=1時:變為 1 f + ( 1 ? f ) p \frac{1}{f+\frac{(1-f)}{p}} f+p(1?f)?1?( Amdahl加速定律)
  • G ( p ) = p G(p)=p G(p)=p時:變為 f + p ( 1 ? f ) f+p(1-f) f+p(1?f)(Gustafson加速定律;當 G(p)>p時,它相應于計算負載比存盤要求增加得快)
基本思想

其基本思想是只要存盤空間許可,應盡量增大問題規模以產生更好或更精確的解(此時可能使執行時間略有增加),換句話說,假若有足夠的存盤容量,并且規模可擴放的問題滿足 Gustafson定律規定的時間要求,那么就有可能進一步增大問題規模求得更好或更精確的解, ,它相應于計算負載比存盤要求增加得快,此時Sun和Ni加速均比 Amdahl加速和 Gustafson加速為高,

在這里插入圖片描述

并行演算法的設計基礎

并行演算法基本概念

  • 并行演算法(ParallelAlgorithm)是一些可同時執行的諸行程的集合,這些行程互相作用和協調動作從而達到給定問題的求解,
    • 數值計算是指基于代數關系運算的一類諸如矩陣運算、多項式求值、求解線性方程組等數值計算問題,求解數值計算問題的演算法稱為數值演算法(NumericalAlgorithm),
    • 非數值計算是指基于比較關系運算的一類諸如排序、選擇、搜索、匹配等 符號 處 理 問 題,求 解 非 數 值 計 算 問 題 的 算 法 稱 為 非 數 值 算 法(Non_NumericalAlgorithm),
    • 同步演算法(SynchronizedAlgorithm)是指演算法的諸行程的執行必須相互等待的一類并行演算法,
    • 異步演算法(ASynchronizedAlgorithm)是指演算法的諸行程的執行不必相互等待的一類并行演算法,
    • 分布演算法(DistributedAlgorithm)是指由通信鏈路連接的多個場點(Site)或節點,協同完成問題求解的一類并行演算法,
      • 在 局 網 環 境 下 進 行 的 計 算 稱 為 分 布 計 算(Distributed Computing),
      • 把 工 作 站 機 群 COW(ClusterofWorkstations)環境下進行的計算稱為網路計算(NetworkComputing),
      • 把基于Internet的計算則稱為元計算(MetaComputing),
    • 確定演算法(DeterministicAlgorithm)是指演算法的每一步都能明確地指明下一步應該如何行進的一種演算法,
    • 隨機演算法(RandomizedAlgorithm)是指演算法的每一步,隨機地從指定范圍內選取若干引數,由其來確定演算法的下一步走向的一種演算法,

并行計算模型基本概念

所謂計算模型實際上就是硬體和軟體之間的一種橋梁,使用它能夠設計分析演算法,在其上高級語言能被有效地編譯且能夠用硬體來實作,

PRAM(ParallelRandomAccessMachine)模型

并行隨機存取機器,也稱之為共享存盤的SIMD模型,是一種抽象的并行計算模型,在這種模型中,假定存在著一個容量無限大的共享存盤器;有有限或無限個功能相同的處理器,且其均具有簡單的算術運算和邏輯判斷功能;在任何時刻各處理器均可通過共享存盤單元相互交換資料,

分類

根據處理器對共享存盤單元同時讀、同時寫的限制,PRAM 模型又可分為:

  • 不允許同時讀和同時寫(Exclusive_ReadandExclusive_Write)的 PRAM 模 型,簡 記之 為 PRAM_EREW;(最弱計算模型)
  • 允許同 時讀 不 允 許同 時 寫(Concurrent_ReadandExclusive_Write)的 PRAM 模型,簡記之為 PRAM_CREW,
  • 允許同時讀和同時寫(Concurrent_ReadandConcurrent_Write)的PRAM 模型,簡記之為PRAM_CRCW,(最強計算模型)
    • 只允許所有的處理器 同時寫相同的數,此時稱為 公共(Common)的PRAM_CRCW,簡記之為CPRAM_CRCW;
    • 只允許最優先的處理器先寫,此時稱為優先(Priority)的PRAM_CRCW,簡記之為PPRAM_CRCW;
    • 允許任意 處 理 器 自 由 寫,此 時 稱 為 任 意(Arbitrary)的 PRAM_CRCW,簡 記 之 為APRAM_CRCW,
優點
  • 特別適合于并行演算法的表達、分析和比較;
  • 使用簡單,很多諸如處理器間通信、存盤管理和行程同步等并行機的低級細節均隱含于模型中;
  • 易于設計演算法和稍加修改便可運行在不同的并行機上;
  • 有可能在 PRAM 模型中加入一些諸如同步和通信等需要考慮的問題,
缺點
  • PRAM 是一個同步模型,這就意味著所有的指令均按鎖步方式操作,用戶雖感覺不到同步的存在,但它的確是很費時的;
  • 共享單一存盤器的假定,顯然不適合于分布存盤的異步的 MIMD機器;
  • 假定每個處理器均可在單位時間內訪問任何存盤單元而略去存取競爭和有限帶寬等是不現實的,
推廣
  • 存盤競爭模型,它將存盤器分成一些模塊,每個模塊一次均可處理一個訪問,從而可在模塊級處理存盤器的競爭;延遲模型,它考慮了資訊的產生和能夠使用之間的通信延遲;
  • 區域 PRAM 模型,此模型考慮到了通信帶寬,它假定每個處理器均有無限的局存,而訪問全域存盤器是較昂貴的;
  • 分層存盤模型,它將存盤器視為分層的存盤模塊,每個模塊由其大小和傳送時間表征,多處理機由模塊樹表示,葉為處理器;
  • 異步PRAM模型

異步PRAM模型

分相(Phase)PRAM 模型是一個異步的 PRAM 模型,簡記之為APRAM,系由p個處理器組成,其特點是每個處理器都有其局存、區域時鐘和區域程式;

特點
  • 處理器間的通信經過共享全域存盤器;無全域時鐘,各處理器異步地獨立執行各自的指令;
  • 處理器任何時間依賴關系需明確地在各處理器的程式中加入同步(路)障(SynchronizationBarrier);
  • 一條指令可在非確定(無界)但有限的時間內完成,
指令型別
  • 全域讀:將全域存盤單元中的內容讀入局存單元中;
  • 區域操作:對局存中的數執行操作,其結果存入局存中;
  • 全域寫:將局存單元中的內容寫入全域存盤單元中;
  • 同步:同步是計算中的一個邏輯點,在該點各處理器均需等待別的處理器到達后才能繼續執行其區域程式,

BSP(BulkSynchronousParallel)模型

性質和特點
  • 將處理器和選路器分開,強調了計算任務和通信任務的分開,而選路器僅施行點到點的訊息傳遞,不提供組合、復制或廣播等功能
  • 將處理器和選路器分開,強調了計算任務和通信任務的分開,而選路器僅施行點到點的訊息傳遞,不提供組合、復制或廣播等功能
  • 如果能合適地平衡計算和通信,則 BSP模型在可編程性方面具有主要的優點
  • 為PRAM 模型所設計的演算法,均可采用在每個BSP處理器上模擬一些PRAM 處理器的方法實作之,

logP模型(logPModel)

是一種分布存盤的、點到點通信的多處理機模型,其中通信網路由一組引數來描述,但它并不涉及到具體的網路結構,也不假定演算法一定要用顯式的訊息傳遞操作進行描述,

引數
  • l(Latency)表示在網路中訊息從源到目的地所遭到的延遲;
  • o(Overhead)表示處理器發送或接收一條訊息所需的額外開銷(包含作業系統核心開銷和網路軟體開銷),在此期間內它不能進行其它的操作;
  • g(Gap)表示處理器可連續進行訊息發送或接收的最小時間間隔;
  • P(Processor)表示處理器/存盤器模塊數,

并行演算法的一般設計策略

串行演算法直接并行化

  • 對于一類具有內在順序性的串行演算法,則恐難于直接并行化,
  • 并非任何優秀的串行演算法都可以產生好的并行演算法,相反一個不好的串行演算法則有可能產生很優秀的并行演算法,

從問題描述開始設計并行演算法

對于有些問題,現有的串行演算法恐難直接將其并行化,此時要從問題的描述出發,尋求可能的新途徑,設計出一個新的并行演算法,但這并不是說完全排除某些串行演算法設計的基本思想,而是更著重從并行化的具體實作上開辟新的設計方法,

借用已有演算法求解新問題

所謂“借用法”是指借用已知的某類問題的求解演算法來求解另一類問題,不但要從問題求解方法的相似性方面仔細觀察,尋求問題解法的共同點;而且所借來的方法要用得合算,效率要高,從而能達借用的目的,

并行演算法的基本設計技術

劃分時關鍵在于如何將問題進行分組,使得子問題較容易并行求解,或者子問題的解較容易被組合成原問題的解,

劃分求解的基本步驟

  • 將給定的問題劈成p個獨立的幾乎等尺寸的子問題;
  • 用p臺處理器并行求解諸子問題,

均勻劃分技術

假定待處理的序列長為n,現有p臺處理器,一種最基本的劃分方法就是均分劃分(UniformPartition),系將n個元素分割成p段,每段含有n/p個元素且分配給一臺處理器,

對數劃分技術

假定待處理的序列長為n,現欲將其分段處理,取每第ilogn(i=1,2,…)個元素作為劃分元素,而將序列劃分成若干段,然后分段處理之,

功能劃分技術

欲從長為n的序列中選取前m個最小者,可以將長為n的序列劃分成等長的一些組,每組中的元素數應大于或等于m(最后一組除外),然后各組并行處理,

并行演算法的一般設計程序

PCAM基本步驟

  • 劃分:將整個計算分解成一些小的任務,其目的是盡量開拓并行執行的機會,
  • 通信:確定諸任務執行中所需交換的資料和協調諸任務的執行,由此可檢測上述劃分的合理性,
  • 組合:按性能要求和實作的代價來考察前兩階段的結果,必要時可將一些小的任務組合成更大的任務以提高性能或減少通信開銷,
  • 映射:將每個任務分配到一個處理器上,其目的是最小化全域執行時間和通信成本以及最大化處理器的利用率,

在這里插入圖片描述

劃 分

所謂劃分,就是使用域分解或功能分解的辦法將原計算問題分割成一些小的計算任務,以充分揭示并行執行的機會,

  • 目的:充分開拓演算法的并發性和可擴放性;
  • 方法:先集中資料的分解(稱域分解),然后是計算功能的分解(稱功能分解),兩者互為補充;
  • 要點:力圖避免資料和計算的復制,應使資料集和計算集互不相交,

通 信

由劃分所產生的諸并行執行的任務,一般而言都不能完全獨立執行,一個任務中的計算可能需要用到另一個任務中的資料,從而就產生了通信要求,所謂通信,就是為了進行并行計算,諸任務之間所需進行的資料傳輸,

通信模式

  • 區域/全域通信:區域通信時,每個任務只與較少的幾個近鄰通信;全域通信中,每個任務與很多別的任務通信,
  • 結構化/非結構化通信:結構化通信時,一個任務和其近鄰形成規整結構(如樹、網格等);非結構化通信中,通信網則可能是任意圖,
  • 靜態/動態通信:靜態通信,通信伙伴的身份不隨時間改變,動態通信中,通信伙伴的身份則可能由運行時所計算的資料決定且是可變的,
  • 同步/異步通信:同步通信時,接收方和發送方協同操作;異步通信中,接收方獲取資料無需與發送方協同,

組 合

從抽象轉到具體,即重新考察在劃分和通信階段所作的抉擇,力圖得到一個在某一類并行機上能有效執行的并行演算法, 目的是通過合并小尺寸的任務來減少任務數,但它仍可能多于處理器的數目,

映 射

在設計的最后階段,我們要指定每個任務到哪里去執行,此即映射(Mapping),開發映射的主要目的是減少演算法的總的執行時間,

基本策略

  • 把那些能夠并發執行的任務放在不同的處理器上以增強并行度
  • 把那些需頻繁通信的任務置于同一個處理器上以提高區域性,

演算法撰寫

矩陣相乘、線性方程組求解(稠密)、快速傅里葉變換

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

標籤:python

上一篇:憑借這個pdf上的知識拿下了百度、京東、華為、騰訊等互聯網公司的offer(Java崗)

下一篇:2.1.5-3 回圈冗余校驗(CRC)碼

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(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
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more