CUDA是否包含真正的c ++库?

Boy*_*nov 2 c++ cuda

"CUDA c ++"语言是一种c ++派生语言,但标准编译器不支持它,但可以由nVidia的nvcc编译器编译.这可以导致多语言项目,其中GPU模块使用nvcc编译,而非GPU模块使用gcc编译.

例如,语法kernel<<<dims>>>(params)不是c ++的一部分.

nVidia是否包含一个GPU库(作为CUDA的一部分),它实际上可以与标准的c ++编译器(如gcc)一起使用?

Rob*_*lla 9

CUDA GPU需要为GPU编译设备代码,这与您在为x86目标编译的典型库中找到的x86机器代码不同.

因此,要使用GPU,您将需要nvidia编译器来生成机器代码.

有多种方法可以实现这一目标:

  1. 使用库.与CUDA一起提供的库(如CUBLAS,CUSPARSE,CUSOLVER和CUFFT)包括可从可用普通主机代码调用和链接的预编译GPU例程.这些库都可以与标准的c ++编译器一起使用,例如g ++.

  2. 来自cuda 驱动程序API和cuda 运行时API的大多数例程都可以使用标准c ++编译器从普通主机代码调用和链接.但是,这并没有解决如何处理设备代码的问题.如果设备代码使用驱动程序API(不包括类似语法元素)以PTX格式提供kernel<<<...>>>,则不需要nvcc,并且可以使用标准编译器(如g ++)完全构建应用程序.

  3. 如果设备代码是以C/C++源代码形式(即CUDA C/C++)提供的,那么通常需要使用nvcc将代码转换为PTX(以便可以使用上面的方法2)或直接转换为编译的二进制文件格式,可供驱动程序API或运行时API使用.

  4. 将来,您可能还需要关注CUDA运行时编译机制的不断发展的功能.

  5. 既然你提到了gcc,你可能还想关注gccOpenACC支持的不断发展的功能.