额外的硬件数据:
计算能力没有描述某些硬件功能。 例如,主机和设备之间的内核执行与异步数据传输重叠的能力在大多数但不是所有具有计算能力1.1的GPU上均可用。 在这种情况下,请调用cudaGetDeviceProperties()来确定设备是否具备某种功能。 例如,设备属性结构的asyncEngineCount字段指示重叠的内核执行和数据传输是否可能(并且,如果是的话,可以有多少并发传输是可能的); 同样,canMapHostMemory字段指示是否可以执行零拷贝数据传输。
CUDA运行时和驱动程序API版本:
CUDA Driver API和CUDA Runtime是CUDA的两种编程接口。 它们的版本号使开发人员能够检查与这些API相关的功能,并确定应用程序是否需要比当前安装的版本更新(更高版本)的版本。 这很重要,因为CUDA驱动程序API向后兼容,但不兼容,这意味着针对特定版本的Driver API编译的应用程序,插件和库(包括CUDA Runtime)将在后续(稍后) 司机版本。 但是,针对特定版本的Driver API编译的应用程序,插件和库(包括CUDA Runtime)可能无法在早期版本的驱动程序上使用,如图13所示。
计算能力目标:
如果对运行时会出现的硬件的计算能力产生怀疑,最好假定计算能力为2.0,如CUDA C编程指南关于技术和功能规格部分所定义的那样。
要定位特定版本的NVIDIA硬件和CUDA软件,请使用nvcc的-arch,-code和-gencode选项。 例如,使用warp shuffle操作的代码必须使用-arch = sm_30(或更高的计算能力)进行编译。
CUDA Runtime:
CUDA软件环境的主机运行时组件只能由主机功能使用。 它提供了以下功能:
- 设备管理
- 上下文管理
- 内存管理
- 代码模块管理
- 执行控制
- 纹理参考管理
- 与OpenGL和Direct3D的互操作性
与较低级别的CUDA驱动程序API相比,CUDA Runtime通过提供隐式初始化,上下文管理和设备代码模块管理极大地简化了设备管理。 由nvcc生成的C / C ++主机代码利用CUDA运行时,所以链接到该代码的应用程序将取决于CUDA运行时; 同样,使用cuBLAS,cuFFT和其他CUDA工具包库的代码也将取决于这些库在内部使用的CUDA运行时。
组成CUDA运行时API的功能在CUDA工具包参考手册中进行了说明。
CUDA Runtime处理内核加载并设置内核参数并在启动内核之前启动配置。 隐式驱动程序版本检查,代码初始化,CUDA上下文管理,CUDA模块管理(立方体到函数映射),内核配置和参数传递都由CUDA运行时执行。
它由两个主要部分组成:
- C风格的函数接口(cuda_runtime_api.h)。
- 构建在C风格函数之上的C ++式便利包装器(cuda_runtime.h)。