Nvidia CUDA初級教程1 CPU體系架構綜述

Nvidia CUDA初級教程1 CPU體系架構綜述

視頻:https://www.bilibili.com/video/BV1kx411m7Fk?p=2

講師:周斌

本節內容:了解現代CPU的架構和性能優化:

  • 流水線 Pipelining
  • 分支預測 Branch Prediction
  • 超標量 Superscalar
  • 亂序執行 Out-of-Order (OoO) Excution
  • 存儲器層次 Memeory Hierarchy
  • 矢量操作 Vertor Operations
  • 多核處理 Multi-Core

CPU

什么是CPU?

  • 執行指令、處理數據的器件

    • 完成基本的邏輯和算術指令
  • 現在增加了復雜功能

    • 內存接口
    • 外部設備接口
  • 包含大量的晶體管

    非常大(上億…)

什么是指令?

  • 算術:add r4, r4 -> r4
  • 訪存:load [r4] -> r7
  • 控制:jz end

對于一個編譯好的程序,最優化目標:
cyclesinstruction×secondscycle\frac{cycles}{instruction}\times \frac{seconds}{cycle} instructioncycles?×cycleseconds?
CPI(每條指令的時鐘數)&時鐘周期

這兩個指標彼此并不獨立,會存在 trade-off。

桌面應用

桌面應用有以下特點:

  • 輕量級進程,少量線程
  • 大量分支和交互操作
  • 大量的存儲器訪問
  • 真正用于數值計算的指令很少

IO密集型程序

CPU性能優化

流水線

取指、譯碼、執行、訪存、寫回,邏輯上是串行的,但是在實際的CPU實現中,有大量并行優化的部分。流水線利用指令級并行 (instruction-level parallelism, ILP)

Pros: 極大地減小時鐘周期

Cons: 但是會增加一些延遲和芯片面積

流水線帶來的其他的問題:

  1. 具有依賴關系的指令怎樣處理
  2. 分支怎么處理
  3. 流水線的長度,14級/20級?并不是越高越好

其他一些優化:

  • 旁路 Bypassing

  • 停滯 Stalls

  • 分支 Branches

分支預測

基于果蛆的分支記錄,猜測下一條指令

現代分支預測器的準確度大于90%

Pros: 提升性能及能量效率

Cons: 面積增加、可能會增加延遲

分支斷定

用條件語句替換分支

Pros:不適用分支預測器,減小面積,減少錯誤預測

超標量

常規 IPC (instructions/cycle) 受限于 1 instuction / clock

超標量:增加流水線的寬度

峰值IPC為N(N路超標量),但實際中,會有分支和調度產生的開銷,需要一些技巧來接近峰值

Pros: 提升IPC

Cons: 增加了面積、N倍資源占用、旁路網絡 N^2、需要更多寄存器和存儲器帶寬

指令調度

考慮如下指令:

xor r1, r2 -> r3
add r3, r4 -> r4
sub r5, r2 -> r3
addi r3, 1 -> r1
  • xor與add互相依賴 (Read-After-Write, RAW)
  • sub與addi互相依賴 (RAW)
  • xor與sub不依賴 (WAW) ,但是它們會用到同一個寄存器 r3

寄存器重命名

替換寄存器:

xor p1, p2 -> p6
add p6, p4 -> p7
sub p5, p2 -> p8
addi p8, 1 -> p9

現在xor與sub可以并行執行

亂序執行

重排指令,獲得最大的吞吐率

  • 重排緩沖區 Reorder Buffer,記錄所有執行中的指令狀態
  • 發射隊列/調度器 Issue Queue/Scheduler ,選擇下一條執行的指令

Pros: IPC接近理想狀態

Cons: 面積增加、功耗增加

存儲器層次

  • 存儲器越大越慢

緩存 caching

  • 將數據放在盡可能接近的位置
  • 利用:
    • 時間臨近性:剛剛使用過的數據很可能會被再使用
    • 空間臨近性:傾向于使用周圍的臨近的數據

緩存層次:

  • 硬件管理

    • L1、L2、L3緩存
  • 軟件管理

    內存、磁盤

存儲器的另外的考慮

  • 分區 banking
    • 避免多端口
  • 一致性 coherency
  • 控制器 memory controller
    • 多個通道,增加帶寬

CPU內部的并行性

  • 指令級并行 ILP
    • 超標量
    • 亂序執行
  • 數據級并行 DLP
    • 矢量計算
  • 線程級并行 TLP
    • 同步多線程 SMT
    • 多核

向量運算

for (int i=0; i<N; i++) {A[i] = B[i] + C[i];
}

數據級并行

  • 單指令多數據 Single Instruction Multiple Data (SIMD)
    • 執行單元(ALU)很寬
    • 寄存器也很寬
for (int i=0; i<N; i+=4) {// 并行 同時計算A[i] = B[i] + C[i];A[i+1] = B[i+1] + C[i+1];A[i+2] = B[i+2] + C[i+2];A[i+3] = B[i+3] + C[i+3];
}

x86的向量運算

  • SSE2
  • AVX

線程級并行

