在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CUDA學習筆記第一篇:一個基本的CUDA C程序

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-14 23:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

來源:AI人工智能初學者
作者:ChaucerG

目錄

1、CUDA的簡介
2、GPU架構和CUDA介紹
3、CUDA架構
4、開發環境說明和配置
5、開始第一個Hello CUDA程序
5.1、VS2017創建NVIDIA CUDA項目
5.2、VS2017中輸入 CUDA代碼(附.cu代碼以及講解)
5.3、VS2017生成并開始執行
參考

1、CUDA的簡介

計算統一設備架構(Compute Unified Device Architecture,CUDA)是由英偉達(NVIDIA)開發的一套非常流行的并行計算平臺和編程模型。它只支持NVIDIA GPU卡。OpenCL則用來為其他類型的GPU編寫并行代碼,比如AMD英特爾,但它比CUDA更復雜。CUDA可以使用簡單的編程API在圖形處理單元(GPU)上創建大規模并行應用程序。

使用C和C++的軟件開發人員可以通過使用CUDA C或C++來利用GPU的強大性能來加速他們的軟件應用程序。用CUDA編寫的程序類似于用簡單的C或C++編寫的程序,添加需要利用GPU并行性的關鍵字。CUDA允許程序員指定CUDA代碼的哪個部分在CPU上執行,哪個部分在GPU上執行。

2、GPU架構和CUDA介紹

GeForce 256是英偉達于1999年開發的第一個GPU。最初只用在顯示器上渲染高端圖形。它們只用于像素計算。后來,人們意識到如果可以做像素計算,那么他們也可以做其他的數學計算。現在,GPU除了用于渲染圖形圖像外,還用于其他許多應用程序中。這些GPU被稱為通用GPU(GPGPU)。

CPU具有復雜的控制硬件和較少的數據計算硬件。復雜的控制硬件在性能上提供了CPU的靈活性和一個簡單的編程接口,但是就功耗而言,這是昂貴的。而另一方面,GPU具有簡單的控制硬件和更多的數據計算硬件,使其具有并行計算的能力。這種結構使它更節能。缺點是它有一個更嚴格的編程模型。在GPU計算的早期,OpenGL和DirectX等圖形API是與GPU交互的唯一方式。對于不熟悉OpenGL或DirectX的普通程序員來說,這是一項復雜的任務。這促成了CUDA編程架構的開發,它提供了一種與GPU交互的簡單而高效的方式。

一般來說,任何硬件架構的性能都是根據延遲和吞吐量來度量的。延遲是完成給定任務所花費的時間,而吞吐量是在給定時間內完成任務的數量。這些概念并不矛盾。通常情況下,提高一個,另一個也會隨之提高。在某種程度上,大多數硬件架構旨在提高延遲或吞吐量。

同樣,正常的串行CPU被設計為優化延遲,而GPU被設計為優化吞吐量。CPU被設計為在最短時間內執行所有指令,而GPU被設計為在給定時間內執行更多指令。GPU的這種設計理念使它們在圖像處理和計算機視覺應用中非常有用,這也是本書的目的,因為我們不介意單個像素處理的延遲。我們想要的是在給定的時間內處理更多的像素,這可以在GPU上完成。

綜上所述,如果我們想在相同的時鐘速度和功率要求下提高計算性能,那么并行計算就是我們所需要的。GPU通過讓許多簡單的計算單元并行工作來提供這種能力。現在,為了與GPU交互,并利用其并行計算能力,我們需要一個由CUDA提供的簡單的并行編程架構。

3、CUDA架構

CUDA架構包括幾個專門為GPU通用計算而設計的特性,這在早期的架構中是不存在的。它包括一個unified shedder管道,它允許GPU芯片上的所有算術邏輯單元(ALU)被一個CUDA程序編組。ALU還被設計成符合IEEE浮點單精度和雙精度標準,因此它可以用于通用應用程序。指令集也適合于一般用途的計算,而不是特定于像素計算。它還允許對內存的任意讀寫訪問。這些特性使CUDA GPU架構在通用應用程序中非常有用。

所有的GPU都有許多被稱為核心(Core)的并行處理單元。

在硬件方面,這些核心被分為流處理器和流多處理器。GPU有這些流多處理器的網格。

