CUDA学习和总结1

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CUDA学习和总结1相关的知识,希望对你有一定的参考价值。

一. 基本概念

1. CUDA

2007年,NVIDIA推出CUDA(Compute Unified Device Architecture,统一计算设备架构)这个编程模型,目的是为了在应用程序中充分利用CPU和GPU各自的优点,实现CPU/GPU联合执行。这种联合执行的需要已经在最新的集中编程模型(OpenCL,OpenACC,C++ AMP)中体现出来了。

2. 并行编程语言和模型

使用比较广泛的是为可扩展的集群计算设计的消息传递接口(Message Passing Interface,MPI)和为共享存储器的多处理器系统设计的OpenMP。目前,很多HPC(High-Performance Computing)集群采用的都是异构的CPU/GPU节点模型,也就是MPI和CUDA的混合编程,来实现多机多卡模型。目前,支持CUDA的编程语言有C,C++,Fortran,Python,Java [2]。CUDA采用的是SPMD(Single-Program Multiple-Data,单程序多数据)的并行编程风格。

3. 数据并行性,任务并行性

解析:

任务并行性通常对应用进行任务分解得到。例如,对一个需要做向量加法和矩阵-向量乘法的简单应用来说,每个操作可以看作一个任务。如果这两个任务可以独立地执行,那么就能得到任务并行性。

4. CUDA对C中函数声明的扩展

解析:

(1)__device__ float DeviceFunc():在设备上执行,并且只能从设备上调用。

(2)__global__ float KernelFunc():在设备上执行,并且只能从主机上调用。

(3)__host__ float HostFunc():在主机上执行,并且只能从主机上调用。

说明:

如果在函数声明时没有指定CUDA扩展关键字,则默认的函数是主机函数。

5. thread,block,grid,warp,sp,sm

解析:

(1)grid、block、thread:在利用CUDA进行编程时,一个grid分为多个block,而一个block分为多个thread。

(2)sp:最基本的处理单元,最后具体的指令和任务都是在sp上处理的。
(3)sm:多个sp加上其它的一些资源(比如,存储资源、共享内存、寄储器等)组成一个sm。
(4)warp:GPU执行程序时的调度单位。目前CUDA的warp的大小为32,同在一个warp的线程,以不同数据资源执行相同的指令。

6. CUDA核函数

kernel函数完整的执行配置参数形式是<<<Dg, Db, Ns, S>>>,如下所示:

(1)参数Dg用于定义整个grid的维度和尺寸,即一个grid有多少个block。

(2)参数Db用于定义一个block的维度和尺寸,即一个block有多少个thread。

(3)参数Ns是一个可选参数,用于设置每个block除了静态分配的shared Memory以外,最多能动态分配的shared memory大小,单位为byte。不需要动态分配时该值为0或省略不写。

(4)参数S是一个cudaStream_t类型的可选参数,初始值为零,表示该核函数处在哪个流之中。

7. CUDA存储系统

(1)寄存器

(2)局部存储器

(3)共享存储器

(4)全局存储器

(5)常数存储器

8. CUDA SDK

技术分享

9. CUDA软件栈

技术分享

 说明:

CUDA软件栈包含多个层,设备驱动程序、应用程序编程接口(API)及其运行时、两个较高级别的通用数学库,即CUFFT和CUBLAS。相对来说,CUDA Driver是底层API,而CUDA Runtime是高层API。

 

参考文献:

[1] Java bindings for CUDA:http://jcuda.org/

以上是关于CUDA学习和总结1的主要内容,如果未能解决你的问题,请参考以下文章

CUDA学习和总结1

cuda11,cudnn8.1,cuda10.2

Caffe学习和总结1

CUDA卸载&&重装

Makefile for CUDA

无论如何,opencv使用cuda内存