線程

  • 線程組成
    • 指令流 instruction streams
    • 私有寄存器,程序計數器,棧
    • 共享全局變量
  • 程序員可以創建和銷毀
  • 程序員或者OS都可以調度

多核

  • 將流水線完整復制
  • Sandy Bridge-E: 6 cores
    • 完整的核,除了最后一級緩存外,不共享其他資源
    • 繼續保持摩爾定律
  • 多核程序核利用率的問題

鎖、一致性和同一性

鎖 lock

  • 問題:多個線程讀寫同一塊數據
  • 解決方法:加鎖

一致性 coherence

  • 問題:誰的數據是正確的?
  • 解決方法:緩存一致性協議

同一性 consistency

  • 問題:什么樣的數據是正確的
  • 存儲器同一性模型

新時代的計算技術

  • 能量墻
  • 常規傳統單核處理器遇到物理約束,時鐘頻率 (perf/clock) 無法保持線性增長,免費的午餐要消失了

新摩爾定律

  • 處理器越來越胖,核越來越多
  • 單核的性能不會大幅提升
  • 另外一堵墻:存儲器墻

處理器的存儲器帶寬無法滿足處理能力的提升

結論

  • CPU為串行程序優化:

    • 流水線、分支預測、超標量、亂序執行、…
    • 通過高時鐘頻率和高利用率來降低執行時間
  • 緩慢的內存帶寬(存儲器帶寬)將會是大問題

  • 并行處理是方向

    • Sandy Bridge-E 6-12 活動線程
  • 如果有成千上萬的活動線程并發執行呢?

Ref:

https://www.bilibili.com/video/BV1kx411m7Fk?p=2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532533.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532533.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532533.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Nvidia CUDA初級教程2 并行程序設計概述

Nvidia CUDA初級教程2 并行程序設計概述 視頻&#xff1a;https://www.bilibili.com/video/BV1kx411m7Fk?p3 講師&#xff1a;周斌 本節內容&#xff1a; 為什么需要&#xff1f;怎么做&#xff1f;一些技術和概念 串并行計算模式 串行計算模式 常規軟件時串行的 設計運行…

Nvidia CUDA初級教程4 GPU體系架構概述

Nvidia CUDA初級教程4 GPU體系架構概述 視頻&#xff1a;https://www.bilibili.com/video/BV1kx411m7Fk?p5 講師&#xff1a;周斌 本節內容&#xff1a; 為什么需要GPU三種方法提升GPU的處理速度實際GPU的設計舉例&#xff1a; NVDIA GTX 480: FermiNVDIA GTX 680: Kepler GP…

Nvidia CUDA初級教程5 CUDA/GPU編程模型

Nvidia CUDA初級教程5 CUDA/GPU編程模型 視頻&#xff1a;https://www.bilibili.com/video/BV1kx411m7Fk?p6 講師&#xff1a;周斌 本節內容&#xff1a; CPU和GPU互動模式GPU線程組織模型&#xff08;需要不停強化&#xff09;GPU存儲模型基本的編程問題 CPU與GPU交互 各自…

Nvidia CUDA初級教程6 CUDA編程一

Nvidia CUDA初級教程6 CUDA編程一 視頻&#xff1a;https://www.bilibili.com/video/BV1kx411m7Fk?p7 講師&#xff1a;周斌 GPU架構概覽 GPU特別使用于&#xff1a; 密集計算&#xff0c;高度可并行計算圖形學 晶體管主要被用于&#xff1a; 執行計算而不是 緩存數據控制指令…

由前中后遍歷序列構建二叉樹

由前/中/后遍歷序列構建二叉樹 基礎 首先&#xff0c;我們需要知道前中后序三種深度優先遍歷二叉樹的方式的具體順序&#xff1a; 前序&#xff1a;中左右中序&#xff1a;左中右后序&#xff1a;左右中 另外&#xff0c;要知道只有中序前/后序可以唯一確定一棵二叉樹&…

手寫nms

手寫nms 計算寬高的時候加1是為什么&#xff1f; 本文總結自互聯網的多種nms實現&#xff0c;供參考&#xff0c;非博主原創&#xff0c;各原文鏈接如下&#xff0c;也建議大家動手寫一寫。 Ref&#xff1a; 淺談NMS的多種實現 目標窗口檢測算法-NMS非極大值抑制 一、fas…

目標檢測綜述

目標檢測綜述 轉自&#xff1a;https://zhuanlan.zhihu.com/p/383616728 論文參考&#xff1a;[Object Detection in 20 Years: A Survey][https://arxiv.org/abs/1905.05055] 引言 目標檢測領域發展至今已有二十余載&#xff0c;從早期的傳統方法到如今的深度學習方法&#x…

Nvidia CUDA初級教程7 CUDA編程二

Nvidia CUDA初級教程7 CUDA編程二 視頻&#xff1a;https://www.bilibili.com/video/BV1kx411m7Fk?p8 講師&#xff1a;周斌 本節內容&#xff1a; 內置類型和函數 Built-ins and functions線程同步 Synchronizing線程調度 Scheduling threads存儲模型 Memory model重訪 Matr…

