尝试理解CUDA虚拟和真实体系结构的区别,以及不同的配置如何影响程序的性能,例如。
-gencode arch=compute_20,code=sm_20
-gencode arch=compute_20,code=sm_21
-gencode arch=compute_21,code=sm_21
...
以下解释摘自NVCC手册:GPU编译是通过中间表示(PTX)进行的,可以将其视为虚拟GPU架构的汇编语言。与实际的图形处理器相反,这样的虚拟GPU完全由其向应用程序提供的功能集或特性定义。特别地,虚拟GPU体系结构提供了一个(在很大程度上)通用的指令集,因为PTX程序始终以文本格式表示,所以二进制指令编码不是问题。因此,nvcc编译命令始终使用两个体系结构:计算体系结构用于指定虚拟中间体系结构,以及真实的GPU体系结构用于指定要执行的目标处理器。对于这样的nvcc命令是有效的,真实体系结构必须是虚拟体系结构的某种实现。所选择的虚拟体系结构更多地是表明应用程序需要的GPU功能:使用最小的虚拟体系结构仍允许对第二个nvcc阶段的实际体系结构进行最广泛的选择范围。相反,指定提供应用程序未使用的功能的虚拟体系结构会不必要地限制可以在第二个nvcc阶段指定的可能的GPU集合。
以上内容解释了虚拟GPU体系结构的概念以及为什么需要使用两个体系结构,但不太清楚不同配置如何影响性能(或者只影响物理GPU设备的选择?)。尤其是以下声明最令人困惑:
特别地,虚拟GPU架构提供了一个(在很大程度上)通用的指令集,因为PTX程序始终以文本格式表示,所以二进制指令编码不是问题。