cuda學習2:cuda編程基本概念

CUDA基本概念

主機(host)

通常將起控制作用的CPU稱為主機(host)

設備(device)

將起加速作用的 GPU 稱為設備(device)

流處理器(streaming processor)

物理上,GPU最基本的處理單元為SP(streaming processor),又稱為CUDA core,主要包括若干整數型運算的核心、若干單精度浮點數運算的核心、若干雙精度浮點數運算的核心、若干單精度浮點數超越函數的特殊函數單元、若干混合精度的張量核心(有伏特架構引進,適用于機器學習)。

最后具體的指令和任務都是在SP上處理的,GPU進行并行計算,即為多個SP同時做處理。
每個核心可以在一個時鐘周期內執行一個線程。

流多處理器(streaming multiprocessor)

流多處理器SM(streaming multiprocessor)則是GPU的核心,又稱為GPU大核,是GPU并行計算的核心單元。

一個典型的SM包括以下幾個組件:

  • 核心SP
  • 共享內存/一級緩存 ShareMem/Cache
  • 寄存器文件Reg File
  • 加載/存儲單元LD/ST
  • 特殊功能單元SFU
  • 線程束調度器 Warp Sched

每個SM包含多個流處理器SP(CUDA core),以及共享內存、寄存器等資源,所以每個SM都可以并行執行多個線程。
每個流式多處理器可以視為具有較小結構的CPU,支持指令并行(多發射)。

在這里插入圖片描述

不同的NVIDIA GPU架構(例如Turing, Pascal, Maxwell, Kepler等)具有不同的SM設計和資源配置。
例如,某些架構可能在每個SM上有更多的CUDA核心,而其他架構可能有更多的共享內存或寄存器。

SM可以并發地執行許多線程,一般可以同時調度多個線程塊。SM的基本執行單元是線程束(thead warp),線程束包含32個線程,這些線程同時執行相同的指令,但是每個線程都包含自己的指令地址計數器和寄存器狀態,也有自己獨立的執行路徑,這導致了即便線程束中的線程同時從同一程序地址執行,但是可能具有不同的行為(比如遇到了分支結構,一些線程可能進入這個分支,但是另外一些有可能不執行,它們只能死等(因為GPU規定線程束中所有線程在同一周期執行相同的指令)),這被稱為"線程束分化"。當線程塊被劃分到某個SM上時,它將進一步劃分為多個線程束,因為這才是SM的基本執行單元,但是一個SM同時并發的線程束數是有限的。這是因為資源限制,SM要為每個線程塊分配共享內存,而也要為每個線程束中的線程分配獨立的寄存器。

全局內存(Global Memory)

GPU的主存儲器,容量較大,但訪問速度較慢。
所有的線程都可以對全局內存進行讀寫。緩存可加速對全局內存的訪問。所有通過cudaMalloc分配的存儲器都是全局內存。

共享內存(Shared Memory)

每個SM內部的高速緩存,供同一SM內的線程共享。
訪問速度比全局內存快得多。

寄存器(Registers)

每個線程的私有存儲空間,用于保存臨時變量。
寄存器是訪問速度最快的空間。

當我們在核函數中不加修飾的聲明一個變量,那該變量就是寄存器變量,如果在核函數中定義了常數長度的數組,那也會被分配到Registers中;寄存器變量是每個線程私有的,當這個線程的核函數執行完成后,寄存器變量也就不能訪問了。

寄存器是比較稀缺的資源,空間很小,Fermi架構中每個線程最多63個寄存器,Kepler架構每個線程最多255個寄存器;一個線程中如果使用了比較少的寄存器,那么SM中就會有更多的線程塊,GPU并行計算速度也就越快。

如果一個線程中變量太多,超出了Registers的空間,這時寄存器就會發生溢出,就需要其他內存(Local Memory)來存儲,當然程序的運行速度也會降低。

本地內存(Local Memory)

Local Memory也是每個線程私有的,但卻是存儲在于Global Memory中的。在核函數中符合存儲在寄存器中但不能進入核函數分配的寄存器空間中的變量將被存儲在Local Memory中。

Local Memory中可能存放的變量有以下幾種:

  • 使用未知索引的本地數組
  • 較大的本地數組或結構體
  • 任何不滿足核函數寄存器限定條件的變量

常量內存

線程(Thread)、線程塊(Block)、網格(Grid)

GPU使用線程(Thread)作為最小的執行單位。
線程被組織成線程塊(Block),多個線程塊組成網格(Grid)。

在這里插入圖片描述

