前言
第四章是详细的NVCC选项描述和用法,我们可以把它当作工具手册,在需要的时候去查看即可,感兴趣的话也可以花时间去了解。但现在,更重要地是理解,NVCC在编译CUDA程序的时候,具体做了什么,有什么作用,这些内容,我们将在完成本文阅读后得到答案。
GPU Generations
为了让GPU 架构进化,NVIDIA GPU被发布为不同的generation。新的generation会引入功能性或者芯片架构上的重大改进,而同一个generation的GPU models只有轻微的配置上的区别,这些配置上的区别会相应地去影响功能或者性能,或者两者都会影响。
cross-generation的GPU应用的二进制兼容性是不受保证的。比如说,一个CUDA程序,它在FermiGPU上进行了编译,很可能在Kepler GPU上是无法运行的,反之亦然。因为,不同generation间的指令集(instruction set)和指令编码(instruction encoding)是不同的。
相同generation的二进制兼容性,需要在特定条件下才能保证,因为必须要有一样的基本指令集。包括这种情况:两个GPU versions之间没有functional differences, 或者其中一个version的functionality被包含在另一个version(比如说,base Maxwell version sm_52 ,它的功能是其他Maxwell versions的子集: 那么任何为sm_52编译的CUDA代码都可以运行在其他的Maxwell GPU上)。
GPU Feature List