CUDA学习系列教程(一)

CUDA 初探

CUDA,全称是Computer Unified Device Architecture 计算统一设备架构,为了让GPU有可用的编程环境,从而能通过程序控制底层的硬件进行计算。CUDA提供host-device的编程模式以及非常多的接口函数和科学计算库,通过同时执行大量的线程而达到并行的目的。CUDA也有不同的版本,从1.0开始到现在的10.0,每个版本都会有一些新特性。CUDA是基于C语言的扩展,例如扩展了一些限定符device、shared等,从3.0开始也支持c++编程,从7.0开始支持c++11。
CUDA 软件体系可以分为三层结构

  • CUDA函数库(CUDA Library)
  • CUDA运行时API(Runtime API)
  • CUDA驱动API(Driver API)
    在这里插入图片描述
    • CUDA应用程序可以通过直接调用底层的CUDA驱动来调用GPU硬件进行并行计算
    • 也可以使用底层驱动进行了一定封装的CUDA运行时库来简化编程过程(二者不可混合使用)
    • 对一些标准的数学函数计算,也可以直接调用CUFFT,CUBLAS以及CUDPP等标准函数库进一步简化编程过程。
      CUDA可以通过两种方式调用底层GPU硬件:驱动API和运行API
      驱动API:
      - 驱动API是一种基于句柄的底层接口,大多数对象通过句 柄被引用,其函数前缀均为cu。
      - 在调用驱动API前必须进行初始化,然后创建一个CUDA 上下文,该上下文关联到特定设备并成为主机线程的当前上下文。
      - 通过加载PTX汇编形式或二进制对象形式的内核并指定 参数,就可以启动内核进行计算。
      - CUDA驱动API可以通过直接操作硬件执行一些复杂的功 能而获得更高的性能,但其编程较为复杂,使用难度较 大。
      运行API:
      - 运行时API对驱动API进行了一定的封装,隐藏了其部分 实现细节,因此使用起来更为方便,简化了编程的过程 ,因此我们实际中更多使用的是运行时API。
      - 运行时API没有专门的初始化函数,它将在第一次调用运 行时函数时自动完成初始化。
      - 使用运行时API的时候,通常需要包含头文件 cuda_runtime.h,其函数前缀均为cuda。 -
      CUDA函数库:cuda提供了几个较为成熟的高效函数库,程序员可以直接调用这些库函数进行计算,因而大大简化了程序员的工作量。其中最常用的包括:
  • CUFFT(利用CUDA进行傅立叶变换的函数库)
  • CUBLAS(利用CUDA进行加速版本的完整标准矩阵与向量的运算库)
  • CUDPP(常用的并行操作函数库)
  • CUDNN(利用CUDA进行深度卷积神经网络,深度学习使用)
    NVCC编译流程:由于程序是要经过编译器编程成可执行的二进制文件,而CUDA程序有两种代码,一种是运行在CPU上的host代码,一种是运行在gpu上的device代码,所以NVCC编译器要保证两部分代码能够编译成二进制文件在不同的机器上执行。

猜你喜欢

转载自blog.csdn.net/weixin_42104289/article/details/83624553
今日推荐