《OpenCL实战》一1.6 框架和SDK

1.6 框架和SDK

尽管文件matvec.c和 文件matvec.cl中的代码让人眼前一亮,但如果没有经过编译、运行,这些代码就更像花拳绣腿,没有任何实际的作用。而为了能够编译、运行,你就必须要有一套兼容OpenCL的开发工具。正如OpenCL标准所述,框架包含如下三个部分。

平台层——通过它来访问设备,设定上下文

运行时——让主机应用程序将内核和指令队列发送到上下文中的设备上

编译器——构建含有可执行内核的程序

OpenCL工作组并没有提供自己的设计框架。这就要求每个OpenCL兼容设备的生产商需要将OpenCL开发框架作为自己所发布的SDK的一部分。由Nvidia和AMD分别发布的OpenCL SDK是现在比较受欢迎的开发工具,两款SDK都免费,并且包含用于构建OpenCL应用程序所需的库函数文件和工具。不管是面向Nvidia或是AMD的设备进行开发设计,安装SDK的过程都很简单。附录A给出了整个安装的过程,并讨论了如何用这些SDK来构建应用程序。

1.7 小结

OpenCL是一套针对高性能处理芯片构建并行程序的强大工具集。有了OpenCL,你不必费心学习针对设备的编程语言,一次编写程序,便可完成在所有的OpenCL兼容硬件上的运行。

除了可移植性,OpenCL的优势还在于向量处理和并行编程。在高性能计算中,向量是一种包含多个相同数据类型的数据结构。但是和其他的数据类型不同,当在向量上发生操作时,对向量中各个分量都是并行处理完成的。并行编程意味着,主机应用程序可以控制多个设备上的数据处理。OpenCL可以将不同的任务发送到不同的设备上,这种处理方式也被称为任务并行编程。如果能够得到有效利用,向量运算和任务并行编程能够提供较之于标量、单处理器系统在运算性能上的巨大提升。

OpenCL代码包含两个部分:在主机上运行的代码以及在一个或多个设备上运行的代码。主机代码可以用一般的C或C++来编写,用来创建管理“主机-设备”通信的数据结构。主机选择相应的函数(被称为内核),放到命令队列之中,然后发送到设备上。与主机代码不同,内核代码使用的是OpenCL标准中所定义的高性能功能。

在这些新的数据结构和函数操作的闪耀之下,OpenCL会显得亲和力不够。但当你自己动手开始编写程序之后,就会发现它和一般的C和C++程序编写并没有多大不同。一旦能够熟练掌握基于向量的并行编程,写出自己的应用程序,你就再也不会留恋单核编程的日子了。

下一章,我们将开始OpenCL编程的探索之旅,介绍编写主机应用程序所需的主要数据结构。

[1] 译者注:也就是GPU-GPU或者CPU-GPU,这种协同完成任务的计算架构。

[2] 译者注:对这句话以及后文的“一次编写,各设备上运行的理解”的比较,其实想讨论的是language-neutral(语言无关), platform-neutral(平台无关)的问题。因为OpenCL程序比较的底层,所以只是language-neutral层面上的。拿OpenCL和JVM做对比是有意义的,两者所起的作用都是隔开高级语言和汇编语言的直接对话。

[3] 译者注:ISA(指令集体系架构)是计算机体系架构设计的有机组成,二者之间的紧密关系决定,即使是完成的功能相同,但指令集可能没有共同之处。

[4] 译者注:作者并没有在Concurrency(并发)和Parallelism(并行)两个概念之间的区别上做过多的解释,而两者之间的区别也看起来比较隐晦,归结起来,并发就是两个任务交替执行,但不一定是同一时间点上同时执行(例如单核机器上的多任务处理),而并行就是多任务同时进行(例如多核处理器上的多任务处理),前者是操作系统层面上的,而后者是体系结构层面上的。

时间: 2024-08-31 05:36:35

《OpenCL实战》一1.6 框架和SDK的相关文章

《OpenCL实战》一 导读

前言 OpenCL实战 1997年的夏天,我被震惊了.除了能在自己的专业(微电子工程)做实习生,我所能找到的最好的工作就是在一个专门研究高速信号处理的实验室做事,负责用C和MPI(Message Passing Interface,消息传递接口)编程实现二维快速傅里叶变换(fast Fourier transform,FFT).好消息是这个实验室有16台新的SPARC计算机,坏消息是我对MPI和FFT一无所知. 在当时还是新奇古怪的Amazon.com上,我购买了一些相关书籍,然后才费力弄清楚M

《iOS组件与框架——iOS SDK高级特性剖析》——第2章,第2.4节地图注释和覆盖层