以上圖為例子,把網格和線程塊都看作一個三維的矩陣。這里假設網格是一個333的三維矩陣, 線程塊是一個444的三維矩陣。

線程束(Warp)

線程束(warp)作為并行處理的基石,通過將線程組合成一個執行單元,簡化了線程管理,使線程間能夠共享數據和資源,并通過有效的調度掩蓋內存延遲。

Nvidia把32個threads組成一個warp,warp是調度和運行的基本單元。它們會被同時調度到一個SM上執行。

核函數

核函數是運行在GPU上的函數,可以并行執行,核函數通過特殊的語法和關鍵字定義,并且是 GPU 編程的核心。
定義核函數:

  • 必須使用限定詞__global__修飾
  • 核函數返回值必須是void
  • 核函數通常以<<<blockNum, threadNum>>>形式來配置執行線程和塊

參考文檔
https://blog.csdn.net/qq_42761751/article/details/144297840
https://zhuanlan.zhihu.com/p/544864997

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

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

相關文章

AVL樹的介紹與學習

目錄 1.前言 2.AVL樹 3.AVL樹的插入 平衡因子的更新 更新停止的條件 旋轉 1.前言 在學習了二叉搜索樹&#xff0c;set和map之后&#xff0c;我們接下來趁熱打鐵&#xff0c;繼續學習AVL樹。 2.AVL樹 1.AVL樹具有二叉搜索樹的性質&#xff0c;但是它的左右子樹的高度差不…

數字人接大模型第二步:實時語音同步

