CUDA编程(二) CUDA初始化与核函数

  • 时间:
  • 浏览:1
  • 来源:大发11选5_大发11选5官网

下面亲们在Main函数中调用InitCUDA函数,肯能亲们使用VS,那末来越多那末来越多直接ctrl+F5编译执行就都可不还能能 了,执行时肯能系统上有支持 CUDA 的装置,应该会显示 CUDA initialized。

上一次肯能讲过关于CUDA架构的其他基础了,这里再稍微复习一下,在 CUDA 的架构下,一个多应用应用程序分为一个多部份:host 端和 device 端。Host 端是占据 CPU 上执行的部份,而 device 端则是在显示芯片上执行的部份。Device 端的应用应用程序又称为 “kernel”。通常 host 端应用应用程序会将数据准备好后,群克隆到显卡的内存中,再由显示芯片执行 device 端应用应用程序,完成后再由 host 端应用应用程序将结果从显卡的内存中撤消。

总的来说一个多CUDA应用应用程序的骨架肯能搭建起来了,而GPU计算的重中之重即并行加速还沒有 进行介绍,不过在加速完后 亲们还有一件非常重要的事情都可不还能能 考虑,那那末来越多那末来越多亲们的应用应用程序到底有沒有 加速,也那末来越多那末来越多亲们要输出应用应用程序的运行时间,你这个时间亲们都可不还能能 使用CUDA提供的一个多Clock函数,都可不还能能 取得GPU执行单元的频率,那末来越多那末来越多下一篇博客我将主要讲解你这个函数~希望能给亲们的学习带来帮助~

参考资料:《深入浅出谈CUDA》

亲们都可不还能能 把产生的数据群克隆到Device端的RAM,都可不还能能在显卡上完成计算,而且亲们首先开辟一块离米 的显存,而且把随机数从内存群克隆进去。

在找到支持 CUDA 1.0 以上的装置完后 ,就都可不还能能 呼叫 cudaSetDevice 函式,把它设为目都可不还能能 使用的显卡。

那末来越多那末来越多亲们先写了一个多随机函数:

这段应用应用程序首先会调用cudaGetDeviceCount 函数,获得支持 CUDA 的GPU的数量,肯能计算机上沒有 支持 CUDA 的装置,则会传回 1,而你这个1是device 0 ,device0 那末来越多那末来越多一个多仿真装置,而且CUDA的那末来越多那末来越多功能全版都是支持(不支持CUDA1.0以上版本),而且亲们要真正选着系统上不是有支持CUDA的装置,都可不还能能 对每个device调用cudaGetDeviceProperties,来获得它们的具体参数,以及所支持的CUDA版本(prop.major 和 prop.minor 分别代表装置支持的版本号码,类式 6.5 则 prop.major 为 6 而prop.minor 为 5)

cudaGetDeviceProperties除了都可不还能能 获得装置支持的 CUDA 版本之外,还有装置的名称、内存的大小、最大的 thread 数目、执行单元的频率等等。详情可参考NVIDIA 的 CUDA Programming Guide。

完成了CUDA的初始化检查操作,下面亲们就都可不还能能 使用CUDA完成其他简单计算了,这里亲们打算计算一系列数字的立方和。

在 CUDA 中,要执行一个多核函数,使用以下的语法:

接下来你这个函数会调用 runtime API 中 有关初始化CUDA的内容

全版应用应用程序:

沒有 亲们咋样你都可不还能能 是什么工作在显卡上完成呢?首先第一件事很显而易见,有有哪些数字沒有 上放内存里了,也从不群克隆到GPU的显存上。下面亲们就来看一下数据群克隆的要素。

要写在显示芯片上执行的应用应用程序。在 CUDA 中,在函数前面再加__global__ 表示你这个函式是要在显示芯片上执行的,那末来越多那末来越多亲们若果在正常函数完后 再加一个多__global__就行了:

这次给亲们介绍了CUDA的初始化和咋样在显卡上运行应用应用程序,即先将数据从内存群克隆到显存,再写好运算的核函数,完后 用CUDA调用核函数,完成GPU上的计算,完后 当然从不忘记将结果群克隆回内存,释放掉显存。

首先亲们要使用CUDA的RunTime API 那末来越多那末来越多 亲们都可不还能能 include cuda_runtime.h

注释肯能写得比较明白了。cudaMalloc 和 cudaMemcpy 的用法和一般的 malloc 及 memcpy 类式,不过 cudaMemcpy 则多出一个多参数,指示群克隆内存的方向。在这里肯能是从主内存群克隆到显卡内存,那末来越多那末来越多使用 cudaMemcpyHostToDevice。肯能是从显卡内存到主内存,则使用cudaMemcpyDeviceToHost。

这里亲们先不去并行,那末来越多那末来越多单纯地完成GPU计算,那末来越多那末来越多亲们让block = 1,thread = 1,share memory = 0

计算完了,千万别忘了都可不还能能 把结果从显示芯片群克隆回主内存上,而且释放掉内存~

完成了从内存到显存的数据拷贝完后 ,亲们接下来就要在显卡上完成计算了,咋样让应用应用程序跑在显卡上?答案是核函数。

在显示芯片上执行的应用应用程序有其他限制,首先最明显的一个多限制——沒有 有传回值,还有其他其他的限制,上端会慢慢提到。

写好核函数完后 都可不还能能 让CUDA执行你这个函数。

该函数会产生一大堆 0 ~ 9 之间的随机数,而且亲们要对亲们进行立方和操作。

在上一次中肯能说过了,CUDA安装成功完后 ,新建一个多工程还是十分简单的,直接在新建项目的完后 选着NVIDIA CUDA项目就都可不还能能 了,亲们先新建一个多MyCudaTest 工程,删掉自带的示例kernel.cu,而且新建项,新建一个多CUDA C/C++ File ,亲们首先看一下咋样初始化CUDA,而且我命名为InitCuda.cu

完后 亲们再用CPU计算一下来验证一下上端的过程不是有错,你这个步还是十分必要的:

最后亲们把结果打印出来就大功告成了: