2012-03-19 120 views
1

Nvidia CUDA驱动程序是做什么的?从使用CUDA的角度来看。 驱动程序传递内核代码,执行配置(#threads,#blocks)... 还有什么?nVIDIA CUDA驱动程序究竟做了什么?

我看到一些帖子,司机应该知道可用SM的数量。 但是这不是没有必要吗?一旦内核传递给GPU,GPU调度器只需将工作分散到可用的SM中即可...

回答

7

GPU不是一个完全自主的设备,它需要一个批次帮助从主机驱动程序最简单的事情就是做 。据我所知的驱动程序包含至少:

  • JIT编译器/优化器(PTX汇编代码可以在运行时驱动程序被编译,如果需要,驱动器也将重新编译代码以匹配装置的执行架构和可能的)
  • 设备存储器管理
  • 主机存储器管理(DMA转移缓冲器,被钉扎和映射的主机存储器,统一寻址模型)
  • 语境和运行时支持(这样的代码/堆/堆栈/ printf的缓冲存储器管理),动态符号管理,流等
  • 内核“格平”调度(包括对所支持的平台管理多个并发内核)
  • 计算模式管理
  • 显示驱动程序的互操作(支持DirectX和OpenGL资源共享)

这可能代表了裸将某些用户级设备代码放到GPU上并通过主机端API运行所需的最低限度。

+0

谢谢,很好的回答! – 2012-03-20 20:27:50

+0

如果你不介意,还有一个问题。 “统一寻址模型”有点像虚拟内存,对吗? CUDA内核中使用的虚拟内存地址将被转换为实际的物理GPU内存地址(全局,本地,共享...)。这完全是在驾驶员级别完成的吗?我认为驱动程序只需要将统一的地址转换为实际的物理地址(全局,本地,...),而GPU HW不需要知道有关此虚拟内容的任何信息。我的理解是否正确?谢谢 ! – 2012-03-20 20:30:33

+0

统一寻址的含义是CUDA 4.0及更高版本中的方案,它允许多个GPU和某些其他设备(如网络接口)将自己映射到主机的公共地址空间。这全部由司机完成。费米卡似乎具有用于虚拟地址到硬件特征的内部映射的TLB。这需要进行编程,这是驱动程序进入的地方,但地址转换应由设备完成。 – talonmies 2012-03-20 21:19:30