一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CUDA學(xué)習(xí)筆記第一篇:一個(gè)基本的CUDA C程序

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

掃碼添加小助手

加入工程師交流群

來源:AI人工智能初學(xué)者
作者:ChaucerG

目錄

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

1、CUDA的簡介

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

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

2、GPU架構(gòu)和CUDA介紹

GeForce 256是英偉達(dá)于1999年開發(fā)的第一個(gè)GPU。最初只用在顯示器上渲染高端圖形。它們只用于像素計(jì)算。后來,人們意識到如果可以做像素計(jì)算,那么他們也可以做其他的數(shù)學(xué)計(jì)算?,F(xiàn)在,GPU除了用于渲染圖形圖像外,還用于其他許多應(yīng)用程序中。這些GPU被稱為通用GPU(GPGPU)。

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

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

同樣,正常的串行CPU被設(shè)計(jì)為優(yōu)化延遲,而GPU被設(shè)計(jì)為優(yōu)化吞吐量。CPU被設(shè)計(jì)為在最短時(shí)間內(nèi)執(zhí)行所有指令,而GPU被設(shè)計(jì)為在給定時(shí)間內(nèi)執(zhí)行更多指令。GPU的這種設(shè)計(jì)理念使它們在圖像處理和計(jì)算機(jī)視覺應(yīng)用中非常有用,這也是本書的目的,因?yàn)槲覀儾唤橐鈫蝹€(gè)像素處理的延遲。我們想要的是在給定的時(shí)間內(nèi)處理更多的像素,這可以在GPU上完成。

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

3、CUDA架構(gòu)

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

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

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

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

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

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

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

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

4、開發(fā)環(huán)境說明和配置

先決條件:

1、電腦具有支持cuda的GPU(一般具有獨(dú)立顯卡就可以,不過最好不要太老的版本);
2、英偉達(dá)顯卡驅(qū)動(dòng);
3、標(biāo)準(zhǔn)C編譯器;
4、CUDA開發(fā)工具包。

windows10下cuda工具包的安裝:

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

5、開始第一個(gè)Hello CUDA程序

5.1、VS2017創(chuàng)建NVIDIA CUDA項(xiàng)目

步驟如下:

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

5.2、VS2017中輸入 CUDA代碼

#include

與C編程的區(qū)別:

1)一個(gè)名為myfirstkernel的空函數(shù),前綴為/_/_global/_/_

2)使用<<1,1>>>調(diào)用myfirstkernel函數(shù)

/_/_global/_/_是CUDA C在標(biāo)準(zhǔn)C中添加的一個(gè)限定符,它告訴編譯器在這個(gè)限定符后面的函數(shù)定義應(yīng)該在設(shè)備上而不是在主機(jī)上運(yùn)行。在前面的代碼中,myfirstkernel將運(yùn)行在設(shè)備上而不是主機(jī)上,但是,在這段代碼中,它是空的。

那么,main函數(shù)將在哪里運(yùn)行?NVCC編譯器將把這個(gè)函數(shù)提供給C編譯器,因?yàn)樗鼪]有被global關(guān)鍵字修飾,因此main函數(shù)將在主機(jī)上運(yùn)行。

代碼中的第二個(gè)不同之處在于對空的myfirstkernel函數(shù)的調(diào)用帶有一些尖括號和數(shù)值。這是一個(gè)CUDA C技巧:從主機(jī)代碼調(diào)用設(shè)備代碼。它被稱為內(nèi)核調(diào)用。內(nèi)核調(diào)用的細(xì)節(jié)將在后面的章節(jié)中解釋。尖括號內(nèi)的值表示我們希望在運(yùn)行時(shí)從主機(jī)傳遞給設(shè)備的參數(shù)?;旧希硎緣K的數(shù)量和將在設(shè)備上并行運(yùn)行的線程數(shù)。因此,在這段代碼中,<<<1,1>>>表示myfirstkernel將運(yùn)行在設(shè)備上的一個(gè)塊和一個(gè)線程或塊上。雖然這不是對設(shè)備資源的最佳使用,但是理解在主機(jī)上執(zhí)行的代碼和在設(shè)備上執(zhí)行的代碼之間的區(qū)別是一個(gè)很好的起點(diǎn)。

讓我們再來重溫和修改“Hello,CUDA!”代碼,myfirstkernel函數(shù)將運(yùn)行在一個(gè)只有一個(gè)塊和一個(gè)線程或塊的設(shè)備上。它將通過一個(gè)稱為內(nèi)核啟動(dòng)的方法從main函數(shù)內(nèi)部的主機(jī)代碼啟動(dòng)。

