Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CUDA运行时环境中定义的API函数_Api_Cuda_Runtime - Fatal编程技术网

CUDA运行时环境中定义的API函数

CUDA运行时环境中定义的API函数,api,cuda,runtime,Api,Cuda,Runtime,一些CUDA API是在运行时环境中定义的,比如cudaMalloc、cudaMemcpy、cudaFree,我理解这一点,因为它们在运行时都有一些事情要做(例如,cudaMalloc,比如c中的malloc,在运行时执行动态内存分配)。但是我不明白为什么像CudaGetDeviceProperty这样的函数是在那里定义的,难道它们不能在普通的头文件中定义吗? 所有CUDA API都在运行时环境中吗?运行时函数在普通头文件中声明,它是CUDA_runtime.h 除内核启动外,您可以使用g++(

一些CUDA API是在运行时环境中定义的,比如cudaMalloc、cudaMemcpy、cudaFree,我理解这一点,因为它们在运行时都有一些事情要做(例如,cudaMalloc,比如c中的malloc,在运行时执行动态内存分配)。但是我不明白为什么像CudaGetDeviceProperty这样的函数是在那里定义的,难道它们不能在普通的头文件中定义吗?

所有CUDA API都在运行时环境中吗?

运行时函数在普通头文件中声明,它是
CUDA_runtime.h

除内核启动外,您可以使用g++(例如,windows上的cl.exe)通过包含
cuda_runtime.h
并针对您的操作系统(例如linux上的
-L/usr/local/cuda/lib64-lcudart
)的相应cudart(cuda运行时库)进行链接来构建所有cuda运行时API功能

您通常看不到这一点的原因是,当使用
nvcc
编译时(一个在引擎盖下调用主机编译器的编译器驱动程序),这个include和library链接由
nvcc
为您处理,无需显式指定它们

大多数CUDA运行时函数都以某种方式与CUDA GPU驱动程序交互。我认为在这方面,
cudamaloc
cudagetDeviceProperty
之间没有任何区别

CUDA中的主要API区别在于和。这些API在很大程度上是可比的,它们的函数大多相似,但它们的用途稍有不同。和(例如,内核从使用主机编译器编译的文件启动,以及PTX模块的JIT编译)这在运行时API中并不完全可行