在軟件方面,CUDA程序是作為一系列并行運行的多線程(Thread)來執行的。每個線程都在不同的核心上執行。可以將GPU看作多個塊(Block)的組合,每個塊可以執行多個線程。每個塊綁定到GPU上的不同流多處理器。

CUDA程序員不知道如何在塊和流多處理器之間進行映射,但是調度器知道并完成映射。來自同一塊的線程可以相互通信。GPU有一個分層的內存結構,處理一個塊和多個塊內線程之間的通信。這將在接下來的章節中詳細討論。

作為一名程序員,你會好奇CUDA中的編程模型是什么,以及代碼將如何理解它是應該在CPU上執行還是在GPU上執行。我們將CPU及其內存稱為主機(Host),GPU及其內存稱為設備(Device)。CUDA代碼包含主機和設備的代碼。主機代碼由普通的C或C++編譯器在CPU上編譯,設備代碼由GPU編譯器在GPU上編譯。主機代碼通過所謂的內核調用調用設備代碼。它將在設備上并行啟動多個線程。在設備上啟動多少線程是由程序員來決定的。

現在,你可能會問這個設備代碼與普通C代碼有何不同。答案是,它類似于正常的串行C代碼。只是這段代碼是在大量內核上并行執行的。然而,要使這段代碼工作,它需要設備顯存上的數據。因此,在啟動線程之前,主機將數據從主機內存復制到設備顯存。線程處理來自設備顯存的數據,并將結果存儲在設備顯存中。最后,將這些數據復制回主機內存進行進一步處理。綜上所述,CUDA C程序的開發步驟如下:

1)為主機和設備顯存中的數據分配內存。
2)將數據從主機內存復制到設備顯存。
3)通過指定并行度來啟動內核。
4)所有線程完成后,將數據從設備顯存復制回主機內存。
5)釋放主機和設備上使用的所有內存。

4、開發環境說明和配置

先決條件:

1、電腦具有支持cuda的GPU(一般具有獨立顯卡就可以,不過最好不要太老的版本);
2、英偉達顯卡驅動;
3、標準C編譯器;
4、CUDA開發工具包。

windows10下cuda工具包的安裝:

1、MicroSoft Visio Studio 2017的安裝(也可以是其他的版本,筆者使用的是2017)
2、下載cuda10.1安裝包(最新的是10.2);
3、直接點擊.exe文件進行安裝,選擇自定義安裝,所有選項均勾選;
4、配置CUDA系統環境變量(和配置深度學習環境一樣配置系統環境變量)。

5、開始第一個Hello CUDA程序

5.1、VS2017創建NVIDIA CUDA項目

步驟如下:

1)打開Microsoft Visual Studio。
2)進入File|New|Project。
3)依次選擇NVIDIA|CUDA 10.1|CUDA 10.1 Runtime。
4)為項目自定義名稱,然后單擊OK按鈕。
5)它將創建一個帶有kernel.cu示例文件的項目。現在雙擊打開這個文件。
6)從文件中刪除現有代碼,寫入前面編寫的那段代碼。
7)從生成(Build)選項卡中選擇生成(build)進行編譯,并按快捷鍵Ctrl+F5調試代碼。

5.2、VS2017中輸入 CUDA代碼

#include

與C編程的區別:

1)一個名為myfirstkernel的空函數,前綴為/_/_global/_/_

2)使用<<1,1>>>調用myfirstkernel函數

/_/_global/_/_是CUDA C在標準C中添加的一個限定符,它告訴編譯器在這個限定符后面的函數定義應該在設備上而不是在主機上運行。在前面的代碼中,myfirstkernel將運行在設備上而不是主機上,但是,在這段代碼中,它是空的。

那么,main函數將在哪里運行?NVCC編譯器將把這個函數提供給C編譯器,因為它沒有被global關鍵字修飾,因此main函數將在主機上運行。

