標籤:

【CUDA 基礎】2.0 CUDA編程模型概述(一)

Abstract: 本文介紹CUDA編程模型的簡要結構,包括寫一個簡單的可執行的CUDA程序,一個正確的CUDA核函數,以及相應的調整設置內存,線程來正確的運行程序。

Keywords: CUDA編程模型,CUDA編程結構,內存管理,線程管理,CUDA核函數,CUDA錯誤處理

開篇廢話

過年了,祝大家新年快樂,新年希望自己學習的東西能都學會

這是一隻不愛學習的狗,總看電視!

編程模型就是告訴我們如何寫CUDA程序,如果做過C開發的同學或者其他開發的同學都知道做個完整的項目不只是寫代碼,還有需求分析,調試,優化,部署等一些列步驟。CUDA平台也提供了著一些列的工具供我們使用,我們這一章主要就是講解這些工具怎麼用,如何編寫調試CUDA程序。以及編寫兩個矩陣運算有關的CUDA應用,以供大家把玩。

CUDA編程模型概述

CUDA編程模型為應用和硬體設備之間的橋樑,所以CUDA C是編譯型語言,不是解釋型語言,OpenCL就有點類似於解釋型語言,通過編譯器和鏈接,給操作系統執行(操作系統包括GPU在內的系統),下面的結構圖片能形象的表現他們之間的關係:

其中Communication Abstraction是編程模型和編譯器,庫函數之間的分界線。

可能大家還不太明白編程模型是啥,編程模型可以理解為,我們要用到的語法,內存結構,線程結構等這些我們寫程序時我們自己控制的部分,這些部分控制了異構計算設備的工作模式,都是屬於編程模型。

GPU中大致可以分為:

- 核函數

- 內存管理

- 線程管理

- 流

等幾個關鍵部分。

以上這些理論同時也適用於其他非CPU+GPU異構的組合。

下面我們會說兩個我們GPU架構下特有幾個功能:

- 通過組織層次結構在GPU上組織線程的方法

- 通過組織層次結構在GPU上組織內存的方法

也就是對內存和線程的控制將伴隨我們寫完前十幾篇。

從宏觀上我們可以從以下幾個環節完成CUDA應用開發:

1. 領域層

2. 邏輯層

3. 硬體層

第一步就是在領域層(也就是你所要解決問題的條件)分析數據和函數,以便在並行運行環境中能正確,高效地解決問題。

當分析設計完程序就進入了編程階段,我們關注點應轉向如何組織並發進程,這個階段要從邏輯層面思考。

CUDA模型主要的一個功能就是線程層結構抽象的概念,以允許控制線程行為。這個抽象為並行變成提供了良好的可擴展性(這個擴展性後面有提到,就是一個CUDA程序可以在不同的GPU機器上運行,即使計算能力不同)。

在硬體層上,通過理解線程如何映射到機器上,能充分幫助我們提高性能。

CUDA編程結構

完整內容參考https://face2ai.com/CUDA-F-2-0-CUDA編程模型概述1/


推薦閱讀:

TAG:科技 | CUDA | 編程 |