使用VS2022对GPU进行CUDA编程

描述

在异构计算架构中,GPU与CPU通过PCIe总线连接在一起来协同工作,CPU所在位置称为为主机端(host),而GPU所在位置称为设备端(device),两者优势互补。

CUDA作为GPU的编程模型,提供了对其他编程语言的支持,例如常用的C/C++,Python等。

下面在windows系统下,使用VS2022对GPU进行CUDA编程。

开始之前你需要准备的硬件是:一块GPU显卡。并假设你已经提前安装了VS2022,而且具备一定的软件编程经验。

安装CUDA

首先进行CUDA编程模型的安装,根据自己的系统情况到CUDA官网下载安装包。下载完成后进行安装,过程很简单。 

 PCIE总线

PCIE总线

安装完成后,“win+R”输入cmd打开终端后输入:nvcc -V检验安装是否成功。

PCIE总线

若需要下载以前的版本,你还可以点击查看你需要下载的CUDA版本:

PCIE总线

PCIE总线PCIE总线

创建VS2022项目

CUDA安装完成后,打开VS2022创建新项目,选择CUDA runtime。

PCIE总线

PCIE总线

PCIE总线

新建完成后有一个简单的例程,直接进行调试即可看到下面的结果:

PCIE总线

在CUDA中,用host指代CPU及其内存,用device指代GPU及其内存。

CUDA程序既包含host程序,又包含device程序,它们分别在CPU和GPU上运行。

同时,host与device之间可以进行数据拷贝。

在CUDA中是通过函数类型限定词开区别host和device上的函数,主要的三个函数类型限定词如下:

__global__:在device上执行,从host中调用(一些特定的GPU也可以从device上调用),返回类型必须是void,不支持可变参数,不能成为类成员函数。

注意用__global__定义的kernel是异步的,这意味着host不会等待kernel执行完就执行下一步。

__device__:在device上执行,仅可以从device中调用,不可以和__global__同时用。

__host__:在host上执行,仅可以从host上调用,一般省略不写,不可以和__global__同时用,但可和__device__,此时函数会在device和host都编译。


PCIE总线

PCIE总线

PCIE总线

该例程虽然简单,也反映了典型的CUDA程序流程:

分配host内存,并进行数据初始化;

分配device内存,并从host将数据拷贝到device上;

在device上调用CUDA的核函数(kernel)完成进行并行计算;

将device上的运算结果拷贝到host上;

释放device和host上分配的内存。

其中,kernel是在device上线程中并行执行的函数,核函数用__global__符号声明,在调用时需要用<<>>来指定kernel要执行的线程数量,在CUDA中,每个线程都要执行核函数,并且每个线程会分配一个唯一的线程号thread ID,这个ID值可以通过核函数的内置变量threadIdx来获得。





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分