代碼中的第二個不同之處在于對空的myfirstkernel函數的調用帶有一些尖括號和數值。這是一個CUDA C技巧:從主機代碼調用設備代碼。它被稱為內核調用。內核調用的細節將在后面的章節中解釋。尖括號內的值表示我們希望在運行時從主機傳遞給設備的參數。基本上,它表示塊的數量和將在設備上并行運行的線程數。因此,在這段代碼中,<<<1,1>>>表示myfirstkernel將運行在設備上的一個塊和一個線程或塊上。雖然這不是對設備資源的最佳使用,但是理解在主機上執行的代碼和在設備上執行的代碼之間的區別是一個很好的起點。

讓我們再來重溫和修改“Hello,CUDA!”代碼,myfirstkernel函數將運行在一個只有一個塊和一個線程或塊的設備上。它將通過一個稱為內核啟動的方法從main函數內部的主機代碼啟動。

5.3、VS2017生成并開始執行

審核編輯 黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4934

    瀏覽量

    131062
  • 人工智能
    +關注

    關注

    1806

    文章

    48960

    瀏覽量

    248586
  • CUDA
    +關注

    關注

    0

    文章

    122

    瀏覽量

    14107
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    功德+1,用小安派-Eyes-S1做一個電子木魚

    木魚聲響,煩惱走光光~敲電子木魚,品賽博人生,今天你的功德積累到多少了?2024年的第一篇教程來了,本篇學習如何添加LVGL事件,并制作完成
    的頭像 發表于 04-09 18:38 ?333次閱讀
    功德+1,用小安派-Eyes-S1做<b class='flag-5'>一個</b>電子木魚

    使用NVIDIA CUDA-X庫加速科學和工程發展

    NVIDIA GTC 全球 AI 大會上宣布,開發者現在可以通過 CUDA-X 與新代超級芯片架構的協同,實現 CPU 和 GPU 資源間深度自動化整合與調度,相較于傳統加速計算架構,該技術可使計算工程工具運行速度提升至原來的 11 倍,計算規模增加至 5 倍。
    的頭像 發表于 03-25 15:11 ?671次閱讀

    STM32Cube學習筆記 (十六全)

    資料介紹: STM32Cube學習筆記步手把手帶你進入STM32Cube的世界,包括點燈,按鍵,串口,ADC,DAC等等共16
    發表于 03-22 17:02

    硅光第一篇:可調諧激光源

    作者:顧磊在1970年,美國康寧公司實現了項突破性進展,它將高錕博士的光纖理論轉化為現實,成功制造出世界上首根低損耗光纖,這成就開啟了光纖通信的新紀元。隨著光纖通信技術的迅猛發展,可調諧激光器在
    的頭像 發表于 03-05 10:20 ?643次閱讀
    硅光<b class='flag-5'>第一篇</b>:可調諧激光源

    優秀學習筆記分享:正弦信號放大抬升,有計算有驗證,更有顆愛學習的認真勁兒!

    這是非常認真的學習筆記,來自《運放秘籍》學員: 喜歡吃蛋炒飯 ,現在分享給大家。 學習
    的頭像 發表于 02-19 11:55 ?806次閱讀
    優秀<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>分享:正弦信號放大抬升,有計算有驗證,更有<b class='flag-5'>一</b>顆愛<b class='flag-5'>學習</b>的認真勁兒!

    FacenetPytorch人臉識別方案--基于米爾全志T527開發板

    : print('由于歐氏距離大于匹配閾值,故不匹配') 此代碼是使用訓練后的模型程序進行使用,在程序中需要標明人臉識別對比的圖像。2.實踐過程第一次運行時系統需要
    發表于 11-28 15:57

    PCI-E TLP學習筆記(1)

    今天給大俠帶來PCI-Express transaction Layer specification(處理層協議),本次PCIE TLP 學習經驗分享分為三,今天帶來第一篇TLP概況(四種空間
    的頭像 發表于 11-06 09:14 ?2703次閱讀
    PCI-E TLP<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>(1)

    【「算力芯片 | 高性能 CPU/GPU/NPU 微架構分析」閱讀體驗】--了解算力芯片GPU

    的 wavefront。 為了提高效率,GPGPU也擁有指令緩存。指令緩存是GPGPU流水線的第一個調度部分。 █GPGPU存儲體系與線程管理 GPGPU存儲體系本章描述方式采用了CUDA編程框架術語,基本上
    發表于 11-03 12:55

    有沒有大佬知道NI vision 有沒有辦法通過gpu和cuda來加速圖像處理

    有沒有大佬知道NI vision 有沒有辦法通過gpu和cuda來加速圖像處理
    發表于 10-20 09:14

    【「大模型時代的基礎架構」閱讀體驗】+ 第一、二章學習感受

    今天閱讀了《大模型時代的基礎架構》前兩章,還是比較輕松舒適的;再就是本書知識和我的工作領域沒有任何關聯,切都是新鮮的,似乎每讀頁都會有所收獲,這種快樂的學習過程感覺也挺不錯的。 第一
    發表于 10-10 10:36

    怎么在TMDSEVM6678: 6678自帶的FFT接口和CUDA提供CUFFT函數庫選擇?

    請教下gpgpu上包括4Riscv cpu和DPU, 沒有6678,要替換原來信號處理用的6678,該怎么在6678自帶的FFT接口和CU
    發表于 09-27 07:20

    第一篇:V1.5-STM32f103c8t6智能小車筆記 標準庫開發 6612電機驅動新手入門項目

    這是全網最詳細、性價比最高的STM32實戰項目入門教程,通過合理的硬件設計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便學習,通過3萬字筆記、12多個小時視頻、20多章節代碼手把手教會你如何開發和調試。讓你更快掌
    的頭像 發表于 08-12 18:25 ?2471次閱讀
    <b class='flag-5'>第一篇</b>:V1.5-STM32f103<b class='flag-5'>c</b>8t6智能小車<b class='flag-5'>筆記</b> 標準庫開發 6612電機驅動新手入門項目

    【《大語言模型應用指南》閱讀體驗】+ 基礎

    今天開始學習《大語言模型應用指南》第一篇——基礎,對于人工智能相關專業技術人員應該可以輕松加愉快的完成此閱讀,但對于我還是有許多的知識點、專業術語比較陌生,需要網上搜索
    發表于 07-25 14:33

    打破英偉達CUDA壁壘?AMD顯卡現在也能無縫適配CUDA

    電子發燒友網報道(文/梁浩斌)直以來,圍繞CUDA打造的軟件生態,是英偉達在GPU領域最大的護城河,尤其是隨著目前AI領域的發展加速,市場火爆,英偉達GPU+CUDA的開發生態則更加穩固,AMD
    的頭像 發表于 07-19 00:16 ?5865次閱讀

    英國公司實現英偉達CUDA軟件在AMD GPU上的無縫運行

    7月18日最新資訊,英國創新科技企業Spectral Compute震撼發布了其革命性GPGPU編程工具包——“SCALE”,該工具包實現了英偉達CUDA軟件在AMD GPU上的無縫遷移與運行,標志著在GPU計算領域,NVIDIA長期以來的市場壟斷地位或將迎來重大挑戰。
    的頭像 發表于 07-18 14:40 ?1042次閱讀
    主站蜘蛛池模板: 一区二区手机视频 | 亚洲成av人片在线观看无码 | 国产精品你懂的在线播放 | 久久九九国产精品怡红院 | 全黄色一级片 | 91成人免费视频 | 免费看性 | 国产一区二卡三区四区 | 国产综合精品久久亚洲 | 成人三级电影在线观看 | 色婷婷色丁香 | 黄频网站免费大全在线观看 | 中国农村一级片 | 亚洲午夜精品久久久久久人妖 | 片黄免费 | xxxx69日本| 婷婷综合 在线 | 五月婷婷亚洲综合 | 色cccwww在线播放 | 色图综合网 | 天天做天天做天天综合网 | 能看的黄色网址 | 精品国产免费一区二区 | 男人操女人免费视频 | 一级美女视频 | 国产高清在线精品一区 | 欧美高清一级 | 日韩亚洲人成网站在线播放 | 苍井优一级毛片免费观看 | 国产精品视频色拍拍 | 欧美一级视频在线观看 | 视频免费在线观看 | 一区精品视频 | 午夜精品一区二区三区在线观看 | 456成人免费高清视频 | 久久狠狠色噜噜狠狠狠狠97 | 鲁丝一区二区三区 | 久久久久久国产精品mv | h小视频在线 | 加勒比在线免费视频 | 四虎海外在线永久免费看 |