我开始使用CUDA进行编程,在某些示例中,我找到了代码中包含的包含文件cuda.h
,cuda_runtime.h
和cuda_runtime_api.h
。有人可以向我解释这些文件之间的区别吗?
广义上:
cuda.h
定义公共主机CUDA的功能和类型驱动程序API。cuda_runtime_api.h
定义公众主机的功能和类型CUDA运行时APIcuda_runtime.h
定义cuda_runtime_api.h
的所有功能以及内置类型CUDA语言扩展的定义和功能叠加以及设备固有功能。[如果要编写要使用包含API调用的主机编译器进行编译的主机代码,则应包含cuda.h
或cuda_runtime_api.h
。如果您需要其他CUDA语言内置类型(如类型),并且正在使用运行时API并通过主机编译器进行编译,则应包含cuda_runtime.h
。如果您正在编写将使用nvcc编译的代码,那么这一切都无关紧要,因为nvcc会自动照顾所有必需的标头,而无需程序员干预。
我想在@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 ++头文件,已实现一些模板化功能。