CUDA使用解释器还是编译器?

CUDA使用解释器还是编译器?,cuda,Cuda,这是一个有点愚蠢的问题,但我想知道CUDA是使用解释器还是编译器? 我很好奇,因为我不太清楚CUDA是如何让源代码在两个具有不同计算能力的卡上运行的。: 程序员使用“C for CUDA”(带有Nvidia扩展和某些限制的C),通过PathScale Open64 C编译器编译 因此,您的答案是:它使用编译器。 要了解它可以在多张卡上运行的原因(): CUDAC/C++提供了一种抽象,它是一种表达程序执行方式的方法。编译器生成的PTX代码也不是特定于硬件的。在运行时,为特定的目标GPU编译PTX

这是一个有点愚蠢的问题,但我想知道CUDA是使用解释器还是编译器? 我很好奇,因为我不太清楚CUDA是如何让源代码在两个具有不同计算能力的卡上运行的。

:

程序员使用“C for CUDA”(带有Nvidia扩展和某些限制的C),通过PathScale Open64 C编译器编译

因此,您的答案是:它使用编译器。

要了解它可以在多张卡上运行的原因():

CUDAC/C++提供了一种抽象,它是一种表达程序执行方式的方法。编译器生成的PTX代码也不是特定于硬件的。在运行时,为特定的目标GPU编译PTX-这是驱动程序的责任,每次发布新的GPU时,驱动程序都会更新

这些官方文件并解释了有关汇编过程的所有细节

第二份文件:

nvcc模仿GNU编译器gcc的行为:它接受一个范围 用于定义宏和 包括/库路径,并用于指导编译过程


不仅限于cuda,directx或opengl中的着色器也遵循某种字节码,并由底层驱动程序转换为本机代码。

值得注意的是,最近的cuda对GPU代码对象使用基于elf的fat二进制格式,一个可执行文件可以包含同一应用程序中多个体系结构的最终汇编程序。因此,通常不需要驱动程序重新编译PTX代码,运行库只需从fat二进制负载中选择适当的代码对象。