OpenCL/OpenGL/DirectX/CUDA - 作业部落

文章推薦指數: 80 %
投票人數:10人

IRIS GL 是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。

OpenGL的英文全称是“Open Graphics ... [关闭] @johntian 2017-03-03T02:12:13.000000Z 字数4473 阅读10970 OpenCL/OpenGL/DirectX/CUDAblog OpenCL/OpenGL/DirectX/CUDA 1什么是OpenCL 2什么是OpenGL 3什么是DirectX 4OpenCL、OpenGL和DirectX之间不得不说的故事 4.1OpenGL和Apple 5什么是CUDA 5.1OpenCL与CUDA的关系是什么 5.2实例 6参考 1什么是OpenCL 是由苹果(Apple)公司发起,业界众多著名厂商共同制作的面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境   OpenCL全称OpenComputingLanguage,是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。

  OpenCL1.0主要由一个并行计算API和一种针对此类计算的编程语言组成,此外还特别定义了:   1.C99编程语言并行扩展子集;   2.适用于各种类型异构处理器的坐标数据和基于任务并行计算API;   3.基于IEEE754标准的数字条件;   4.与OpenGL、OpenGLES和其他图形类API高效互通。

OpenCL实际上是针对异构系统进行并行编程的一个全新的API,OpenCL可以利用GPU进行一些并行计算的工作。

OpenGL是针对图形的,而OpenCL则是针对并行计算的API。

它是一个连接硬件和软件的API接口,OpenCL的作用就是通过调用处理器和GPU的计算资源,释放硬件潜力,让程序运行得更快更好。

2什么是OpenGL  OpenGL™是行业领域中最为广泛接纳的2D/3D图形API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。

OpenGL™是独立于视窗操作系统或其它操作系统的,亦是网络透明的。

在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL™帮助程序员实现在PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。

  OpenGL(全写OpenGraphicsLibrary)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。

OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。

OpenGL的前身是SGI公司为其图形工作站开发的IRISGL。

IRISGL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRISGL的基础上开发了OpenGL。

OpenGL的英文全称是“OpenGraphicsLibrary”,顾名思义,OpenGL便是“开放的图形程序接口”。

虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。

  OpenGL仍然是唯一能够取代微软对3D图形技术的完全控制的API。

它仍然具有一定的生命力,但是SiliconGraphics已经不再以任何让微软不悦的方式推广OpenGL,因而它存在较高的风险。

游戏开发人员是一个有着独立思想的群体,很多重要的开发人员目前仍然在使用OpenGL。

因此,硬件开发商正在设法加强对它的支持。

Direct3D目前还不能支持高端的图形设备和专业应用;OpenGL在这些领域占据着统治地位。

最后,开放源码社区(尤其是Mesa项目)一直致力于为任何类型的计算机(无论它们是否使用微软的操作系统)提供OpenGL支持。

  08年正式公布OpenGL3.0版本。

并且得到了,nv的支持,其官方网站上提供针对N卡的sdk下载。

3什么是DirectX  DirectX是一种应用程序接口(API),它可让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3d图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。

这样说是不是有点不太明白,其实从字面意义上说,Direct就是直接的意思,而后边的X则代表了很多的意思,从这一点上我们就可以看出DirectX的出现就是为了为众多软件提供直接服务的。

  DirectX是由很多API组成的,按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和网络部分。

  显示部分担任图形处理的关键,分为DirectDraw(DDraw)和Direct3D(D3D),前者主要负责2D图像加速。

它包括很多方面:我们播放mpg、DVD电影、看图、玩小游戏等等都是用的DDraw,你可以把它理解成所有划线的部分都是用的DDraw。

后者则主要负责3D效果的显示,比如CS中的场景和人物、FIFA中的人物等等,都是使用了DirectX的Direct3D。

  4OpenCL、OpenGL和DirectX之间不得不说的故事  业界对Apple的OpenCL的支持将成为它发展的重要因素,早在90年代中期,微软就曾经努力阻止OpenGL成为行业的标准,以推行自己的DirectX显卡软件和游戏工具。

微软的DirectX起初的战略是为了推动DOS游戏开发者转向Windows,从此之后它就被绑定在Windows下为PC游戏服务,所以它仅支持Windows。

  断发布新版的DirectX也推动了开发者转向最新版的Windows,比如最新版的DirectX10就带来了不少Vista专属游戏,从而推动了Vista的销量,然而它并未达到预期的效果,因为Vista的速度阻碍了DirectX10游戏的市场,开发者只能将目标再次转向XP。

4.1OpenGL和Apple  OpenGL的前身是高端图形工作站厂商SGI在80年代所开发的IRISG,它在90年代初期成为了开源的标准。

当时微软在它的Windows95中发布了Direct3D,将它作为OpenGL的竞争对手。

而在90年代末,微软曾经和SGI进行了Fahrenheit项目的开发,试图将两者结合起来,但是没有成功。

之后微软继续开发DirectX并与GPU厂商合作,留下OpenGL任其发展。

  OpenGL之后几乎逐渐消失,直到90年代末Apple放弃了自己的QuickDraw3D,将OpenGL作为MacOSX的官方3D库。

Apple的系统给OpenGL程序带来了不少拥护者。

之后OpenGL正式被Linux采用,现在主流的游戏平台,包括PSP,PS3和Wii都支持该技术。

  但是微软的Xbox360例外,它采用了自己的DirectX图形库,而将OpenGL排除在外。