2.4 地图注释和覆盖层 iOS组件与框架--iOS SDK高级特性剖析 地图视图(MKMapView)是一种可滚动的视图,行为独特:以标准方式在其中添加子视图时,子视图不会随地图视图滚动,而是静止的,其相对于地图视图框架的位置始终不变.对悬停按钮或标签来说,这种特点也许不错,但在地图上标出点和细节至关重要.要标出地图视图中感兴趣的点或区域,可使用地图注释和覆盖层.地图滚动或缩放时,注释和覆盖层在地图上的位置保持不变.地图注释是使用地图上的单个坐标点定义的,而地图覆盖层可以是线段.多边形或复杂形

《iOS组件与框架——iOS SDK高级特性剖析》——第6章,第6.2节打造播放引擎

6.2 打造播放引擎 iOS组件与框架--iOS SDK高级特性剖析 如果对播放控制没有深刻认识,获取音频数据将毫无意义.要在应用中播放音乐,需要创建一个MPMusicPlayerController实例.在头文件ICFViewController.h中,声明了一个名为player的MPMusicPlayerController变量,在整个示例应用中,都将使用它来控制播放以及获取当前播放的曲目的信息. 在方法viewDidLoad中,初始化了MPMusicPlayerController变量pl

《iOS组件与框架——iOS SDK高级特性剖析》——第8章,第8.6节键值存储同步

8.6 键值存储同步 iOS组件与框架--iOS SDK高级特性剖析 iCloud还支持键值存储同步.这类似于在NSMutableDictionary或NSUserDefaults中存储信息,将一个与对象值相关联的键用于存储和检索:iCloud键值存储的不同之处在于,将自动在设备之间同步键和值.本书编写期间,iCloud为每个应用提供1MB的键值存储空间,最多可存储1024个键值对,因此键值存储机制只适合用于存储少量信息. 本章的示例应用利用iCloud键值存储来跟踪最后修改的备忘录.详细视图控

《OpenCL实战》一第一部分 OpenCL编程基础

第一部分 OpenCL编程基础 OpenCL实战 第一部分展示的是OpenCL语言,我们将详细讨论OpenCL的数据结构和函数,并通过例子来了解它们在应用程序中的作用. 第1章先介绍OpenCL有何用处以及工作原理.第2章和第3章将介绍如何编写主机应用程序,第4章和第5章将讨论内核编程,第6章和第7章将讨论OpenCL编程的高级话题,图像处理和事件处理. 第8章和第9章将讨论如何用C以外的语言(例如C++.Java和Python)来编写OpenCL程序.最后,第10章将介绍如何用OpenCL来开

《OpenCL实战》一第1章 OpenCL简介

第1章 OpenCL简介 OpenCL实战 本章所含内容 了解OpenCL的设计初衷及其好处 介绍OpenCL的基本操作:主机和内核 编写OpenCL应用程序 2010年的10月,高性能计算领域诞生了一项革命性的作品.由中国国家超级计算天津中心建造的Tianhe-1A终于走出迷雾,站在了世界高性能计算机之巅.Tianhe-1A的最高计算速度可达2566TFLOPS(trillion floating-point operations per second, 兆亿浮点指令每秒),而这比第二名的Cr

猫猫学iOS 之微博项目实战(1)微博主框架-子控制器的添加

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客  地址:http://blog.csdn.net/u013357243?viewmode=contents 一:简单介绍 这是新浪微博的iOS端项目,来自于黑马的一个实战项目.(本人没有培训,纯属自学,但人要学会感恩,虽然是自己买的学习资料,但是饮水思源!!) 主要分成五大模块,本次全部运用纯代码实现,其中会用到很多前面学过得内容,如果有的地方有重复的知识点,说明这个知识点真的很重要,没有时间看视频学习或者培训的朋友们,可以看猫猫

《Ext JS实战》——1.3 框架概览

1.3 框架概览 Ext JS作为一个框架,不仅提供了UI部件,还提供了许多其他特性.这些内容可以分成6大部分,即Ext JS核心.UI组件.Web远程调用.数据服务.拖放以及通用工具.图1-4说明了这6个部分. 图1-4 Ext JS的6大部分,即Ext JS核心.UI组件.Web远程调用.数据服务.拖放及通用工具 了解这6大部分之间的区别以及各自的用途,有助于开发应用程序时划分边界,因此下面先讨论这6个部分. Ext JS核心 第一个功能集就是Ext JS核心,这一部分包括了许多基本功能,包

《OpenCL实战》一1.5 OpenCL标准和扩展

1.5 OpenCL标准和扩展 当你在通过网站www.khronos.org/opencl了解OpenCL时,你会看到一个名为opencl-1.1.pdf的重要文件.这其中包含了OpenCL1.1的标准,它所包含的是大量关于编程语言的内容.它不仅仅定义了OpenCL的函数和数据结构,还对厂商所提供的开发工具提出了功能上的要求.除此之外,它还设定了一系列的标准来判定设备的兼容性. 但是兼容软件和硬件所能提供的功能已经超出了标准所设定的内容.这些额外的特性需要通过扩展(extensions)的方式供