詳解優酷視頻質量評價體系

萬字長文 | 詳解優酷視頻質量評價體系 分享嘉賓&#xff5c;李靜博士&#xff0c;阿里巴巴文娛集團資深算法專家&#xff0c;阿里巴巴大文娛摩酷實驗室視頻體驗與質量團隊負責人 整理出品&#xff5c;AICUG人工智能社區 本文地址&#xff1a;https://www.6aiq.com/article/1617…

視頻質量評價:挑戰與機遇

視頻質量評價&#xff1a;挑戰與機遇 轉自&#xff1a;https://zhuanlan.zhihu.com/p/384603663 本文整理自鵬城實驗室助理研究員王海強在LiveVideoStack線上分享上的演講。他通過自身的實踐經驗&#xff0c;詳細講解了視頻質量評價的挑戰與機遇。 文 / 王海強 整理 / LiveVi…

關于二分法的邊界問題及兩種寫法

關于二分法的邊界問題及兩種寫法 二分查找法大家很熟悉了&#xff0c;對于一個有序序列&#xff0c;我們可以通過二分查找法在 O(logN)O(logN)O(logN) 的時間內找到想要的元素。但是&#xff0c;在代碼實現的過程中&#xff0c;如果沒有仔細理解清楚&#xff0c;二分法的邊界條…

LeetCode上的各種股票最大收益

LeetCode上的各種股票最大收益 對于力扣平臺上的股票類型的題目&#xff1a; 121 買賣股票的最佳時機 122 買賣股票的最佳時機 II 123 買賣股票的最佳時機 III 124 買賣股票的最佳時機 IV 309 最佳買賣股票時機含冷凍期 714 買賣股票的最佳時機含手續費 劍指 Offer 63. …

建設專業化運維服務團隊必要性

信息系統的生命周期涵蓋&#xff1a;設計、開發、測試、部署上線、運行維護。其中&#xff0c;運行維護階段是信息系統生命周期中的關鍵環節&#xff0c;其執行效果直接影響系統是否能達到預期的運行目標。為了實現這個目標&#xff0c;我們必須建立一個以業務服務為導向的專業…

docker初探

docker初探 本文旨在介紹 docker 基本的安裝、常用命令和常見概念的辨析&#xff0c;方便新手入門和筆者日后查閱&#xff0c;大部分內容整理自互聯網&#xff0c;原出處在文中注明。 文章目錄docker初探docker安裝&#xff08;mac&#xff09;版本、信息相關命令version/info…

ubuntu安裝zsh、oh-my-zsh及常用配置

ubuntu安裝zsh、oh-my-zsh及常用配置 目前&#xff0c;ubuntu默認的shell是bash&#xff0c;但還有一種shell&#xff0c;叫做zsh它比bash更加強大&#xff0c;功能也更加完善&#xff0c;zsh雖說功能強大&#xff0c;但是配置比較復雜導致流行度不是很高 但是好東西終究是好…

Segmentaion標簽的三種表示:poly、mask、rle

Segmentaion標簽的三種表示&#xff1a;poly、mask、rle 不同于圖像分類這樣比較簡單直接的計算機視覺任務&#xff0c;圖像分割任務&#xff08;又分為語義分割、實例分割、全景分割&#xff09;的標簽形式稍為復雜。在分割任務中&#xff0c;我們需要在像素級上表達的是一張…

tensorboard報錯:ValueError Duplicate plugins for name projector 問題的出現及解決過程

tensorboard報錯&#xff1a;ValueError: Duplicate plugins for name projector 問題的出現及解決過程 記錄如題問題的出現及解決過程。 報錯命令及信息 筆者在終端調用 tensorboard 時&#xff1a; tensorboard --logdirruns/ --bind_all報錯&#xff1a; raise ValueEr…

發布自己的Python包(Pypi)

發布自己的Python包(Pypi) 我們經常使用 Pypi 來安裝包&#xff0c;但是有時候我們也想要發布自己的 Pypi 包&#xff0c;有可能我們寫了一個特別牛的包&#xff0c;也有可能我們只是想使用自己常用的一些輪子&#xff0c;可能這是我們日常編碼中很常用的一些輪子&#xff0c;…

Ubuntu PPA 使用指南

Ubuntu PPA 使用指南 轉自&#xff1a;https://zhuanlan.zhihu.com/p/55250294 一篇涵蓋了在 Ubuntu 和其他 Linux 發行版中使用 PPA 的幾乎所有問題的深入的文章。 如果你一直在使用 Ubuntu 或基于 Ubuntu 的其他 Linux 發行版&#xff0c;例如 Linux Mint、Linux Lite、Zorin…

如何在 Linux 中快速地通過 HTTP 提供文件訪問服務

如何在 Linux 中快速地通過 HTTP 提供文件訪問服務 轉自&#xff1a;https://linux.cn/article-10205-1.html 如今&#xff0c;我有很多方法來通過 Web 瀏覽器為局域網中的其他系統提供單個文件或整個目錄的訪問。我在我的 Ubuntu 測試機上測試了這些方法&#xff0c;它們如下面…