GPU通用计算API的变迁和趋势
摘要:在高性能计算、机器学习等现代应用领域中,GPU(GraphicsProcessingUnit)是占统治地位的计算引擎。GPU从早期的固化逻辑实现、到可编程、到今天的通用计算架构(GPGPU),其应用接口(API)随着功能和通用性的提升而变得越来越灵活和高效。
在高性能计算、机器学习等现代应用领域中,GPU(GraphicsProcessingUnit)是占统治地位的计算引擎。GPU从早期的固化逻辑实现、到可编程、到今天的通用计算架构(GPGPU),其应用接口(API)随着功能和通用性的提升而变得越来越灵活和高效。
1.图形渲染:DirectX和OpenGL
早期的GPU有浑名显卡也不冤枉。从软件角度来说,其逻辑架构基本上就是图形的三角形坐标变换、顶点照明、像素着色等一系列功能。因为逻辑固化、功能单纯,应用程序通过驱动接口可以直接执行这些功能,主要API就是较早版本的OpenGL和DirectX。
OpenGL源于曾经非常风光的SGI公司,然后演进成支持跨平台图形的工业标准,版本也从最初的1.x,到2.0,3.x,到今天的4.5【1】。目前KhronosGroup(OpenGL标准化组织)正在推进OpenGL5.0。而DirectX是微软的windows平台上专用API。DirectX图形API最初的几个版本基本上是奋力直追OpenGL的features,直到DirectX9.3c,微软才完成了实质上的超越。DirectX9.3在features上大致相当于OpenGL3.3。(注意,OpenGL分为台式、嵌入式两个不同的profile,其版本之间的一一对应关系不甚明显)
随着图形算法的改进和对高质清晰画面的追求,GPU需要越来越强大的灵活性来支持纹理、材料属性、和精细度渲染,固化的逻辑显然无法跟得上这些需求。GPU实现真正意义上的可编程是支持高层渲染语言(shadinglanguage)。对应于OpenGL的高层语言是GLShadingLanguage(简称GLSL),对应于DirectX的高层语言是HighLevelShadingLanguage(或HLSL)