如今OpenGL对DirectX来说比以前更有竞争力了。

而微软计划在Windows7中的DirectX11增加类似于OpenCL的技术,以实现GPGPU运算。

但是Apple的OpenCL能更紧密地与OpenGL代码协同工作,能带来更广泛的支持。

Apple还将OpenCL作为一个免费的,开源的标准,让任何人都能参与到该平台中来。

  OpenGL和OpenCL设计的相似性,使开发者更易于开发。

比如在OpenCL下进行数据虚拟化计算,可以把相同的对象在OpenGL上进行图形渲染。

同时OpenGL下的图形渲染可以在OpenCL下进行处理和转换。

  OpenCL得到了GPU厂商NVIDIA和AMD的支持,同时支持Apple,SONY,任天堂的平台,还支持Linux和Windows,而且任何公司的开发者都可以参与到该技术的发展中来。

5什么是CUDACUDA是一个基于NvidiaGPU的并行计算的架构。

CUDA最主要的包含两个方面: 1.ISA指令集架构; 2.硬件计算引擎;实际上是硬件和指令集。

也就是说我们可以把CUDA看做是与X86或者cell类似的架构,但是是基于是GPU,而不是传统的CPU。

CUDA架构是原生的,专门为计算接口而建造的这样的一个架构,这种硬件架构包括指令集都是非常适合于这种并行计算,为异构计算而设计的一整套的架构。

CUDA架构可以支持API,包括OpenCL或者DirectX,同时CUDA还支持C、C++语言,还包括Fortran、Java、Python等各种各样的语言。

5.1OpenCL与CUDA的关系是什么 CUDA和OpenCL的关系并不是冲突关系,而是包容关系。

OpenCL是一个API,在第一个级别,CUDA架构是更高一个级别,在这个架构上不管是OpenCL还是DX11这样的API,还是像C语言、Fortran、DX11计算,都可以支持。

作为程序开发员来讲,一般他们只懂这些语言或者API,可以采用多种语言开发自己的程序,不管他选择什么语言,只要是希望调用GPU的计算能,在这个架构上都可以用CUDA来编程。

关于OpenCL与CUDA之间的技术区别,主要体现在实现方法上。

基于C语言的CUDA被包装成一种容易编写的代码,因此即使是不熟悉芯片构造的科研人员,也可能利用CUDA工具编写出实用的程序。

而OpenCL虽然句法上与CUDA接近,但是它更加强调底层操作,因此难度较高,但正因为如此,OpenCL才能跨平台运行。

CUDA是一个并行计算的架构,包含有一个指令集架构和相应的硬件引擎。

OpenCL是一个并行计算的应用程序编程接口(API),在NVIDIACUDA架构上OpenCL是除了CforCUDA外新增的一个CUDA程序开发途径。

如果你想获得更多的对硬件上的控制权的话,你可以使用OpenCL这个API来进行编程,如果对API不是太了解,也可以用CUDAC语言来编程,这是两种不同编程的方式,他们有他们相同点和不同点。

OpenCL和CUDAC语言进行开发的时候,在并行计算这块,他们的概念是差不多的,这两种程序在程序上是有很大的相似度,所以程序之间的相互移植相对来说也是比较容易。

CUDAC语言与OpenCL的定位不同,或者说是用人群不同。

CUDAC是一种高级语言,那些对硬件了解不多的非专业人士也能轻松上手;而OpenCL则是针对硬件的应用程序开发接口,它能给程序员更多对硬件的控制权,相应的上手及开发会比较难一些。

程序员的使用习惯也是非常重要的一方面,那些在X86CPU平台使用C语言的人员,会很容易接受基于CUDAGPU平台的C语言;而习惯于使用OpenGL图形开发的人员,看到OpenCL会更加亲切一些,在其基础上开发与图形、视频有关的计算程序会非常容易。

5.2实例 OpenCL教学 Windows下OpenCL Xcode下OpenCL CUDA教学 6参考 OpenCL、OpenGL和DirectX三者的区别 CUDA与OpenCL区别 谁主沉浮OpenCL与CUDA架构深入解析 OpenCL释放物理游戏洪流跨平台通用计算终于实现 NVIDIA新战法:OpenCL+CUDA 内容目录 blog 18 RetrainatensorflowmodelbasedonInceptionv3 Ubuntu16.04Caffe 书籍 OpenCL/OpenGL/DirectX/CUDA Go基础 Centos7.2Caffe Ubuntu16.04Chrome科学上网 Linux(Ubuntu)日常问题解决方法 数学 Windows7Ubuntu16.04双硬盘双系统搭建Caffe 创建OpenCV-Android库 CDNsim视频内容分发平台搭建 Java入门第一季 自适应阈值Canny边缘检测 OpenCV&&Tesseract-OCRinAndroidStudio VisualStudio代码注释模板 Iterm2快捷键 BuildboostinWindows764bitVS2013 code 1 Emacs快速指南(中文精简版) dl 1 yolo-voc.2.0.cfg参数解析 以下【标签】将用于标记这篇文稿: 下载客户端 关注开发者 报告问题,建议 联系我们 添加新批注 在作者公开此批注前,只有你和作者可见。

保存 取消 修改 保存 取消 删除 私有 公开 删除 查看更早的5条回复 回复批注 × 通知 取消 确认



請為這篇文章評分?