Ren*_*nan 30 cuda header-files
我开始使用CUDA进行编程,在某些示例中,我找到了包含文件cuda.h
,cuda_runtime.h
并cuda_runtime_api.h
包含在代码中.有人可以向我解释这些文件之间的区别吗?
tal*_*ies 44
从广义上讲:
cuda.h
定义CUDA驱动程序API的公共主机功能和类型.cuda_runtime_api.h
定义CUDA运行时API的公共主机功能和类型cuda_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()
)。然而,定义的所有 API 调用cuda_runtime.h
实际上都是在头文件本身中使用对cuda_runtime_api.h
. 这些是@talonmies 提到的“功能覆盖”。cuda_runtime_api.h
是一个仅包含 C 语言函数声明的 C 语言头文件 (IIANM);cuda_runtime.h
是一个 C++ 头文件,实现了一些模板化函数。