cuda.h,cuda_runtime.h和cuda_runtime_api.h之间的差异

问题描述 投票:31回答:2

我开始使用CUDA进行编程,在某些示例中,我找到了代码中包含的包含文件cuda.hcuda_runtime.hcuda_runtime_api.h。有人可以向我解释这些文件之间的区别吗?

cuda header-files
2个回答
44
投票

广义上:

  • cuda.h定义公共主机CUDA的功能和类型驱动程序API。
  • cuda_runtime_api.h定义公众主机的功能和类型CUDA运行时API
  • cuda_runtime.h定义cuda_runtime_api.h的所有功能以及内置类型CUDA语言扩展的定义和功能叠加以及设备固有功能。

[如果要编写要使用包含API调用的主机编译器进行编译的主机代码,则应包含cuda.hcuda_runtime_api.h。如果您需要其他CUDA语言内置类型(如类型),并且正在使用运行时API并通过主机编译器进行编译,则应包含cuda_runtime.h。如果您正在编写将使用nvcc编译的代码,那么这一切都无关紧要,因为nvcc会自动照顾所有必需的标头,而无需程序员干预。


0
投票

我想在@talonmies答案中添加一些观察结果:

  • cuda_runtime.h内部包括cuda_runtime_api.h,但反之则不包括。因此:“运行时包含所有runtime_api”是要记住的助记符。
  • cuda_runtime_api.h没有您可以在官方文档中找到的完整的运行时API函数,而cuda_runtime.h 拥有全部功能(例如:cudaEventCreate())。但是,所有定义为cuda_runtime.h的API调用实际上都是使用对cuda_runtime_api.h中的函数的调用在头文件本身中实现的。这些是@talonmies提到的“功能叠加”。
  • cuda_runtime.h是仅具有C语言函数声明的C语言标头(IIANM); cuda_runtime.h是C ++头文件,已实现一些模板化功能。
热门问题
推荐问题
最新问题