如果你是苹果的粉丝,你一定会结识一个新朋友——NVIDIA;如果你是NVIDIA的粉丝,那你一定欣喜自己与万人迷“苹果”走的更近。在今年10月24日,老乔津津有味的拿着一串数据来宣布旗下MacBook全系列产品以及今后相关众多Mac产品将采用NVIDIA相关方案,苹果的粉丝被教父的Keynote所打动,开始学习只有DIY发烧友才关注的一些技术名词,他们在论坛里热情高涨,讨论着“HybridSLI”、“CUDA”、“PureVideo”等等。
视觉革命与计算革命 |
苹果与NVIDIA本月又联手上演好戏,本月,苹果又向大家宣布的OPENCL标准,它将在苹果明年初推出的新一代操作系统Snow Leopard上开始支持,虽然我们看到支持的成员几乎涵盖了业内所有的知名企业,但大家应该清楚,在孕育OPENCL的过程中,能够提供硬件平台的只有NVIDIA,当然OPENCL标准工作组Khronos也首次将如此多的业内精英撮合到一起为了一个“并行计算”的新API。
大家为什么要支持OPENCL?首先简单了解一下OPENCL和异构系统?OPENCL英文全称Open Computing Language,是基于异构系统并行编程的一个全新API,命名上虽然与OPENGL(Open Graphics Library)类似但方向上有很大不同,但开发上又存在一些联系。在未来计算领域,异构系统已经被公认为发展趋势,即CPU与平行处理器的异构形式,这也是未来Intel的发展方向。而我们目前能看到的能够提供异构系统,并有成熟软件平台支持的仅有NVIDIA的CUDA架构。
在OPENCL标准组织中,由于Intel和AMD的加入,让大家对CUDA与OPENCL的关系产生很多疑问,本来已经成熟的CUDA平台,为什么还需要一个新API的加入?Intel和AMD如何和OPENCL兼容?OPENCL和CUDA谁更好?这都是非常集中的问题。
我们来看看Khronos OPENCL组织是如何组成的。我们知道,在OPENGL时期,该标准也是由Khronos这样一个协调机构来运作的。而你会发现,这次OPENCL由苹果作为代表发布,也正是苹果选择NVIDIA战略中的重要一环,与其说OPENCL是苹果发起的,还不如说是NVIDIA策划的。而事实的确如此,NVIDIA副总裁Neil Trevett正是现在Khronos OPENCL工作的主席,OPENCL的标准的创立也是NVIDIA技术为基础的,其中骨干员工也大半来自NVIDIA。其实这也不难理解,要做一个异构并行计算的系统和标准API,除了NVIDIA,你还能找谁呢?
而下面这张图也许是在此次OPENCL发布后较为常见的一个,不过其中意义大家不一定能够完全领会,我们在这里做一个说明。这是一张能够解释大家对OPENCL与CUDA关系疑问的重要“结构”图。NVIDIA第一次明确了两个重要名词“CUDA架构”与“CUDA C语言”。在以往理解中,我们常默认CUDA就是指基于NVIDIA GPU或并行处理器的编译器、C语言、库和相关软件开发环境;而硬件方面,则是指所有支持CUDA的GPU。今天,NVIDIA明确了包括硬件支持和软件环境一起,我们称之为CUDA架构,而常用的基于C语言的开发环境则是CUDA C,或者CUDA Fortran,CUDA C++,以及今后的CUDA JAVA等等。而OPENCL,也与之并列。
具体来说,NVIDIA将CUDA架构看作是一个异构计算中并行计算部分的核心,无论你使用怎样的高级语言或者是怎样的API的形式进行开发,在硬件上均符合CUDA架构(即NVIDIA GPU/并行处理器)。这有点类似于传统CPU领域,无论你使用何种高级语言、汇编语言、API进行软件开发,但是都为X86架构服务。
解决了OPENCL与CUDA,确切的说是与CUDA C的争论的问题,大家仍心存疑问。NVIDIA在初期宣传CUDA C时,其优势就在于高级语言对软件开发的便利和普遍性,而OPENCL API级别的编程相对C语言来说又有什么优势和必要?我们认为,此时NVIDIA宣传CUDA与1年前初期阶段已经有所不同,高级语言的支持是CUDA努力的主要方向,而如何全方位的吸引开发人员的加入,这对CUDA来说同样重要。
CUDA C擅长与服务的对象 |
OPENCL的特点与服务对象 |
我们从图中看到,API和C语言在开发技术上有所不同,NVIDIA表示对原有OPENGL开发人员来说一定会喜欢OPENCL,因为其中有很多类似之处;同时,NVIDIA也表示,由于都是基于CUDA架构,所以OPENCL与CUDA C之间如果真需要迁移也是相对方便的(似乎没有太大必要,总之都是基于同样硬件架构的)。NVIDIA认为,目前对于并行计算而言,开发语言和API并不是太多,而是太少,未来DirectX11 Compute Shader同样是基于CUDA架构的。
OPENCL的发布仅仅是一个开始,从路线图来看要到2009年中,OPENC 1.0正式版才将发布,这个时间似乎要比苹果Snow Leopard操作系统发布时间还稍晚些,但基于NVIDIA CUDA架构的OPENCL开发的软件在新一代MacOS上有怎样的表现,却非常值得期待。
OPENCL的发展蓝图 |
CUDA C语言的路线图 |
CUDA C语言路线图则非常细致,但在这里NVIDIA没有公布每个版本带来的变化。但纵观半年来CUDA2.0发布后的变化,在初期第三方和NVIDIA开发的一些算法已经被CUDA 2.0加入到库中,例如FFT高速傅立叶变换,FIR滤波等等。对于需要这些数学计算的使用者来说,不需要懂得C语言、CUDA编程,只要替换库中的相关语句和参数,便可以让它的计算提速几十倍。
OPENCL与CUDA的关系大家应该非常清楚了,但我们最为好奇的是,在中国市场一个看上去仅仅MacOS支持的API会得到如此大关注,这有些令人不能理解。虽然苹果的IPOD和IPHONE在中国市场的欢迎程度相当高,但MacOS的占有率是相当低,即便MacBook的用户也有大半人数和大半时间在使用着Windows操作系统,苹果发布OPENCL,将在下一代操作系统Snow Leopard中使用,竟然有人关心这种边缘新闻?
乔布斯为什么会喜欢NVIDIA? |
经过前文一大串的讲述,我们对OPENCL应该有了大概的了解。而我们的身份似乎不经意间变成了苹果和NVIDIA的拥护者,大家主动的对OPENCL和CUDA提出各种各样的问题,其热情完全不亚于对待3G IPHONE和Macbook Air的发布上市,将对待品牌的热情延续到技术品牌与技术本身,实在是一件神奇的事情。这不由让我们想起了神奇的乔布斯,老乔。
曾经有朋友评价,苹果选择NVIDIA非常符合老乔的性格,理由很简单,老乔喜欢有个性的东西,同时也具有对未来敏锐的前瞻性,Macbook系列使用NVIDIA GPU产品,其实只是一个开始。而我更加同意另一个有趣的观点,他们认为老乔这次是被NVIDIA 黄仁勋感动了,这也同样很容易理解。当OPENCL在MacOS上得以应用,让Macbook因此受益时,这才仅仅是NVIDIA CUDA架构与并行计算革命中的一部分,CUDA架构的作为不仅仅是OPENCL如此简单,CUDA架构目前已经成为并行计算革命的惟一领导者。