5.3、VS2017生成并開始執(zhí)行

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4949

    瀏覽量

    131286
  • 人工智能
    +關(guān)注

    關(guān)注

    1807

    文章

    49029

    瀏覽量

    249698
  • CUDA
    +關(guān)注

    關(guān)注

    0

    文章

    123

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    RV生態(tài)又里程碑:英偉達(dá)官宣CUDA將兼容RISC-V架構(gòu)!

    Frans?Sijstermanns宣布了則重磅消息:英偉達(dá)要將CUDA移植到RISC-V架構(gòu)上。 ? 英偉達(dá)每年出貨超10億顆RISC-V?MCU
    的頭像 發(fā)表于 07-19 00:04 ?4052次閱讀
    RV生態(tài)又<b class='flag-5'>一</b>里程碑:英偉達(dá)官宣<b class='flag-5'>CUDA</b>將兼容RISC-V架構(gòu)!

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

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

    使用NVIDIA CUDA-X庫加速科學(xué)和工程發(fā)展

    NVIDIA GTC 全球 AI 大會(huì)上宣布,開發(fā)者現(xiàn)在可以通過 CUDA-X 與新代超級芯片架構(gòu)的協(xié)同,實(shí)現(xiàn) CPU 和 GPU 資源間深度自動(dòng)化整合與調(diào)度,相較于傳統(tǒng)加速計(jì)算架構(gòu),該技術(shù)可使計(jì)算工程工具運(yùn)行速度提升至原來的 11 倍,計(jì)算規(guī)模增加至 5 倍。
    的頭像 發(fā)表于 03-25 15:11 ?709次閱讀

    STM32Cube學(xué)習(xí)筆記 (十六全)

    資料介紹: STM32Cube學(xué)習(xí)筆記,步手把手帶你進(jìn)入STM32Cube的世界,包括點(diǎn)燈,按鍵,串口,ADC,DAC等等共16
    發(fā)表于 03-22 17:02

    硅光第一篇:可調(diào)諧激光源

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

    優(yōu)秀學(xué)習(xí)筆記分享:正弦信號放大抬升,有計(jì)算有驗(yàn)證,更有顆愛學(xué)習(xí)的認(rèn)真勁兒!

    這是個(gè)非常認(rèn)真的學(xué)習(xí)筆記,來自《運(yùn)放秘籍》學(xué)員: 喜歡吃蛋炒飯 ,現(xiàn)在分享給大家。 學(xué)習(xí)
    的頭像 發(fā)表于 02-19 11:55 ?849次閱讀
    優(yōu)秀<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>分享:正弦信號放大抬升,有計(jì)算有驗(yàn)證,更有<b class='flag-5'>一</b>顆愛<b class='flag-5'>學(xué)習(xí)</b>的認(rèn)真勁兒!

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

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

    《DNESP32S3使用指南-IDF版_V1.6》第一章 本書學(xué)習(xí)方法

    :1,堅(jiān)持循序漸進(jìn)的思路編寫,從基礎(chǔ)到入門,從簡單到復(fù)雜。2,將知識進(jìn)行分類介紹,簡化學(xué)習(xí)過程,包括:基礎(chǔ)、入門、提高。3,將板卡硬件資源介紹獨(dú)立成
    發(fā)表于 11-20 09:54

    PCI-E TLP學(xué)習(xí)筆記(1)

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

    【「算力芯片 | 高性能 CPU/GPU/NPU 微架構(gòu)分析」閱讀體驗(yàn)】--了解算力芯片GPU

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

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

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

    【「大模型時(shí)代的基礎(chǔ)架構(gòu)」閱讀體驗(yàn)】+ 第一、二章學(xué)習(xí)感受

    今天閱讀了《大模型時(shí)代的基礎(chǔ)架構(gòu)》前兩章,還是比較輕松舒適的;再就是本書知識和我的工作領(lǐng)域沒有任何關(guān)聯(lián),切都是新鮮的,似乎每讀頁都會(huì)有所收獲,這種快樂的學(xué)習(xí)過程感覺也挺不錯(cuò)的。 第一
    發(fā)表于 10-10 10:36

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

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

    第一篇:V1.5-STM32f103c8t6智能小車筆記 標(biāo)準(zhǔn)庫開發(fā) 6612電機(jī)驅(qū)動(dòng)新手入門項(xiàng)目

    這是全網(wǎng)最詳細(xì)、性價(jià)比最高的STM32實(shí)戰(zhàn)項(xiàng)目入門教程,通過合理的硬件設(shè)計(jì)和詳細(xì)的視頻筆記介紹,硬件使用STM32F103主控資料多方便學(xué)習(xí),通過3萬字筆記、12多個(gè)小時(shí)視頻、20多章節(jié)代碼手把手教會(huì)你如何開發(fā)和調(diào)試。讓你更快掌
    的頭像 發(fā)表于 08-12 18:25 ?2588次閱讀
    <b class='flag-5'>第一篇</b>:V1.5-STM32f103<b class='flag-5'>c</b>8t6智能小車<b class='flag-5'>筆記</b> 標(biāo)準(zhǔn)庫開發(fā) 6612電機(jī)驅(qū)動(dòng)新手入門項(xiàng)目

    【《大語言模型應(yīng)用指南》閱讀體驗(yàn)】+ 基礎(chǔ)

    今天開始學(xué)習(xí)《大語言模型應(yīng)用指南》第一篇——基礎(chǔ),對于人工智能相關(guān)專業(yè)技術(shù)人員應(yīng)該可以輕松加愉快的完成此閱讀,但對于我還是有許多的知識點(diǎn)、專業(yè)術(shù)語比較陌生,需要網(wǎng)上搜索
    發(fā)表于 07-25 14:33