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

时间:2015-06-11 15:10:15

标签: c++ cuda

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

例如,语法{{1}}不是c ++的一部分。

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

1 个答案:

答案 0 :(得分:9)

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

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

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

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

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

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

  4. 将来,您可能还需要关注CUDA runtime compilation mechanism的不断发展的功能。

  5. 由于您提到了gcc,您可能还需要关注OpenACC support in gcc不断发展的功能。