接上例第一步,還是dh_live項目,增加了一個完整的實時對話樣例,包含vad-asr-llm-tts-數字人全流程,以彌補之前的只有固定的問答的不足。 VAD(Voice Activity Detection,語音活動檢測)VAD用于檢測用戶是否正在說話,從而觸發后續的語音處理流程。 ASR(Automatic Speech R…

01_Long比較值 類型相同值不同

問題描述&#xff1a; 看如下代碼&#xff1a; Long a 128L; Long b 128L;System.out.println(a b);運行結果如下&#xff1a; 明明 a 和 b 的值一樣&#xff0c;但是結果卻為 False&#xff0c;為什么同樣的類型&#xff0c;同樣的值&#xff0c;卻不相等&#xff0c;這是…

EKS環境下服務重啟50X錯誤

EKS中&#xff0c;當使用AWS Load Balancer Controller時&#xff0c;ALB有兩種模式&#xff0c;Internet-facing和Internet&#xff0c;當使用Internet模式時&#xff0c;ALB注冊的是NodeIP&#xff1b;使用Internet-facing模式時&#xff0c;ALB注冊的則是Pod IP。從模式上來…

Android項目升級插件到kotlin 2.1.0后混淆網絡請求異常

背景 項目kt插件1.9.24升級到2.1.0后打包編譯release網絡請求失敗了。 retrofit版本2.9.0 錯誤詳情 java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedTypeat retrofit2.m.a(Unknown Source:2477)at retrofit2.K.invoke(U…

Vue中Axios實戰指南:高效網絡請求的藝術

Axios作為Vue生態中最流行的HTTP客戶端&#xff0c;以其簡潔的API和強大的功能成為前后端交互的首選方案。本文將帶你深入掌握Axios在Vue項目中的核心用法和高級技巧。 一、基礎配置 1. 安裝與引入 npm install axios 2. 全局掛載&#xff08;main.js&#xff09; import …

Flink維表深度解析

一、維表的概念與作用 維表&#xff08;Dimension Table&#xff09; 是數據倉庫中的核心概念&#xff0c;通常用于存儲靜態或緩慢變化的業務實體信息&#xff08;如用戶資料、商品信息、地理位置等&#xff09;。在實時流處理場景中&#xff0c;維表的作用是為主數據流&#…

SKLearn - Biclustering

文章目錄 Biclustering &#xff08;雙聚類&#xff09;譜二分聚類算法演示生成樣本數據擬合 SpectralBiclustering繪制結果 Spectral Co-Clustering 算法演示使用光譜協同聚類算法進行文檔的二分聚類 Biclustering &#xff08;雙聚類&#xff09; 關于雙聚類技術的示例。 譜…

PostSwigger Web 安全學習:CSRF漏洞2

CSRF 漏洞學習網站&#xff1a;What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy CSRF 漏洞&#xff1a;SameSite相關繞過 當瀏覽器訪問服務器時&#xff0c;服務器會在 Cookie 中添加 SameSite 屬性來告訴瀏覽器是否在來自其他…

從基礎到實戰的量化交易全流程學習:1.3 數學與統計學基礎——概率與統計基礎 | 數字特征

從基礎到實戰的量化交易全流程學習&#xff1a;1.3 數學與統計學基礎——概率與統計基礎 | 數字特征 第一部分&#xff1a;概率與統計基礎 第2節&#xff1a;數字特征&#xff1a;期望值、方差、協方差與相關系數 一、期望值&#xff08;Expected Value&#xff09;&#xff1a…

MySQL(聚合函數)

單行函數 對每一條記錄輸入值進行計算&#xff0c;得到相應的計算結果&#xff0c;返回給用戶&#xff0c;也就是說&#xff0c;每條記錄作為一個輸入參數&#xff0c;經過函數計算得到每條記錄的計算結果。 每一個函數中都有一些常用的函數&#xff08;方法&#xff09; 在學…

babel核心知識點

Babel 是一個 JavaScript 編譯器&#xff0c;主要用于將 ECMAScript 2015 版本的代碼轉換為向后兼容的 JavaScript 代碼&#xff0c;以便在舊版本的瀏覽器或環境中運行。以下是 Babel 的核心知識點&#xff1a; 1. 基本概念 編譯器&#xff1a;Babel 本質上是一個編譯器&…

javaScript--數據結構和算法

在 JavaScript 里&#xff0c;數據結構和算法是十分關鍵的部分&#xff0c;下面介紹幾種常見的數據結構和對應的算法。 數組&#xff08;Array&#xff09; 數組是最基礎的數據結構&#xff0c;用于存儲一系列有序的數據。 // 創建數組 const arr [1, 2, 3, 4, 5];// 訪問元素…

π0.5:帶開放世界泛化的視覺-語言-動作模型

25年4月來自具身機器人創業公司 PI 公司的論文“π0.5: a Vision-Language-Action Model with Open-World Generalization”。 為了使機器人發揮作用&#xff0c;它們必須在實驗室之外的現實世界中執行實際相關的任務。雖然視覺-語言-動作 (VLA) 模型在端到端機器人控制方面已…

使用 OpenCV 和 dlib 進行人臉檢測

文章目錄 1. 什么是 dlib2. 前期準備介紹2.1 環境準備2.2 dlib 的人臉檢測器 3. 代碼實現3.1 導入庫3.2 加載檢測器3.3 讀取并調整圖像大小3.4 檢測人臉3.5 繪制檢測框3.6 顯示結果 4. 完整代碼5. 優化與改進5.1 提高檢測率5.2 處理 BGR 與 RGB 問題 6. 總結 人臉檢測是計算機視…

spring 的PropertySource 類與 @PropertySource 注解詳解與對比

PropertySource 類與 PropertySource 注解詳解與對比 在這里插入圖片描述 一、PropertySource 類詳解 1. 類型與作用 類型&#xff1a;接口&#xff08;org.springframework.core.env.PropertySource&#xff09;作用&#xff1a;抽象配置數據源&#xff0c;提供統一的鍵值…

Java后端開發day37--源碼解析:TreeMap可變參數--集合工具類:Collections

&#xff08;以下內容全部來自上述課程&#xff09; 1. TreeMap 1.1 須知 1.1.1 Entry 節點初始為黑色&#xff1a;提高代碼閱讀性 1.1.2 TreeMap中的成員變量 comparator&#xff1a;比較規則root&#xff1a;紅黑樹根節點的地址值size&#xff1a;集合的長度和紅黑樹…

基于Playwright的瀏覽器自動化MCP服務

一、服務定位與核心功能 github.com/executeautomation/mcp-playwright 是一個基于 Playwright&#xff08;微軟開源的跨瀏覽器自動化測試框架&#xff09;的 Model Context Protocol (MCP) 服務&#xff0c;核心功能是將瀏覽器自動化能力集成到大語言模型&#xff08;LLM&…

OSPF網絡協議

OSPF&#xff08;Open Shortest Path First&#xff09;是一種鏈路狀態路由協議&#xff0c;屬于IGP&#xff08;內部網關協議&#xff09;&#xff0c;用于在單一自治系統&#xff08;AS&#xff09;內動態分發路由信息。它通過計算最短路徑&#xff08;基于Dijkstra算法&…

Ubuntu 22.04.4操作系統初始化詳細配置

上一章節&#xff0c;主要講解了Ubuntu 22.04.4操作系統的安裝&#xff0c;但是在實際生產環境中&#xff0c;需要對Ubuntu操作系統初始化&#xff0c;從而提高系統的性能和穩定性。 一、查看Ubuntu系統版本和內核版本 # 查看系統版本 testubuntu:~$ sudo lsb_release -a Rel…