• 本章介绍CUDA的软件架构。
  • 2章:CUDA的硬件平台和同CUDA交互的方法,
    • 本章:CUDA的软件平台和CUDA所支持的操作环境。
  • 对CUDA中的每个软件抽象从
    • 设备与上下文到 模块与内核 到内存作介绍。
    • 在描述特定的软件抽象
      • 如何被硬件所支持时会回顾第2章
  • 对比CUDA运行时(CUDA runtime)和驱动程序API( driver API),
    • CUDA源代码是怎样编译为在GPU上执行的microcode的。
  • 本章仅CUDA软件架构的概览,详细的内容在后面展开。

3.1 软件层

3-1:CUDA应用程序中的不同层次,从应用程序本身到CUDA硬件上执行的CUDA驱动程序。

  • 除了内核模式驱动程序以外的
    • 所有软件都执行在目标OS的非特权用户模式下。
  • 现代多任务OS的安全模型中,用户模式是“不可信任的”,硬件与OS软件须采取措施严格分割一个与另一个应用程序。
    • 意味一个CUDA应用程序使用的主机和设备内存无法
    • 被另ー一个CUDA程序使用,
    • 唯一的例外是这些程序申请内存共享,这只有在内核模式下才可做到。
      3软件架构

CUDA库建立在CUDA运行时或驱动程序接口层之上

  • CUDA运行时: 支持CUDA的集成C++/GPU工具的库。
  • 当nvcc编译器分割.cu文件发主机和设备,主机部分会自动生成对CUDA运行时的调用,以方便像nvcc中用<<>>>启动内核这样的操作

CUDA驱动程序API,由CUDA用户模式驱动程序直接导出,是CUDA应用程序可用的最底层API。

  • 驱动程序API直接调用用户模式驱动程序,之后可能会继续调用内核模式做分配内存等操作。
  • 驱动程序API和CUDA运行时中的函数名称分别以cu*()和cuda*()打头
  • 许多函数,像cudaEventElapsedTime(),本质上是相同的,只在前缀上有区别。

3.1.1 CUDA运行时和驱动程序

CUDA运行时(CUDART):由CUDA语言集成环境使用的库。

  • 每个版本的CUDA工具集( CUDA toolchain)都有其特定的CUDA运行时版本,
  • 应用程序会自动链接和运行时兼容的工具集,程序只有当匹配版本的CUDART在路径中可用时才能正确

CUDA驱动程序是后向兼容的,支持所有同版本CUDA编写的程序和旧版本程序。

  • 它提供一个相对低层的“驱动程序API”(在cuda.h中),
    • 使开发者能更紧凑地整理资源和为初始化定时。
  • 驱动程序版本:cuDriverGetVersion
  • CUresult CUDAAPI cuDriverGetVersion(int *driverversion)
  • 返回十进制,给出由驱动程序支持的CUDA版本,
  • 3010 CUDA3.1,5000代表版本5.0。

表3-1 CUDA每个版本中的特性。

  • 在CUDA运行时应用程序中,版本信息由cudaDeviceProp结构体的major和minor提供。
  • 3.3.2小节中详细审视ta
    3软件架构

CUDA运行时要机器中安装的驱动程序版本高于或等于由运行时支持的CUDA版本。

  • 若驱动程序的版本低于运行时版本,CUDA应用程序会初始化失败,弹错cuda Errorlnsufficientdriver(35)。
  • CUDA5.0引入设备运行时( device runtime)概念,
    • CUDA运行时的一个子集,可被CUDA内核直接调用。
    • 有关设备运行时的更详细描述在第7章给出。

驱动程序模型

相关文章:

  • 2021-04-24
  • 2022-12-23
  • 2022-01-16
猜你喜欢
  • 2022-02-23
  • 2021-10-26
  • 2021-10-23
  • 2022-12-23
  • 2022-01-17
  • 2021-10-23
相关资源
相似解决方案