cuDNN API 演化 (一)

cuDNN 是 NVIDIA 公司专门为深度学习领域开发的 GPU 加速库。目前,它只支持 NVIDIA 的 GPU。读者如果有兴趣,可以去官方网站免费下载试用。下载链接:https://developer.nvidia.com/cudnn

cuDNN 实现了深度学习需要用到的大多数功能,并且还不断有新的功能加入。本系列主要介绍 cuDNN 中已有 API 演化的一些规则和习惯,并辅以具体的实例加以说明。本文不会介绍 cuDNN 的基本功能。读者有兴趣,也请参考官方文档。

cuDNN 每推出一个新的版本,可能对上个版本中某个 API 的功能做些修改。那么在新版本中,修改后该 API 如何命名以保证向后兼容呢?以 cuDNN v2 版本中某个 API cudnnMyName 为例,假如 cuDNN v3 版本对它的接口做了修改,新的 API 命名就以当前 cuDNN 版本号为后缀修饰,即在 v3 版本中新增一个名字为 cudnnMyName_v3 的 API。当然,出于向后兼容性的考虑,当前版本(cuDNN v3)还会保留该 API 旧的版本,名字不变。

cuDNN 设计时,通常会保证向后兼容两个版本。同样以这个 API cudnnMyName 为例,看它是如何在 cuDNN v4 中演化的,以实现向后兼容两个版本。前面提到,该 API 在 v3 中有两个版本,分别是不带 _v3 修饰和带 _v3 修饰的,对应旧的和新的版本。它们在 v4 中按如下规则演化

  • 不带 _v3 修饰的版本cudnnMyName,也即对应 v2 中旧的版本,演化到 v4 版本采用 _v2 修饰,即在 v4 中演化为 cudnnMyName_v2,以支持 v2 版本
  • 带 _v3 修饰的版本cudnnMyName_v3,也即对应 v3 中新的版本,演化到 v4 版本时不变化,以支持 v3 版本!

同时,v4 版本还会新加一个不带任何后缀修饰的版本,即cudnnMyName。但请注意,这时它映射到新的版本,即cudnnMyName_v3,与 v3 版本中不带后缀修饰的含义不一样!此时,该 API 在 v4 中有三个名字, _v2 修饰, _v3 修饰和不带修饰,后两者功能一样。这样,cuDNN v4 就实现了对 cuDNN v2 和 cuDNN v3 的向后支持。

如果继续这样的策略保证 cuDNN 的兼容性,同一个 API 的版本会越来越多,导致 cuDNN 臃肿、维护变得困难。因此,必须有相应的 Deprecation 策略。关于 Deprecation,我没有想到合适的中文翻译。它的含义是,某个特性或者某个 API,在软件的当前版本中支持,但在将来下一个版本中官方可能不再支持。本系列的下一篇,我会介绍 cuDNN 中 API 的 Deprecation 策略。

你可能感兴趣的:(cudnn)