CUDA普及之路——CUDA-x86编译器简析

技术空间

在2010年9月21日开幕的NVIDIA GTC2010大会上,NVIDIA总裁黄仁勋不但公布了NVIDIA显卡下两代架构的名称,同时还宣布NVIDIA将推出CUDA-x86编译器。后者的公布引起了业界的轩然大波,有的人猜测这是NVIDIA获取x86知识产权并跨入处理器行业的前兆;还有的人认为CUDA一直只能在NVIDIA GPU上运行,CUDA-x86是不是代表着GPU已经可以取代处理器了?各种传言自CUDA-x86宣布伊始就没有停止过,那么CUDA-x86编译器到底是一个什么东西?它对我们又有什么意义?

CUDA-x86和GPU无关

不要认为CUDA-x86很深奥,从NVIDIA在GTC2010上公布的不多的资料来看,CUDA-x86编译器只是让x86处理器也能正常运行由CUDA编译的程序而已。

我们知道,CUDA这个平台架构的意义在于将计算密集型内核从CPU转移到浮点性能更强的GPU上进行并行处理,通过功能调用和语言扩展,CUDA可以让开发者能够完全控制通用目的计算内核到GPU的映射,从而让GPU对程序进行运算以及加速。而CUDA-x86编译器的意义则是能让开发人员在x86架构工作站、服务器、集群上编译、优化和运行CUDA架构应用程序,哪怕系统中没有NVIDIA的GPU。

实际上,采用这套编译器制作的软件和过去的使用CUDA开发的程序在同等环境下并没有所谓的性能差异,关键是支持硬件更加广泛。在程序探测到有NVIDIA显卡时,程序自动使用GPU进行运算,而当程序没有发现NVIDIA显卡,那么此时CUDA程序会自动调用处理器的多个核心以及SIMD引擎进行并行计算。

CUDA-x86效率成疑

从CUDA目前制作的程序来看,在GPU的协助下,在一些领域,比如视频转换、物理计算等方面要强于目前的处理器,那么CUDA-x86编译器的出现,是不是意味着我们通过处理器也能享受到CUDA软件的高性能呢?实际上不见得。在之前,NVIDIA曾放出过CUDA语言PhsyX开发工具,这一工具甚至不支持SSE2指令集,所以我们认为CUDA-x86要完全支持目前x86处理器的指令集会有一定难度,比如LGA1156处理器中的AVX指令集。

如果说由CUDA-x86编译器开发而来的软件不会和目前处理器产生兼容性问题,那么大多数人是不会怀疑的;但是如果说这一编译器能让处理器在CUDA软件上发挥最大的效能,那么则有一点不现实。要是NVIDIA无法让CUDA-x86支持处理器最新的指令集,那么在效率上和专为x86架构优化的同类型程序相比肯定要低不少。

普及CUDA还是打压处理器?

NVIDIA官方宣称,CUDA-x86编译器的目的是降低开发人员CUDA入门的难度。不过对于NVIDIA一贯对GPU通用计算的态度而言,发布CUDA-x86编译器多少有点让人感到吃惊,毕竟让处理器也支持CUDA程序,在某一方面也和NVIDIA GPU的宣传相抵触,那么NVIDIA到底是怎么考虑的呢?

从业界来看,目前有两种声音。第一种无疑是赞歌,如果NVIDIA全力推广这种编译器,并且良好地支持处理器指令集,那么对于推广CUDA平台无疑是有好处的,作为CUDA平台的生父,NVIDIA可以借此树立一种广泛的软件开发标准。而另外一种声音则充满了“阴谋论”,如果NVIDIA只是作为一种软件兼容手段来推出CUDA-x86,那么使用处理器运行CUDA软件肯定会比使用GPU更慢,这样在CUDA软件逐渐增多,开始让更多人接受的同时,用户也能看到NVIDIA显卡的优势,从而达到宣传NVIDIA显卡的目的。实际上无论出于那一种目的,从NVIDIA角度来看,都是有益无害的,具体怎么操作,就要看NVIDIA怎么考虑了。

其实对我们用户而言,最希望看到的还是自己的电脑应用效率越来越高,到底是CUDA平台开发的软件还是基于x86优化的原生软件并不重要。所以从这个角度而言,我们还是盼望CUDA-x86编译器能为我们未来的应用带来更好的效果。由于目前NVIDIA以及CUDA-x86编译器开发公司PGI并没有放出程序本身,也没有更多资料透露,所以我们还无法看到CUDA-x86编译器的真实面貌。等到11月,CUDA-x86编译器的底层运行机制和架构彻底公开后,那个时候或许我们就能知道NVIDIA的真正用心了。

41-d15-2.jpg
使用了编译器,此类NVIDIA显卡专用的CUDA软件也能在处理器上使用
41-d15-3.jpg
CUDA-x86编译器能否支持最新的指令集尚未可知